前段时间花了两周多时间逆了个x加密vmp加固的app。
vmp加固的方法:
看到这里就想到了X梆多年前定制版的vmp加固(现X梆已不用native形式,改成调用cI、cB、cL...动态调用代替动态注册native),表面看起来也是把方法改成native,初始化类后动态注册每个vmp加固的native方法,分析so后发现这vmp比X梆的vmp难,难在他把dex的opcode、register... 等一条条指令单独编程加密,
200
多条指令,分别单独加密,这脱壳起来比较费劲,吐血...,好在这个app只需还原了
90
多条指令就脱壳完成了。
脱掉vmp后:
在脱壳过程中遇到个比较有趣的事情,只要我先运行IDA android_server再启动app就会报错,本来以为是他在so中调用了netstat检测了端口,hook进去确定没有调用,那就有可能是socket localhost 检测:
23946
端口,定位后确实是so中socket检测了
端口,修改后本来以为万事大吉,打包运行,报错....
分析了一天so都没发现so有还有检测
端口的,那就从他报错的地址下断点,往前推,最后发现是在java层也socket检测了
,无语...
有时候搞多了安全公司的反调试总以为加固的app反调试很难搞定,忽略了一些简单的问题。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)