|
|
什么是代码抽取壳?
就是把Java/Kotlin方法体抽空,转为C/C++代码编译到.so动态库,运行时通过JNI调用执行,同时将活动类里的原始代码抽走。
除了那种较垃圾的抽取壳(绑绑加固免费版),市面上大部分能看见的都是数字壳加固,比较免费还好用,修复难度相对较高,如果要完美修复需要掌握Native层逆向分析能力。
随便找一个数字壳加固样本,把它的dex脱壳出来,随便进入活动类就会发现很多代码都被抽走了,基本都是native onCreate:- .method public native nativeonCreate(Landroid/os/Bundle;)V
- .end method
复制代码
这就是被加固后的onCreate
可以发现转nitive了
那改如何修复呢?
先说说邪修
关于邪修的解释
邪修(非完美修复)是指不还原真实逻辑,直接让程序能运行起来的修复方法。
邪修有很多种
第一种就是只调用父类,最常见的一个
- .method protected onCreate(Landroid/os/Bundle;)V
- invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
- return-void
- .end method
复制代码
第二种就是直接返回空方法
- .method protected onCreate(Landroid/os/Bundle;)V
- nop
- nop
- return-void
- .end method
复制代码
第三种就是删除native调用
- # 直接删除native调用,让方法为空
- .method protected onCreate(Landroid/os/Bundle;)V
- return-void
- .end method
复制代码
为什么能运行呢?
1.辅助类较少或没有辅助类
2.没有多少能抽的函数
3.父类已有完整实现 子类不需要额外逻辑
4.逻辑在其他地方
5.只是容器Activity
这就是邪修能运行起来的原因
运行不起来是为什么?
那就说明调用的函数不够,父类逻辑少 需要子类来补充关键逻辑 甚至不止onCreate被抽
结果:能启动,但白屏+没功能+会崩溃。
那该如何让它正常运行不用邪修呢?(完美修复)
这个就非常难了,单说邪修修复 差不多只算完美修复的半成品 邪修可能都是因为完美修复来的,而且邪修只是临时解决方案,让程序能启动但不保证功能完整。真正完美修复需要动态调试.so文件,分析Native代码,还原原始逻辑。
然后分析每个辅助类和调用函数,试着重新还原原始代码,重新让所有被抽了的方法名重新调用起函数和辅助类,当然,这只是修复方法,原本的完整修复可能根本不止这些(新人发帖,不喜勿喷,有任何不对的地方可以评论,谢谢) |
-
查看全部评分
总评分:好评 +1
金币 +2
|