因为最近在找实习,发现招爬虫的很多都要求掌握APP逆向,所以学习一番,就记录一下吧

一、先抓包看下请求信息

我是用的fiddler工具的,具体怎么配置网上都有很多教程(需要注意的是电脑和手机需要在同一个局域网下)

Android脱壳并逆向源码 android脱壳 教程_抓包


通过抓包可以看到signature是需要解密的参数

二、查看加固方式

通过apktool d xxx.apk反编译

Android脱壳并逆向源码 android脱壳 教程_Android脱壳并逆向源码_02


可以看到是乐加固的加密特征(libshella),然后就开始脱壳了。。。

三、脱壳找加密位置

这里我用的是FDex2(是一款基于xposed的脱壳工具)

1、打开Xposed Installer,点模块

Android脱壳并逆向源码 android脱壳 教程_抓包_03


2、就会看到FDex2了,选择要脱壳的app

Android脱壳并逆向源码 android脱壳 教程_python_04


3、找到com.iCitySuzhou.suzhou001这个文件夹,在这里我踩了个大坑。。。

我手机下载的是文件管理器,因为权限的问题我一直找不到脱壳后的文件,请教平哥后得到的方案就是用ls命令查看文件夹。

Android脱壳并逆向源码 android脱壳 教程_Android脱壳并逆向源码_05


这里要配置挺多环境的(自行百度,都挺好解决的),输入adb shell,如果出现上图的效果说明配置成功了,这里还要给个权限,输入su,手机会出现个小弹窗,允许就ok

Android脱壳并逆向源码 android脱壳 教程_抓包_06


Android脱壳并逆向源码 android脱壳 教程_抓包_07


然后就是输入刚才的路径找文件,再把dex文件mv到/sdcard

Android脱壳并逆向源码 android脱壳 教程_Android脱壳并逆向源码_08

四、找加密位置

在这几个dex文件里,慢慢慢慢慢找就会找到,下图这个文件了

Android脱壳并逆向源码 android脱壳 教程_sed_09


全局搜索"signature",就很好找到加密位置了,

"signature", m12059a(udid, valueOf),加密是m12059这个方法,选中它右键跳到声明处

Android脱壳并逆向源码 android脱壳 教程_python_10


udid是设备号,valueOf时间戳,然后再用同样的方法跳到C2387a.m11218a

Android脱壳并逆向源码 android脱壳 教程_Android脱壳并逆向源码_11


可以看到这是个MD5加密,这时候可以用python改写实现MD5加密,也可以调用jpype库来实现,我这里两种方法都实现了一次。五、请求数据

方法一、python改写

Android脱壳并逆向源码 android脱壳 教程_抓包_12


方法二、jpype实现

我们先放到java环境跑下,看下效果

Android脱壳并逆向源码 android脱壳 教程_sed_13


没啥问题,接下来就是编译Java成class,把class做成jar(具体自行百度)

Android脱壳并逆向源码 android脱壳 教程_抓包_14