谷歌搜索后,我发现我的带有广告的免费应用程序发布在一些标题为“app_name_ad_free_mod_hacked”的网站上,在尝试在我的个人手机中安装此应用程序后,它工作正常,但广告没有显示。甚至,我注意到它没有发出广告请求。
有什么办法可以防止应用程序被修改吗?
P.S:我正在使用 ProGuard,并且我已经反编译了修改后的 APK,我没有注意到与原始应用程序有任何差异。
广告在我的代码中初始化如下:
在
onCreate()
的 MainActivity
:
MobileAds.initialize(getApplicationContext(), "admob_app_id");
mAdView = findViewById(R.id.adView_fragment_ads);
layout_ads = findViewById(R.id.layout_fragments_ads);
start_ad();
以及方法:
private void start_ad() {
try {
if (data_ne_db[0].equals("jo")) {
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.addTestDevice(getResources().getString(R.string.ads_test_device))
.addTestDevice(getResources().getString(R.string.ads_test_device_facebook))
.build();
//mAdView.setAdUnitId(getResources().getString(R.string.ads_kryesorja_poshte));
//mAdView.setAdSize(AdSize.LARGE_BANNER);
mAdView1.loadAd(adRequest);
mAdView1.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
mAdView1.resume();
mAdView1.setVisibility(View.VISIBLE);
u_inicializua = true;
}
@Override
public void onAdClosed() {
Log.e("ADDD CLOSEEEED", "Ads is closed by user)");
}
@Override
public void onAdFailedToLoad(int errorCode) {
mAdView1.pause();
Log.e("AD FRAG 2", "Ads failed to load" + " error : " + errorCode);
u_inicializua = false;
}
@Override
public void onAdLeftApplication() {
}
@Override
public void onAdOpened() {
}
});
}
} catch (Exception ignored) {}
}
也许有人只是将注释注入到方法调用中或检查数据库中,但如何防止这种情况发生?
让黑客攻击变得不可能:我不知道是否有答案。
你可以做的是:有一些付费工具,例如dexguard。你可以使用它们。付费替代方案可能比免费替代方案效果更好。
不过,一位专家可能会进入你的代码。但是,破解 dexguard 并不是一个简单的游戏。 此外,它还提供运行时自我保护、代码优化等
我的一些未使用的想法::-P |客户端
这意味着:类 ABACAS 会做 SACABA 和 SACABA 会做 ABACAS&方法delegate将返回stack并且方法stack将返回delegate
如果您的应用程序依赖于服务器(我的意思是您的应用程序只是一个客户端,服务器执行任务,具有 API 并执行发送接收)。只需向您的应用程序询问服务器的签名即可。如果签名匹配,则下一步,否则返回。
没有什么可以阻止攻击者反编译您的应用程序、删除任何安全检查代码、硬编码他们想要的任何值(证书、标志等),然后再次重新编译并使用他们想要的任何密钥对其进行签名。
这并不是说你不应该对此做任何事情,你绝对应该使用 Proguard/Dexguard(如果你能负担得起的话,可以使用后者)来混淆你的代码,实施和编写各种安全检查来防止攻击者在获得 root 权限的设备上使用该应用程序,如果启用了开发人员模式,如果该应用程序被挂接(Frida、Xposed),无论它是在模拟器上还是虚拟环境上运行,无论证书是否被篡改或文件是否被篡改,以及应用程序是否在调试模式下编译和构建。 Dexguard 提供的功能可为您提供最先进的保护级别,并且更新非常频繁(他们每周更新一次)。另一个非常好的选择是将 apk 的证书发送到后端服务器,以便服务器检查它是否正在与未被篡改的客户端进行通信。您还可以使用 Google 的 Play Integrity / 华为的 Safety Detect。
有关开发人员模式检查的注意事项:某些银行应用程序确实要求您禁用开发人员模式,但如果您的用户群是启用了开发人员模式的开发人员/爱好者,并且您的应用程序不是基于财务的,那么您可能最终会导致他们卸载您的应用程序并使用其他应用程序。
最终,任何平台(无论是 Android、iOS、Web、桌面还是其他平台)的客户端都没有完全安全的解决方案。你对此无能为力。你所能做的就是让攻击者的生活变得更加困难和麻烦,以至于他们懒得对整个事情进行逆向工程。自古以来,人们就一直在破解价值数十亿美元的行业中的专有软件,从操作系统到视频游戏。
举个例子,YouTube应用程序以及Android和iOS上的YouTube Vanced和uYouPlus应用程序,即使像YouTube / Google这样的科技巨头对此也无能为力。
永远不要相信客户。这实际上适用于您能想到的每种形式的软件。