Android App 防止被修改

问题描述 投票:0回答:2

谷歌搜索后,我发现我的带有广告的免费应用程序发布在一些标题为“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) {}
    }

也许有人只是将注释注入到方法调用中或检查数据库中,但如何防止这种情况发生?

java android admob
2个回答
4
投票

让黑客攻击变得不可能:我不知道是否有答案。

你可以做的是:有一些付费工具,例如dexguard。你可以使用它们。付费替代方案可能比免费替代方案效果更好。

不过,一位专家可能会进入你的代码。但是,破解 dexguard 并不是一个简单的游戏。 此外,它还提供运行时自我保护、代码优化等


我的一些未使用的想法::-P |客户端

  • 检查应用程序的安装位置。使用PackageManager
  • 验证已安装应用程序的签名/将签名放置在服务器中 |检查是否与应用程序签名的匹配
  • 编写出即使你在完成一天后也无法阅读的代码。 错误地命名类,错误地命名它们。例如:类 ABACAS 处理任务 ABACAS ,类 SACABA 执行任务 SACABA - 给它们颠倒的名称。此外,方法 delegate 返回一些名为 delegate 的值,方法 stack 返回 stack。反向命名它们。

这意味着:类 ABACAS 会做 SACABASACABA 会做 ABACAS&方法delegate将返回stack并且方法stack将返回delegate


如果您的应用程序依赖于服务器(我的意思是您的应用程序只是一个客户端,服务器执行任务,具有 API 并执行发送接收)。只需向您的应用程序询问服务器的签名即可。如果签名匹配,则下一步,否则返回。


0
投票

没有什么可以阻止攻击者反编译您的应用程序、删除任何安全检查代码、硬编码他们想要的任何值(证书、标志等),然后再次重新编译并使用他们想要的任何密钥对其进行签名。

这并不是说你不应该对此做任何事情,你绝对应该使用 Proguard/Dexguard(如果你能负担得起的话,可以使用后者)来混淆你的代码,实施和编写各种安全检查来防止攻击者在获得 root 权限的设备上使用该应用程序,如果启用了开发人员模式,如果该应用程序被挂接(Frida、Xposed),无论它是在模拟器上还是虚拟环境上运行,无论证书是否被篡改或文件是否被篡改,以及应用程序是否在调试模式下编译和构建。 Dexguard 提供的功能可为您提供最先进的保护级别,并且更新非常频繁(他们每周更新一次)。另一个非常好的选择是将 apk 的证书发送到后端服务器,以便服务器检查它是否正在与未被篡改的客户端进行通信。您还可以使用 Google 的 Play Integrity / 华为的 Safety Detect。

有关开发人员模式检查的注意事项:某些银行应用程序确实要求您禁用开发人员模式,但如果您的用户群是启用了开发人员模式的开发人员/爱好者,并且您的应用程序不是基于财务的,那么您可能最终会导致他们卸载您的应用程序并使用其他应用程序。

最终,任何平台(无论是 Android、iOS、Web、桌面还是其他平台)的客户端都没有完全安全的解决方案。你对此无能为力。你所能做的就是让攻击者的生活变得更加困难和麻烦,以至于他们懒得对整个事情进行逆向工程。自古以来,人们就一直在破解价值数十亿美元的行业中的专有软件,从操作系统到视频游戏。

举个例子,YouTube应用程序以及Android和iOS上的YouTube Vanced和uYouPlus应用程序,即使像YouTube / Google这样的科技巨头对此也无能为力。

永远不要相信客户。这实际上适用于您能想到的每种形式的软件

© www.soinside.com 2019 - 2024. All rights reserved.