去除某漫画软件启动广告并绕过重打包检测
本文不构成任何技术操作指导或建议,仅供技术交流与学习参考。如发现本文内容存在可能违反法律规定的情况,请立即联系本人删除相关内容。(已对图片中出现的包名和应用名进行处理)
观察
正常打开这个apk,就能看到会有启动广告,我们可以看到启动过程的调用栈,首先启动的就是SplashActivity。那清理广告的思路就是替换程序入口。

修改MainActivity.xml文件
首先自然是解包(解包和解压不一样哦)
1 | apktool d base.apk -o output |
接下来修改清单文件:
把这个Activity统统注释掉。
然后把MainActivity设置为入口:
1 | <activity android:configChanges="screenLayout|screenSize" android:exported="true" android:name="com.xxxx.xxxx.MainActivity" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan|stateHidden"> |
接着就可以重新打包了。
签名:
1 | keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore |

然后重新安装上,but:
排查检测点
可以看到,我们的篡改行为被识别出来了,但是好在观察到了启动过程的调用栈
启动MainActivity之后跳转到了CheckDialog方法,那我们就在jadx中找到这个方法,但是审计之后,发现这只是一个很普通的日志弹窗的方法,那我们接着查看调用栈,发现有个叫signcheck的类在调用此方法,而MainActivity就是调用了这个检测类。

调用栈:
MainActivity->signcheck->Checkdialog
既然是采用Java层方法来检测重打包,那就好办了
绕过检测点
1.frida绕过检测
脚本:
1 | Java.perform( |
2.修改smali
定位~\output\smali\com\xxxx\xxxx\MainActivity.smali
给它删咯,再打包。
这样就行了。
3.其他思路
如果继续深扒,signcheck.check调用的是SignCheckUtil.check(),而SignCheckUtil.check()中有字符串b,b就是源文件的SHA1,可以想办法把这串字符改成修改过后APK哈希值