一、目标
为了防止数据被截获,有些App把返回数据做了加密,比如下面这个:
 
content 部分就是密文。我们今天就来搞搞它。
二、步骤
jadx搜索 content"
返回值是个json,那么它一定要把密文解析出来再解密,所以我们先搜索 content",看看有没有什么收获:
 
不开心,结果有点多,这个不好办……
hooker
今天介绍一个大佬的新玩具 https://github.com/CreditTone/hooker.git
hooker 是一个基于frida实现的逆向工具包。为逆向开发人员提供统一化的脚本包管理方式、通杀脚本、自动化生成hook脚本、内存漫游探测activity和service和其他任意对象。
听起来很拉风的样子。
按照说明配置好
git clone https://github.com/CreditTone/hooker.git
cd hooker
pip install -r requirements.txt   // 安装依赖然后先把App启动起来,再运行 ./hooker
这时候会列出当前所有的进程名,如果没有列出来,那就可能是frida-server没有启动
输入 我们要分析的app包名 com.yxxxx.axxxxx,就会进入到交互式控制台,这里提供了几个有意思的功能,不过今天我们暂时用不到。
ex 退出交互式控制台。
hooker替我们生成了一些辅助脚本,我们进入 com.yxxxx.axxxxx 文件夹
fenfeiMac:com.yxxxx.axxxxx feifei$ ls
activity_events.js        log
android_ui.js                object_store.js
attach                        objection
click.js                spawn
edit_text.js                spider.py
hook_RN.js                ssl_log.js
hooking                        text_view.js
just_trust_me.js        url.js
keystore_dump.js        xinit
kill                        xinitdeploy这里我们用到的是 text_view.js 辅助命令。
为什么呢?
先看看作者的说明
跟踪TextView的setText和getText,获取TextView的真实Class。一般setText的堆栈信息会带出业务层的数据model处理逻辑,进而进一步分析到业务层数据bean封装类。
密文数据总归是要解密成明文显示出来的,我们在显示明文的时候打印出堆栈,不就可以分析它的解密过程了吗?
 
召唤Jadx
 
逮住了,顾名思义,应该就是这个 EncryptUtils.O000000o
自动生成hook代码
这时候可以用上 hooker 另一个比较拉风的功能了,自动生成Hook js代码
先回到之前的那个交互式控制台。(怎么回去?退出当前命令,到上级目录 重新输入 ./hooker 命令呗)
fenfeiMac:com.yxxx.axxx fenfei$ cd ..
feifenMac:hooker fenfei$ ./hooker
  PID  Name                                     Identifier
-----  ---------------------------------------  ------------------------------------------------
 2505  ANT HAL Service                          com.dsi.ant.server
17295  Analytics                                com.miui.analytics
17166  Android Services Library                 android.ext.services
......
Enter the need to attach package.
: com.yxxx.axxx
It's com.yxxx.axxx that you have attached app.
--------------------------------------------------
Please enter e, s, j, c or ex command.
a: Discovering activities.
b: Discovering services.
c: Discovering object. eg:'c {objectId}'
d: Object2Explain. eg:'d {objectId}'
v: Discovering view. eg:'v {viewId}'
e: Determines whether a class exists. eg:'e android.app.Application'
s: Discovering classes by a class'regex. eg:'s com.tencent.mm.Message.*'
t: Discovering offspring classes by a class'name. eg:'t com.tencent.mm.BasicActivity'
j: Generating hooked js. eg:'j okhttp3.Request$Builder:build'
k: Generating hooked the string generation js with a keyword. eg:'k {YourKeyword}'
l: Generating hooked the param generation js with a param keyword. eg:'l {YourKeyword}'
m: Discovering so module.
: j com.bxxx.libcommon.tools.Encrypt -o com.bxxx.libcommon.tools.Encrypt.js
Hooking js code have generated. Path is com.yxxx.axxx/com.bxxx.libcommon.tools.Encrypt.js.ok了,再进入 com.yxxxx.axxxxx 文件夹,跑一下这个js
fenfeiNewMac:hooker feifei$ cd com.yxxx.axxx
feifeiMac:com.yxxx.axxx fenifei$ ./hooking com.bxxx.libcommon.tools.Encrypt.js结果出来了
 
三、总结
大佬们造了很多有意思的轮子,善于使用这些轮子,往往可以事半功倍。 hooker 还有很多有意思的功能等待挖掘。
 
好男儿当有一份拉几把倒的情怀,把人生当做一次旅行好了,很多事情其实都无所谓的,看淡些 ——from 鲁迅 [社会社会]

关注微信公众号,最新技术干货实时推送
