
एंड्रॉइड रिवर्स इंजीनियरिंग मनुष्यों और AI एजेंट्स के लिए: मिलीसेकंड में टाइप्ड Java, xrefs, API और सीक्रेट रेकॉन, APK डिफ, री-साइनिंग, एक नेटिव व्यूअर और एक MCP सर्वर। एक Rust एक्ज़ीक्यूटेबल, कोई JVM नहीं।
कोई भी Android ऐप खोलें और देखें कि वह वास्तव में क्या करता है।
वह क्या एकत्र करता है, आपसे पैसे कैसे कमाता है, क्या उजागर करता है। सेकंडों में, पठनीय Java के रूप में।
AI एजेंट्स के लिए Viewer, CLI और MCP सर्वर। एक ही executable। Java की आवश्यकता नहीं।
इनमें से प्रत्येक के लिए manifest, resources और decompiled कोड को एक साथ पढ़ना आवश्यक था। http:// के लिए
grep करने पर इनमें से कुछ भी नहीं मिलता। प्रमाण के लिए किसी finding पर क्लिक करें: वास्तविक आउटपुट, केवल महत्वपूर्ण पंक्तियों तक सीमित।
Block Blast! 10.9.3 (Play build), 75,938 classes, 3.1 s में स्कैन किया गया।
आपका डेटा किसे मिलता है: AppLovin MAX, AdMob, Meta, Unity, ironSource, Pangle, Liftoff/Vungle, InMobi,
Moloco, Amazon APS, Digital Turbine/Fyber, PubMatic, Bigo। ट्रैकर: AppsFlyer, Firebase, Facebook और
TikTok events, ThinkingData, स्टूडियो का अपना cn.hsdata। अनुमतियाँ: advertising ID और सभी चार
Privacy Sandbox ad APIs।
दो endpoints किसी भी SDK के नहीं हैं। infer एक model call है: इस खिलाड़ी के विज्ञापन कितने मूल्य के हैं?
$ apkscope search blockblast.xapk urls
q.mb("https://low-ecpm.afafb.com/infer/v1/low_ecpm_cut", appActivity, jSONObject, new c() {
return "https://ecpm.afafb.com/infer/v1/ecpm";
$ apkscope decompile blockblast.xapk me.f # the code calls it AlgorithmInterCutManager
m2.mg(jSONObject, "ActUserInfo", ClassE.ma());
m2.me(jSONObject, "AdHistInfo", jSONArray);
m2.mg(jSONObject, "UserContext", ClassE.mc(str2, appActivity, z, UUID.randomUUID().toString(), "INTER"));
m2.mg(jSONObject, "UserInfo", ClassE.md());
वे deviceModel, ram, disk, cpu, carrier, country, ip_country, timeZone,
install_time, cold_start_num और उनके revenue के साथ आपके पिछले विज्ञापनों को भरते हैं। उत्तर आपका न्यूनतम
मूल्य निर्धारित करता है, वह सबसे कम बोली जिसे विज्ञापनदाता को आपको विज्ञापन दिखाने के लिए पार करना होगा:
$ apkscope decompile blockblast.xapk v2.d --method Y # AlgorithmBy1004, AppLovin MAX
double d3 = d * d2; // floor = predicted eCPM x "floor_factor" (remote, default 2.0)
this.g_c.mi(d3);
String.format(Locale.locale_US, "算法接口成功更新底价 - FloorPrice: %.2f, ... // "algorithm API updated the floor price"
निर्णय: वैध, और विज्ञापन-वित्त पोषित गेम कैसे काम करते हैं। अब आप इसे देख सकते हैं।
Block Blast अपनी गेम क्लासेस को NetEase पैकर के पीछे छिपाता है: org.cocos2dx.javascript.AppActivity APK में
नहीं है। apkscope dump ने गेम को स्वयं अनपैक करने दिया और 25 सेकंड में मेमोरी से 15 DEX निकाले, लगभग
3,100 छिपी हुई क्लासेस। स्क्रिप्ट्स JsCallJava के माध्यम से Java को कॉल करती हैं; इसके मेथड्स दिखाते हैं कि वे क्या माँगते हैं:
$ apkscope dump com.block.juggle out/ --attach
$ apkscope decompile out/dex/classes9.dex org.cocos2dx.javascript.pay.o --method w # SPayManager.serverControl
if (jSONObject.has("isStatus")) {
boolean z = k0.ma("1", jSONObject.getString("isStatus"));
SPStore.mk().y(z);
JsCallJava.setGameAuditMode(z, "auditMode"); // → window.IPAUtils.respHearingState(1)
auditMode को चालू कर देता है,
और गेम इसे याद रखता है। गेम इसका उपयोग तब अलग व्यवहार करने के लिए करते हैं जब कोई स्टोर उनकी समीक्षा कर रहा हो; Block Blast जो बदलता है वह उसकी एन्क्रिप्टेड स्क्रिप्ट में है, इसलिए हम इससे अधिक दावा नहीं करते।callNativeGetLeftBattery (बैटरी %), callNativeIsInstallOtherApp
(क्या ऐप X इंस्टॉल है?), getDeviceInfoByAdb (CPU गति, RAM, स्टोरेज, स्क्रीन, मॉडल)।trackGameEndRevenue प्रत्येक गेम के अंत में राजस्व डेटा संग्रहीत करता है।BleBumpKit अनुमति मांगने के बाद पास के दो फ़ोन को पेयर करता है।नहीं दिखाया गया: यह आपके अगले ब्लॉक कैसे तय करता है। वह एन्क्रिप्टेड स्क्रिप्ट में है (देखें सीमाएँ)।
फ़ाइल-डेटाबेस प्रदाता एक्सपोर्टेड है, और इसके <path-permission> टैग एक ऐसी अनुमति का नाम देते हैं जिसे शाब्दिक रूप से
"false" कहा जाता है। एकमात्र वास्तविक सुरक्षा कोड में है, और यह file/, dir/ और रूट को छोड़ देता है:
$ apkscope decompile nextcloud.apk com.owncloud.android.providers.FileContentProvider
private boolean isCallerNotAllowed(Uri uri) {
switch (i) {
case 4: case 5: case 6: case 7: case 8: // shares, capabilities, uploads, ...
str = this.mContext.getPackageManager().getNameForUid(Binder.getCallingUid());
}
return false; // file (1), dir (2), root (3): anyone
}
public Cursor query(Uri uri, ...) {
if (i != 1 && i != 2 && i != 3 && isCallerNotAllowed(uri)) {
(केस लेबल मोड़े गए, टिप्पणियाँ जोड़ी गईं।) insert, update और delete एक ही जाँच का उपयोग करते हैं। तालिका में
path, path_decrypted, file_owner, sharees, share_by_link, metadata_gps रखे जाते हैं...
निर्णय: कोई भी इंस्टॉल किया गया ऐप आपके फ़ाइल नाम, फ़ोल्डर और शेयर पढ़ सकता है, जिसमें एंड-टू-एंड-एन्क्रिप्टेड फ़ाइलों के डिक्रिप्ट किए गए नाम भी शामिल हैं, और पंक्तियों को बदल या हटा सकता है। GitHub Security Lab ने इसे 2021 में नोट किया था; उस रिपोर्ट से SQL इंजेक्शन ठीक कर दिया गया था, खुली पहुँच अभी भी 35.0.1 में मौजूद है। कोड से पढ़ें, किसी डिवाइस पर चलाकर नहीं।
$ apkscope resource antennapod.apk res/xml/network_security_config.xml
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="user" />
<certificates src="system" />
$ apkscope decompile antennapod.apk de.danoeh.antennapod.net.ssl.CompositeX509TrustManager --method checkServerTrusted
X509TrustManager x509TrustManager = (X509TrustManager) iterator.next();
try {
x509TrustManager.checkServerTrusted(x509CertificateArr, str);