نمونه ساده از معکوس .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
– ما در حال گرفتن یک شی هستیم و آن را وارد می کنیم p1
invoke-virtual {p1, p0} //etc
– اجرای برخی از عملکردها p1
هدف p0
اشاره گر فعالیت ما است … احتمالاً 🙂 به نظر می رسد که ما به اشتراک گذاشته ایمmove-result-object v0
– محصولات مشترک را وارد کنید v0
const v1, 0x7f10004a
– برخی از موارد مشابه مانند شناسه منبعinvoke-virtual {p0, v1} //etc
– فعالیت p0
دریافت منبع رشته توسط v1
شناسهmove-result-object v1
– آن رشته را در داخل قرار دهید v1
const/4 v2, 0x0
– تعریف دروغ ثابتinvoke-interface {v0, v1, v2} //etc
– عملکرد کلیدی ما آنچه را تعریف می کندmove-result v0
– نتیجه عملکرد به v0
if-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
دکمه یا صفحه چرخش.
بنابراین … این همه ، بدون تبلیغ است.
می خواهم در پایان چه بگویم؟ پرچم های حق بیمه را در داخل برنامه نگه ندارید.
با تشکر از توجه شما!