记录一次xx应用的伪破解(三)(去除开屏广告和弹框广告,去升级逻辑)

由于和之前的破解方式一毛一样,这里不再赘述,可参考前面两篇文章。

结语

话说这个app的防逆向功能做的真的很差劲,全是java编程,所以逆向之后,虽然只做了一层混淆,但是仔细分析后还是能把逻辑理清楚,我也破解过其他app,唯独这个让我大跌眼镜。

软件的攻防是个长久的战争,这里总结一下我的攻防心得:

1. 一定要混淆,但是千万不能相信混淆。记得刚开始接触android的时候,我就想破解别人的app,但是反编译之后全是a啊b啊,看不懂,当时由于技术能力不足就放弃了,如今拿到这个app后,三下五除二处理的干干净净,混淆只能防御初级程序员或者小白,但凡是有一点经验的破解混淆只是时间问题。
2. 核心代码要用JNI编程,像这个应用,签名校验这么重要的功能用的java编程,很容易破解掉,之前有破解一个应用,反编译后清一色的native方法,这就对调试造成了很大困难,需要用ida去动态调试,这个ida软件上手有一定困难,会进一步阻碍反编译难易度。
3. 一定要做xposed防护,xposed+fdex2 可以破解一些简单的加壳,同时xposed可以hook核心方法返回自己想要的数据,有破解一款app,做了xposed防护,一旦检测到xposed在运行,立刻闪退,都不给你运行的机会,同时这款app又做了加固,由于脱壳需要xposed环境,但是检测到xposed又闪退,让破解几乎不可能。
4. 一定要做服务端的再次校验,还是破解一款app,前面都很顺畅,唯独非VIP不给下发链接,让我的破解变得几乎无意义,这也就是为啥市面上充斥着xx去广告版,而不是xxVIP版本的原因了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
接入Google AdMob的开屏广告、插页广告和原生广告的步骤如下: 1. 注册AdMob账号并创建广告单元 在AdMob网站上注册账号并创建广告单元,获取相应的广告单元ID。 2. 集成AdMob SDK 在应用的build.gradle文件中添加依赖项: ``` implementation 'com.google.android.gms:play-services-ads:20.2.0' ``` 在应用的AndroidManifest.xml文件中添加以下权限: ``` <uses-permission android:name="android.permission.INTERNET" /> ``` 3. 显示开屏广告应用的启动Activity中添加以下代码: ``` private static final String AD_UNIT_ID = "替换为你的开屏广告单元ID"; private CountDownTimer countDownTimer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); MobileAds.initialize(this); FrameLayout adContainer = findViewById(R.id.ad_container); AdView adView = new AdView(this); adView.setAdSize(AdSize.SMART_BANNER); adView.setAdUnitId(AD_UNIT_ID); adContainer.addView(adView); AdRequest adRequest = new AdRequest.Builder().build(); adView.loadAd(adRequest); countDownTimer = new CountDownTimer(5000, 1000) { @Override public void onTick(long millisUntilFinished) { Log.d(TAG, "onTick: " + millisUntilFinished / 1000); } @Override public void onFinish() { jumpToMainActivity(); } }.start(); } @Override protected void onDestroy() { super.onDestroy(); if (countDownTimer != null) { countDownTimer.cancel(); countDownTimer = null; } } private void jumpToMainActivity() { Intent intent = new Intent(this, MainActivity.class); startActivity(intent); finish(); } ``` 其中,AD_UNIT_ID替换为你的开屏广告单元ID,R.layout.activity_splash是你的启动Activity的布局文件,包含一个FrameLayout用于显示广告。 4. 显示插页广告 在需要显示插页广告的Activity中添加以下代码: ``` private static final String AD_UNIT_ID = "替换为你的插页广告单元ID"; private InterstitialAd interstitialAd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MobileAds.initialize(this); interstitialAd = new InterstitialAd(this); interstitialAd.setAdUnitId(AD_UNIT_ID); interstitialAd.loadAd(new AdRequest.Builder().build()); // 点击按钮时显示广告 findViewById(R.id.btn_show_ad).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (interstitialAd.isLoaded()) { interstitialAd.show(); } } }); // 监听广告加载状态 interstitialAd.setAdListener(new AdListener() { @Override public void onAdLoaded() { Log.d(TAG, "onAdLoaded"); } @Override public void onAdFailedToLoad(LoadAdError loadAdError) { Log.d(TAG, "onAdFailedToLoad: " + loadAdError.getMessage()); } @Override public void onAdOpened() { Log.d(TAG, "onAdOpened"); } @Override public void onAdClicked() { Log.d(TAG, "onAdClicked"); } @Override public void onAdClosed() { Log.d(TAG, "onAdClosed"); interstitialAd.loadAd(new AdRequest.Builder().build()); } @Override public void onAdImpression() { Log.d(TAG, "onAdImpression"); } }); } ``` 其中,AD_UNIT_ID替换为你的插页广告单元ID,R.layout.activity_main是你的Activity的布局文件,包含一个按钮用于触发显示广告。 5. 显示原生广告 在需要显示原生广告的Activity中添加以下代码: ``` private static final String AD_UNIT_ID = "替换为你的原生广告单元ID"; private NativeExpressAdView nativeExpressAdView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MobileAds.initialize(this); nativeExpressAdView = findViewById(R.id.ad_view); nativeExpressAdView.setAdSize(new AdSize(320, 150)); nativeExpressAdView.setAdUnitId(AD_UNIT_ID); AdRequest adRequest = new AdRequest.Builder().build(); nativeExpressAdView.loadAd(adRequest); // 监听广告加载状态 nativeExpressAdView.setAdListener(new AdListener() { @Override public void onAdLoaded() { Log.d(TAG, "onAdLoaded"); } @Override public void onAdFailedToLoad(LoadAdError loadAdError) { Log.d(TAG, "onAdFailedToLoad: " + loadAdError.getMessage()); } @Override public void onAdOpened() { Log.d(TAG, "onAdOpened"); } @Override public void onAdClicked() { Log.d(TAG, "onAdClicked"); } @Override public void onAdClosed() { Log.d(TAG, "onAdClosed"); } @Override public void onAdImpression() { Log.d(TAG, "onAdImpression"); } }); } ``` 其中,AD_UNIT_ID替换为你的原生广告单元ID,R.layout.activity_main是你的Activity的布局文件,包含一个NativeExpressAdView用于显示广告。需要在布局文件中添加以下代码: ``` <com.google.android.gms.ads.NativeExpressAdView android:id="@+id/ad_view" android:layout_width="wrap_content" android:layout_height="wrap_content" ads:adSize="320x150" ads:adUnitId="替换为你的原生广告单元ID" ads:loadAdOnCreate="true" /> ``` 以上就是接入Google AdMob的开屏广告、插页广告和原生广告的示例代码,希望能帮助到你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值