免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
内容参考于:图灵Python学院
本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。第一次接触安卓逆向写的很烂,后面有机会再全部重写。
工具下载:
链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3
提取码:6tw3
复制这段内容后打开百度网盘手机App,操作更方便哦
上一个内容:35.安卓逆向-壳-Frida脚本脱壳
首先使用
GDA4看一下它的主主窗口的包是什么
然后使用 findstr /s /i /m "GDA4看到的包名" * 指令找它在哪一个dex(源码文件)中,如下图它在class2.dex里
然后使用抓包工具,如下图它有一个sign加密参数,接下来就通过破解它做实例
首先使用Frida把HashMap进行HOOK,当前app很奇怪,需要使用让app重启HOOK的方式才可以得到正确的东西
function showStacks() {Java.perform(function (){console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()))})
}function hookmap() { // hookMAPvar hashMap = Java.use("java.util.HashMap");hashMap.put.implementation = function (a, b) {if(a == 'sign'){showStacks();}console.log('输出-》',a,b);return this.put(a, b)}}Java.perform(function (){ // 调用java代码也就是getCalc方法hookmap()
})
最终在它打印的栈信息里得到下图红框的东西
然后打开jadx-gui,并把class2.dex文件拖到jadx-gui里,然后搜索 HttpRequestEntity,然后就得到下图红框的东西
然后找到它的getMapParams方法可以看到下图宏的东西
然后按着CTRL键用鼠标左键单击下图红框的东西
然后就会跳到下图红框位置,可以看到它并没有赋值操作
然后按CTRL+F,进行搜索,搜索this.sign = 或 sign =这俩关键字,就会找到下图红框位置,这里就是sign赋值的地方了
然后如下图蓝框和红框里的内容,account的值来自于一个随机生成的UUID,然后valueOf的值来自于当前时间戳,然后就剩一个token不知道了
然后接下来对getSign进行HOOK,右键单击getSign然后选择复制为Frida片段
然后可以看到第二个参数是空字符
然后接下来要看它是怎样加密的,然后按着CTRL使用鼠标左键单击下图红框位置
然后再按着CTRL使用鼠标左键单击下图红框位置,会发现没反应,这说明b方法可能是native方法使用c语言实现的
然后搜索getSign,可以看到下图红框的东西
双击上图红框,然后右击选择复制为Frida片段
然后会发现它也是可以正常hook到东西的,如下图,这说明getSign是使用C语言实现的,所以如果想知道它是什么加密算法需要逆向它的SO文件
然后可以看到下图红框位置,它加载了一个叫wtf的so文件,这是java语言里的jni技术
然后怎么看so文件?首先把apk文件改成zip文件,然后使用解压工具打开它,打开之后找lib文件夹(一般so文件都会放在里面)
然后根据手机架构进行选择,我手机是arm64-v8a架构,所以就选择下图红框的文件夹
然后进入arm64-v8a文件夹就可以看到wtf文件了如下图红框
然后有一个工具叫做ida,它可以反编译C语言写的代码,它可以把C语言写的代码编译成汇编代码,然后从汇编编译成伪C语言代码,把so文件拖入到ida里面之后,如下图红框,就找到了getSign方法了
然后双击下图红框位置
然后可以看到它的汇编代码了
汇编代码不好看,然后按F5可以看伪C语言代码,如下图,下图的代码就是加密的代码,看不懂代码没关系后面会写怎么看