نمونه ساده از معکوس .APK (حذف تبلیغات)

خوب ، امروز من می خواهم یک مهندسی معکوس ساده را در مورد برنامه Android انجام دهم. به عنوان نمونه ، من یک برنامه شگفت انگیز APK Extractor سریعترین و پشتیبانی می کنم
ابزار
فرآیند
دریافت پرونده .APK توسط Extractor APK Fastest & SUPPOR.
آنچه می بینیم؟ ما یک تبلیغات وحشتناک را در برنامه بسیار شگفت انگیز مشاهده می کنیم.
کد جاوا را کشف کنید
و ما می توانیم چیزی شبیه به این را ببینیم:
- مشت از همه ما باید ببینیم
AndroidManifest.xmlبشر
اوه ، داداش ، خیلی ممنون!
android:name="com.iraavanan.apkextractor.ad.NoAdsActivity"
android:screenOrientation="portrait"/>
- بیایید ببینیم
NoAdsActivity، بدیهی است
مسیر در JADX است
Source code/com.iraavanan.apkextractor.ad.NoAdsActivityبشر
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.activity_no_ads);
ActionBar supportActionBar = getSupportActionBar();
if (supportActionBar != null) {
supportActionBar.setTitle(getString(R.string.premium));
}
ActionBar supportActionBar2 = getSupportActionBar();
if (supportActionBar2 != null) {
supportActionBar2.setDisplayHomeAsUpEnabled(true);
}
com.iraavanan.apkextractor.g.f fVar = com.iraavanan.apkextractor.g.f.a;
if (fVar.b(this).getBoolean(getString(R.string.is_premium), false)) {
J();
return;
}
// some code
OMG ، Bro ، آیا شما واقعاً یک پرچم برتر را در برنامه های مشترک نگه دارید؟!
وقتی آن را دیدم فکر کردم نمونه دیگری را بدست آورم ، اما اشکالی ندارد. ساده و قابل مشاهده است.
کد SMALI را استخراج و تغییر دهید
/opt/apktool/apktool d ApkExtractor_com.iraavanan.apkextractor.apk
بنابراین ما یک پوشه داریم ApkExtractor_com.iraavanan.apkextractor با کد SMALI. می توانید این پوشه را به عنوان یک پروژه در Android Studio باز کنید. فعالیت ما در همان مسیر: smali/com.iraavanan.apkextractor.ad.NoAdsActivity.smali
- به دنبال شرایط در
onCreate()عمل
:cond_1
sget-object p1, Lcom/iraavanan/apkextractor/g/f;->a:Lcom/iraavanan/apkextractor/g/f;
invoke-virtual {p1, p0}, Lcom/iraavanan/apkextractor/g/f;->b(Landroid/content/Context;)Landroid/content/SharedPreferences;
move-result-object v0
const v1, 0x7f10004a
invoke-virtual {p0, v1}, Landroid/app/Activity;->getString(I)Ljava/lang/String;
move-result-object v1
const/4 v2, 0x0
invoke-interface {v0, v1, v2}, Landroid/content/SharedPreferences;->getBoolean(Ljava/lang/String;Z)Z
move-result v0
if-eqz v0, :cond_2
invoke-direct {p0}, Lcom/iraavanan/apkextractor/ad/NoAdsActivity;->J()V
goto/16 :goto_1
خیلی خوب به نظر نمی رسد 🙂 بیایید تعریف کنیم چه اتفاقی می افتد. دالویsget-object p1 //etc – ما در حال گرفتن یک شی هستیم و آن را وارد می کنیم p1invoke-virtual {p1, p0} //etc – اجرای برخی از عملکردها p1 هدف p0 اشاره گر فعالیت ما است … احتمالاً 🙂 به نظر می رسد که ما به اشتراک گذاشته ایمmove-result-object v0 – محصولات مشترک را وارد کنید v0const v1, 0x7f10004a – برخی از موارد مشابه مانند شناسه منبعinvoke-virtual {p0, v1} //etc – فعالیت p0 دریافت منبع رشته توسط v1 شناسهmove-result-object v1 – آن رشته را در داخل قرار دهید v1const/4 v2, 0x0 – تعریف دروغ ثابتinvoke-interface {v0, v1, v2} //etc – عملکرد کلیدی ما آنچه را تعریف می کندmove-result v0 – نتیجه عملکرد به v0if-eqz v0, :cond_2 – اگر نتیجه ما باشد 0 (دروغ) برنامه به :cond_2
بدیهی است ، ما باید نتیجه عملکرد را تغییر دهیم.
move-result v0
const/4 v0, 0x1
if-eqz v0, :cond_2
بسته به .apk
/opt/apktool/apktool b ApkExtractor_com.iraavanan.apkextractor -o apkextractor.apk
zipalign -v -p 4 apkextractor.apk apkextractor_compressed.apk
keytool -genkeypair -v -keystore release-key.keystore -alias apkextractor -keyalg RSA -keysize 2048
apksigner sign --ks release-key.keystore --ks-key-alias apkextractor --out apkextractor_signed.apk apkextractor_compressed.apk
نصب و اجرا
- نسخه برنامه پایه را حذف کنید
adb uninstall com.iraavanan.apkextractor
adb install apkextractor_signed.apk

هوم … مشکلی پیش آمد …
خوب ، شاید من باید به گزینه Premium در برنامه بروم.

بیایید فعالیت توسط Back دکمه یا صفحه چرخش.

بنابراین … این همه ، بدون تبلیغ است.
می خواهم در پایان چه بگویم؟ پرچم های حق بیمه را در داخل برنامه نگه ندارید.
با تشکر از توجه شما!



