一、目标

一、目标

为了防止数据被截获,有些App把返回数据做了加密,比如下面这个:

mb1
1:mb1

content 部分就是密文。我们今天就来搞搞它。

二、步骤

jadx搜索 content"

返回值是个json,那么它一定要把密文解析出来再解密,所以我们先搜索 content",看看有没有什么收获:

s1
1:s1

不开心,结果有点多,这个不好办……

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封装类。

密文数据总归是要解密成明文显示出来的,我们在显示明文的时候打印出堆栈,不就可以分析它的解密过程了吗?

my1
1:my1

召唤Jadx

e1
1:e1

逮住了,顾名思义,应该就是这个 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

结果出来了

rc
1:rc1

三、总结

大佬们造了很多有意思的轮子,善于使用这些轮子,往往可以事半功倍。 hooker 还有很多有意思的功能等待挖掘。

ffshow
1:ffshow

好男儿当有一份拉几把倒的情怀,把人生当做一次旅行好了,很多事情其实都无所谓的,看淡些 ——from 鲁迅 [社会社会]

100

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

100