app:名称,引力波
抓取新闻数据时发现,请求头signature一直在变化,数了一下, 32位,估计是md5加密
首先,先把apk文件用apktool进行编译,sh apktool d lejiagu.apk
生成如图所示文件,我们观察文件内容信息,发现tencent_stub这个文件,表示的是腾讯的乐加固,现在我们需要脱壳
一般市场上大部分的apk都是有加固的。像腾讯,360,爱帮,很多很多
我们没必要去破解这些加固的代码,只需要了解这个流程,hook勾住祝函数代码就可以了,
脱壳原理:
在壳APK解密源APK后,源APK被加载前,拦截这个过程中的系统函数 把内存中的Dex文件去 dump出来
手动脱壳:
通过动态调试,跟踪计算Dex源文件的内存偏移地址,从内存中Dump出Dex文件
难度大,寄存器,汇编,反调试,反读写
IDA
工具脱壳:
HOOK技术/内存特征寻找
简单易操作
基于xposed 脱壳工具:
Fdex2:Hook ClassLoader loadClass方法 通用脱壳
dumpDex:https://github.com/WrBug/dumpDex
本次使用Fdex2
现在root后的安卓的机子上安装xposed,安装好以后再安装fdex2,网上安装包一大堆,自己找
安装好以后运行fdex2,点击你需要脱壳的app 会自动生成脱壳后的dex文件,如图
从新运行此app。脱壳后的dex文件会在图片上提示的dex输出目录里,此时我们需要adb命令进入手机安卓手机(需要usb链接电脑)(虚拟机也行),abd用homebrew安装
执行命令 adb shell进入手机端 su获取root权限 进入到/data/user/0/com.iCitySuzhou.suzhou001 里面.把文件mv到/scard里面,在使用pull命令将文件复制到电脑上
我们发现了dex文件,现在需要把他移动到sdcard文件夹里面,不移动到里面是无法复制到电脑上到(虚拟机可直接打开文件夹复制)
mv *.dex /sdcard dex文件就几个此处选择移动所有dex到/sdcard里面
移动好以后,我们使用 adb pull命令进行复制
adb pull adb pull /sdcard/ /Users/wxy/Desktop/android_section1/ (adb pull无法一起复制多个文件,只能复制文件夹,想偷懒到可以直复制文件夹,省事)
这是复制到电脑上之后的文件
我们将五个dex文件一一打开。找到关键的dex,一般的关键性的dex都是最大的文件,所以一般选择最大dex文件进行打开
此时我们选择
text_search 文本搜索
找关键参数signature
这时候发现很多,我们一个个的往下找
charels抓包的时候不止signature,还有和他在一起的appversion,sysversion 我们可以找和有这两个参数在一起的
在这里
双击点进去
找到signature
发现signature是通过m12059函数进行赋值,而m12059传入udid 和valueof()
udid是钉死的,valuof()是个时间戳,用法自己上百度上查
再调用mo293a函数,双击m12059a,find useage找到m12059函数,点进去
发现这个函数返回一个c2387.m11218a值,而"%S&&%S&&%S".format 后面的参数是str,str2,还有固定的字符串,对比前面的函数发现str 是udid str2是valueof 这函数的的参数是将str str2和固定的字符串,三个字符串拼接起来,拼接后的值传入c2387.m11218a,由此我们可以想到将c2387.m11218a函数打包编译成jar文件,用pycharm的第三方库jpype运行该jar(先决条件是此函数没有导入其他的函数,或者导入的函数较少,不然其他的包都要带入)
双击,find useage打开此函数,
呃,看不懂,应该是个md5加密,没有其他的导入包,整好符合我们的条件
我们将此函数复制放到pycharm 新建一个mysig.java
现将java文件打包成class文件
javac mysig.java
生成mysig.class
后将class文件编译成jar文件
jar -cvf mysig.jar * 此步骤会将此目录下所有class文件编译成jar
编译完成后我们新建一个python文件,思路:调用jar文件。将三个字符串拼接的值放入传入jar
结束
参考猿人学