在离开 YW 之前很长的一段时间都在做逆向相关,从最初只需要反编译 .apk 文件就能“摸清”应用内部相关逻辑,到后来需要对App文件进行脱壳,到需要动态调试。花了很大的精力,这中间也走了很多弯路。在换了工作之后,不知还会不会再有接触逆向相关的开发,但过去的探索也是我技术的宝贵经验吧,遂将此前的学习的一些经验进行整理。

逆向相关原理与流程参考资料

安卓打包流程

反编译流程

加固原理

脱壳教程

不root怎么将FDex2反编译的dex文件拷出来

Xposed之Hook方法

Xposed Hook混淆且加固后的APP

最方便快捷的脱壳软件(不需要Root、也不需要Xposed

关于脱壳、破解逆向等资源工具最好的网站是—> www.52pojie.cn

整理一份相关破解工具集:https://github.com/VomPom/Hack/tree/master/apk_reverse

个人一些经验总结:

1、 App抓包尽量使用Android 低版本(Android 7以下)7之后有些新版本系统的安全限制

2、 能进行静态代码就直接进行静态代码分析,在万不得已的时候再利用 hook以及动态调试(相关收益率以及成功率比较低)

3、 利用BlackDex之类的软件脱壳之后,从手机复制过来到一个文件夹,利用apk2dex2jar2class2java.sh 执行 sh apk2dex2jar2class2java.sh /xx/xx (对应的脱壳后的dex文件夹) 得到jar/java文件夹可方便进行静态代码分析

4、 如何找到请求接口加解密的地方?这个只有靠个人经验,对于很多普通加密利用了标准加密库,可以尝试搜索“Cipher.getInstance”之类的标准代码(注意第三方相关sdk也会使用),或者搜搜“Response”相关的字段,或者 请求过程中相关的具体字段或者域名等,不过这部分代码一般都是被混淆的,需要耐心慢慢摸索。

5、 有时候代码会有找不到相关的类的情况,这是由于脱壳相关机制导致的,需要对其进行修复,或者尝试使用其他脱壳软件进行脱壳。