对安卓逆向的认识

对安卓逆向的认识

1,首先是为什么要安卓逆向

因为你抓包之后,发现请求接口的时候加了token,你就要找到这个token加密的地方,你才能进行下去,

而要找到这个token加密,你就必须要逆向,才可以,这就是逆向的意义,

app逆向,主要讲安卓逆向,因为安卓开源,好弄,

2,安卓逆向需要掌握什么?

既然是安卓逆向,所以你比如要掌握安卓系统的原理,

既然是逆向app,所以你对app的加载原理也要清楚,了解apk包,必须要知道apk的流程,原理,启动加载,你正向的都不知道,你怎么做逆向,

安卓系统和apk都是java开发的,所以你还要掌握java

写爬虫,不是要做到完全逆向,像安全工程师一样,我们只需要做部分逆向,找到加密的部分就行了

3,既然你是电脑操作手机,

你就必须要学习adb命令,这个是可以操作手机的,很方便,

所以你要学习adb命令

4,安卓逆向,写代码的难度是比较小的,

难度大,是因为要分析原理,比如frida脱壳,这个其实代码很简单,十几行代码就好了,但是要懂得原理才可以,

#####

第一步:解决安卓手机抓包问题

现在还有一个问题很重要就是安卓手机抓包,你想要抓包看看他请求的哪一个接口,但是你抓不到包,

第一步就卡在这里了,所以你要先解决这个抓包的问题,才可以进行下去,

如果不能抓包,或者抓包不能得到我们想要的东西,要看代码,那就逆向,就要反编译,可以hook,可以使用工具,可以改smali文件,

frida是代码注入技术,为什么不讲xpose,因为这个工具是java开发的,而frida是python+js开发的,这个比较熟悉,

后面重要使用frida开发

第二步:解决加密问题----->反编译拿到源码

既然你要逆向,当然是拿到源码,就是要反编译,jadx工具,我要掌握这个工具,

apktool,也可以反编译,

第三步,可能反编译失败----->解决脱壳问题

你既然要修改人家的源码你就要解决app加固的问题,你要脱壳,你就要了解加固原理

手动脱壳难度很大,需要ida工具,这都是汇编,你基础不强的话,很难搞,ida动态调试,这个知道了解就行,也会讲到,

很多人说,做安卓逆向要回ida,但是我们做逆向不是要全部逆向,这个可以后面慢慢的精进,掌握了动态ida调试,基本算是安卓逆向的中高层次了,

工具脱壳,一个是工具Xposed,一个就是frida了,重点就是涉及到frida,脱壳问题

现在大部分都是工具脱壳,手动脱壳难度太大,

第四步,脱壳之后看不懂代码----->解决反混淆问题

既然你脱壳了,但是代码都是混淆的,你看不懂,所以你还要反混淆,这就是下一步,你要反混淆,

脱壳不难,但是反混淆是比脱壳难的,这个要考验你看代码的能力,

第五步,看到源码开始修改源码----->修改smali文件

你既然要改动apk的源码,那你必须要学习smali文件,因为改java文件你要重新编译,而这个是很麻烦的,

所以你要修改源码,还需要看懂smali文件,这个还涉及到了hook技术,这个涉及到frida,hook so文件的问题frida hook 加密位置的问题

我们看smali文件的意义就是找到不让我们抓包的代码,然后注释掉,就可以了,类似这样的,

为什么要修改smali文件,而不是修改java源码,因为java源码需要编译,而你编译的环境可能和别人的编译环境是不一样的,你编译出来的apk,可能安装不上,

你要修改smali文件,就要看懂smali文件,这个考验你看代码的功力,

第六步:解决修改源码之后的安装问题---->签名问题

编译之后你如果要安装,那你就要解决反编译修改源码之后的签名问题,这个问题不解决,你就无法二次安装这个apk包,

所以你要解决签名的问题,

这个涉及到frida,hook签名位置的问题

####

技术栈,就是使用frida,不再考虑Xposed,这个决定基于两点,

1,必须要二选一,精力和时间有限,

2,python,比java要更加的熟悉,

就是这两个原因,

#### 

####

原文地址:https://www.cnblogs.com/andy0816/p/15174348.html