28.安卓逆向2-frida hook技术-逆向os文件(一)
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
内容参考于:图灵Python学院
工具下载:
链接:https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwd=zy89
提取码:zy89
复制这段内容后打开百度网盘手机App,操作更方便哦
上一个内容:27.安卓逆向2-frida hook技术-frida-dump(使用firda脚本下载dex文件)
上一个内容写了使用frida脚本下载app源码,也就是砸壳操作,本次开始查找它的加密参数,也就是下图红框的sign参数
然后打开jadx,在app源码中搜索sign"(为什么加"因为sign是一个字符串,在java语言中规定字符串要写在两个"之间),如下图会搜出来很多,点哪一个?
通过观察名字,下图红框里的比较符合,KEY_SIGN,key在这种场景中表示钥匙的意思,然后没有sign参数还访问不通接口,所以它比较符合,所以先从它开始看
然后双击上图红框位置进入之后,再按CTRL+F搜索,KEY_SIGN在哪进行了使用
然后很遗憾搜不到KEY_SIGN使用位置
然后继续观察发现,它还有一个sign
如下图红框这个sign是有使用的,它在构造方法中进行了赋值,然后在getMapParams中获取了值
然后特征就来了,如下图在getMapParams方法中,给Map添加的key和在请求中的key一样
然后开始使用frida调试,在下图红框位置鼠标右击选择复制为frida片段
然后使用下方重启的方式进行frida注入,非重启的方式会被app检测
frida -Uf com.xxxx.news -l ./sign.js
注入之后刷一下app,让它发送网络数据包,然后如下图红框就可以找到了
如下图
然后getSign方法的入参,根据三个字符串,生成一个字符串
然后继续观察代码,如下图红框,getSign调用了a.b方法也是传入了三个参数
然后在进入a.b方法,如下图红框它调用了a.a方法
这个a是下图红框位置声明的,是SignManager类型
然后进入SignManager类型中,它最终调用了native类型的getSign方法(native是java中的jni,jni让java支持java调用c/c++语言写的代码),这是一个so文件中的方法
如下图它加载了一个叫wtf的库(so)文件,这说明so文件是wtf.so,到这就是java层的最底层,没办法再底层了
so文件去哪找?首先apk文件就是一个zip类型的压缩包,然后找到app的apk文件把它进行解压,解压完进入lib目录里,如下图红框选择arm64-v8a(这是系统架构),一般现代的安卓手机都是它,这个app的so文件在模拟器中就无法使用,模拟器是x86架构,这里没有x86
如下图红框就找到了wtf,so文件会以lib开头,当前这个app就是用这个so文件进行的加密,然后上方可以看到java层传递给了它三个参数,然后返回了一个加密参数,所以接下来就要去分析它这个so是怎样加密的
so文件需要使用ida工具分析,在这继续写会很乱,所以下一章再开始so文件逆向