
एंड्रॉइड ऐप्स के रिवर्स इंजीनियरिंग को आसान बनाता है, APK को खींचने, डिकोड करने, पुनर्निर्माण करने और पैच करने जैसे दोहराए जाने वाले कार्यों को स्वचालित करता है।
apk.sh एक Bash स्क्रिप्ट है जो Android ऐप्स के रिवर्स इंजीनियरिंग को आसान बनाती है, तथा पुलिंग, डिकोडिंग, रीबिल्डिंग और APK पैचिंग जैसे कुछ दोहराए जाने वाले कार्यों को स्वचालित करती है।
apk.sh मूल रूप से संसाधनों को डिसअसेंबल, डिकोड और रीबिल्ड करने के लिए apktool और frida गैजेट इंजेक्शन प्रक्रिया को स्वचालित करने के लिए कुछ bash का उपयोग करता है। यह ऐप बंडल/स्प्लिट APK को भी सपोर्ट करता है।
⬅️ डिवाइस से APK खींचना उतना ही सरल है जितना ./apk.sh pull <package_name> चलाना।
🔧 APK को डिकोड करना उतना ही सरल है जितना ./apk.sh decode <apk_name> चलाना।
🔩 APK को रीबिल्ड करना उतना ही सरल है जितना ./apk.sh build <apk_dir> चलाना।
apk.sh pull डिवाइस से एक APK खींचता है।
यह ऐप बंडल/स्प्लिट APK को सपोर्ट करता है, जिसका अर्थ है कि स्प्लिट APK को एक ही APK में जोड़ दिया जाएगा (यह पैचिंग के लिए उपयोगी है)।
यदि पैकेज एक ऐप बंडल/स्प्लिट APK है, तो apk.sh APK को एक ही APK में जोड़ देगा, सभी सार्वजनिक संसाधन पहचानकर्ताओं को ठीक करता है।
apk.sh patch स्टार्ट पर frida-gadget.so लोड करने के लिए एक APK को पैच करता है।
frida-gadget.so Frida की एक साझा लाइब्रेरी है जिसे प्रोग्राम द्वारा इंस्ट्रूमेंटेड होने के लिए लोड किया जाना है (जब इंजेक्टेड मोड उपयुक्त न हो)। केवल लाइब्रेरी को लोड करने से आप मौजूदा Frida-आधारित टूल जैसे frida-trace का उपयोग करके इसके साथ बातचीत कर सकेंगे। यह एक पूरी तरह से स्वायत्त दृष्टिकोण का भी समर्थन करता है जहाँ यह बिना किसी बाहरी संचार के फाइलसिस्टम से स्क्रिप्ट चला सकता है।
APK पैच करना उतना ही सरल है जितना ./apk.sh patch <apk_name> --arch arm चलाना।
आप ./apk.sh patch <apk_name> --arch arm --gadget-conf <config.json> के साथ एक json में Frida गैजेट कॉन्फ़िगरेशन भी निर्दिष्ट कर सकते हैं।
यदि आप #30 जैसी "already interned" apktool d त्रुटियों का सामना करते हैं, तो आप --only-main-classes फ़्लैग पास कर सकते हैं, जो आपके APK को डिकोड करते समय apktool को पास किया जाएगा।
डिफ़ॉल्ट इंटरैक्शन में, Frida Gadget frida-server संगत इंटरफ़ेस को उजागर करता है, डिफ़ॉल्ट रूप से localhost:27042 पर सुनता है। प्रारंभिक इंस्ट्रूमेंटेशन प्राप्त करने के लिए, Frida Gadget के कंस्ट्रक्टर फ़ंक्शन को तब तक ब्लॉक करने देता है जब तक आप या तो attach() करते हैं या resume() कॉल करते हैं।
यदि आप इस ब्लॉकिंग व्यवहार को नहीं चाहते हैं और प्रोग्राम को तुरंत बूट होने देना चाहते हैं, या आप चाहते हैं कि यह किसी भिन्न इंटरफ़ेस या पोर्ट पर सुने, तो आप इसे json कॉन्फ़िगरेशन फ़ाइल के माध्यम से अनुकूलित कर सकते हैं।
डिफ़ॉल्ट कॉन्फ़िगरेशन है:
{
"interaction": {
"type": "listen",
"address": "127.0.0.1",
"port": 27042,
"on_port_conflict": "fail",
"on_load": "wait"
}
}
आप --gadget-conf विकल्प के साथ गैजेट कॉन्फ़िगरेशन फ़ाइल को apk.sh में पास कर सकते हैं।
एक सामान्य सुझाया गया कॉन्फ़िगरेशन हो सकता है:
{
"interaction": {
"type": "script",
"path": "/data/local/tmp/script.js",
"on_change":"reload"
}
}
script.js कुछ इस तरह हो सकता है:
var android_log_write = new NativeFunction(
Module.getExportByName(null, '__android_log_write'),
'int',
['int', 'pointer', 'pointer']
);
var tag = Memory.allocUtf8String("[frida-script][ax]");
var work = function() {
setTimeout(function() {
android_log_write(3, tag, Memory.allocUtf8String("ping @ " + Date.now()));
work();
}, 1000);
}
work();
android_log_write(3, tag, Memory.allocUtf8String(">--(O.o)-<"));
adb push script.js /data/local/tmp
./apk.sh patch <apk_name> --arch arm --gadget-conf <config.json>
adb install file.gadget.apk
स्क्रिप्ट इंटरैक्शन प्रकार का उपयोग करते समय frida codeshare से किसी भी स्क्रिप्ट के console.log आउटपुट को logcat पर प्रिंट करने के लिए निम्नलिखित कोड जोड़ें।
// print to logcat the console.log output
// see: https://github.com/frida/frida/issues/382
var android_log_write = new NativeFunction(
Module.getExportByName(null, '__android_log_write'),
'int',
['int', 'pointer', 'pointer']
);
var tag = Memory.allocUtf8String("[frida-script][ax]");
console.log = function(str) {
android_log_write(3, tag, Memory.allocUtf8String(str));
}
apk.sh [उपकमांड] [APK फ़ाइल|APK निर्देशिका|PKG नाम] [फ़्लैग]
apk.sh pull [PKG नाम] [फ़्लैग]
apk.sh decode [APK फ़ाइल] [फ़्लैग]
apk.sh build [APK निर्देशिका] [फ़्लैग]
apk.sh patch [APK फ़ाइल] [फ़्लैग]
apk.sh rename [APK फ़ाइल] [PKG नाम] [फ़्लैग]
pull डिवाइस/एम्यूलेटर से एक apk खींचें।
decode एक apk डिकोड करें।
build एक apk पुनः-बिल्ड करें।
patch एक apk पैच करें।
rename apk पैकेज का नाम बदलें।
-a, --arch <arch> लक्ष्य आर्किटेक्चर निर्दिष्ट करें, पैच करते समय अनिवार्य है।
-g, --gadget-conf <json_file> एक frida-gadget कॉन्फ़िगरेशन फ़ाइल निर्दिष्ट करें, पैच करते समय वैकल्पिक है।
-n, --net बिल्ड करते समय एक अनुमेय नेटवर्क सुरक्षा कॉन्फ़िगरेशन जोड़ें, वैकल्पिक। इसका उपयोग patch, pull और rename के साथ भी किया जा सकता है।
-r, --no-res डिकोड करते समय संसाधनों को डिकोड न करें (अर्थात् apktool -r), वैकल्पिक। पैच करते समय उपयोग किया जा सकता है।
-s, --no-src डिकोड करते समय dex को डिसअसेंबल न करें (अर्थात् apktool -s), वैकल्पिक। पैच करते समय उपयोग किया जा सकता है।
https://lief-project.github.io/doc/latest/tutorials/09_frida_lief.html
https://koz.io/using-frida-on-android-without-root/
https://github.com/sensepost/objection/
https://github.com/NickstaDB/patch-apk/
https://neo-geo2.gitbook.io/adventures-on-security/frida-scripting-guide/frida-scripting-guide