我正在参加「启航计划」
对逆向比较陌生的同学,刚拿到样本或许不知道从何入手,我依据自己的逆向经验总结了一下逆向的几个过程,也可说是逆向的套路。如果你不知道从何处开端爆炸,完全能够依照本文的几个过程来爆炸。
抓包
抓包是逆向的第一步,经过抓包能够找到找到你爆炸的进口,比方你要让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,直接调用相关办法,得到自己想要的内容。
总结
文章介绍了逆向的几个过程,一般都是依照这个套路来的,写的虽然简略,可是每个过程里面都有很多学问,都有涉及到怎么对抗反调试。详细的每个过程设计到的反调试,都会在后边的文章中介绍的,记得继续关注。道高一尺,魔高一丈。技能就是在不断地对抗中提高的。
本文已由公众号“爱码者说”首发