对逆向比较陌生的同学,刚拿到样本可能不知道从何入手,我根据自己的逆向经验总结了一下逆向的几个步骤,也可说是逆向的套路。如果你不知道从何处开始爆破,完全可以按照本文的几个步骤来爆破。
抓包
抓包是逆向的第一步,通过抓包可以找到找到你爆破的入口,比如你要让app拥有VIP权限,这是你可以从接口中找到VIP相关的字段,然后用该字段到app代码中搜索。再比如你要调用某个app的接口,而这个接口是加密的,那么你也可以从接口中找到加密的字段,然后用该字段到app代码中搜索。
抓包也是有很多学问的,有的app不会让你轻易的抓到包的,具体的内容关注后面的文章。
反编译
上文说了,抓包后拿着关键字到代码中搜索,怎么拿到app的代码呢?就需要反编译了。有的app可以直接反编译成功,但大部分的app都是加壳的,这时想拿到代码就需要脱壳。市面上也有好多可以自动脱壳的应用,知识星球中也有发出相关的应用,这些自动脱壳的应用一般只能脱免费的壳,如果加的壳是企业版的话就不能脱成功了,就需要自己手动脱壳了,相关内容在后面的文章会发出。
Hook
拿到关键字到代码中搜索,搜索出来的结果会有好多,那怎么确定哪一部分代码是我们需要的呢?可以自己排除一部分,比如一些关键字在系统的api种,就不需要关注,我们要关注的就是在应用包名下的那些关键字相关的代码。包名下关键字的代码也可能出现在好多方法中,怎么确定哪个方法是关键方法呢?这就需要通过Hook具体的方法来排除了。Hook可以使用Frida,由于Frida名气太大,有的应用会监测是否在使用Frida Hook,发现的话就直接崩溃退出。这时可以尝试其他的Hook工具,如算法助手、JSHook等,这些工具在知识星球中也有发出。关于这些工具具体的使用方法,也会在后面的文章中提及。
动态调试
通过Hook找到具体的方法后,想要进一步的了解方法中的业务细节,这是就需要动态调试,通过断点,一步步的调试代码,弄明白方法中的细节。根据调试的文件类型不同,可以分为dex调试和so调试,dex调试的话就是调试smali代码,用到的编辑器为Android Studio,SO调试就是调试汇编,用到的调试工具通常为IDA。
一般dex文件不需要动态调试,找到具体的方法后通过工具将smali文件转换成Java代码,比较容易看懂,也可以直接拿来用。
so文件的话,看起来就比较费力了,稍微有点安全意识的app,一般会把核心的代码放在so文件中,由于so反编译之后是汇编代码,不易读,动态调试的话也有一定的难点,所以都会把核心的加密和算法放在so文件中。其实,我们也不需要费心费力的去调试,知道调用的哪个jni方法后,可以通过unidbg模拟执行so,直接调用相关方法,得到自己想要的内容。
总结
文章介绍了逆向的几个步骤,一般都是按照这个套路来的,写的虽然简单,但是每个步骤里面都有好多学问,都有涉及到怎么对抗反调试。具体的每个步骤设计到的反调试,都会在后面的文章中介绍的,记得持续关注。道高一尺,魔高一丈。技术就是在不断地对抗中提升的。