去除某漫画软件启动广告并绕过重打包检测

本文不构成任何技术操作指导或建议,仅供技术交流与学习参考。如发现本文内容存在可能违反法律规定的情况,请立即联系本人删除相关内容。(已对图片中出现的包名和应用名进行处理)

观察

正常打开这个apk,就能看到会有启动广告,我们可以看到启动过程的调用栈,首先启动的就是SplashActivity。那清理广告的思路就是替换程序入口。

screen 1.png

修改MainActivity.xml文件

首先自然是解包(解包和解压不一样哦)

1
apktool d base.apk -o output

接下来修改清单文件:
Pasted image 20250513194604.png
把这个Activity统统注释掉。
然后把MainActivity设置为入口:
Pasted image 20250513194805.png

1
2
3
4
5
6
<activity android:configChanges="screenLayout|screenSize" android:exported="true" android:name="com.xxxx.xxxx.MainActivity" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan|stateHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>

接着就可以重新打包了。
签名:

1
2
3
keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore

jarsigner -verbose -keystore demo.keystore base1.apk demo.keystore

Pasted image 20250513195215.png
然后重新安装上,but:
screen.png

排查检测点

可以看到,我们的篡改行为被识别出来了,但是好在观察到了启动过程的调用栈
启动MainActivity之后跳转到了CheckDialog方法,那我们就在jadx中找到这个方法,但是审计之后,发现这只是一个很普通的日志弹窗的方法,那我们接着查看调用栈,发现有个叫signcheck的类在调用此方法,而MainActivity就是调用了这个检测类。
Pasted image 20250513201557.png
Pasted image 20250513202045.png
调用栈:
MainActivity->signcheck->Checkdialog
Pasted image 20250513122410.png
既然是采用Java层方法来检测重打包,那就好办了

绕过检测点

1.frida绕过检测
脚本:

1
2
3
4
5
6
7
Java.perform(
function(){
let SignCheck = Java.use("com.xxxx.xxxx(包名).utils.SignCheck");
SignCheck["check"].overload('android.app.Activity').implementation = function (activity) {
return true;
};
})

2.修改smali
定位~\output\smali\com\xxxx\xxxx\MainActivity.smali
Pasted image 20250514171233.png
给它删咯,再打包。
这样就行了。
3.其他思路
Pasted image 20250513225056.png
如果继续深扒,signcheck.check调用的是SignCheckUtil.check(),而SignCheckUtil.check()中有字符串b,b就是源文件的SHA1,可以想办法把这串字符改成修改过后APK哈希值