文章目录[隐藏]
android 逆向 10 / 38
- app OAuth api_sign 分析
- app sig 参数加密分析 unidbg 模拟黑盒调用
- app sign so 加密参数破解|unidbg
- sgmain x-sign 分析 - unidbg
- androidAsync fridaManager sgmain 70102 rpc 远程调用
- app edata 参数 so aes 加密分析破解|unidbg
- frida 加载 sekiro dex 文件 实现与服务端交互
- frida sekiro 实现 sgmain 70102 远程 rpc 调用
- xposed sekiro hook 获取 wx 万能 key
- unidbg console debugger 使用
- unidbg hook inline hook 使用
- app 公众号文章列表 so 加解密算法分析还原 | 简单分析
- app 公众号文章列表 so 加解密算法分析还原 | 加密 rsa base64 分析
- app 公众号文章列表 so 加解密算法分析还原 | 加密 zip aes 分析
- app 公众号文章列表 so 加解密算法分析还原 | response 内容解密分析
- app sign so 加密算法分析还原|简单分析
- app sign so 加密算法分析还原|so 算法分析
- app sign so 加密算法分析还原|so sub_126AC 函数算法还原
- app so signkeyV1 参数分析
- ida 动态调试 android so 文件|基础入门环境搭建
- app so newSign 参数分析破解
- app tzRgz52a 参数分析破解
- app sign-v2 签名算法 aes 加解密分析
- app so 加密参数分析|protocbuf 分析
- mxtakatak android app 加解密分析
- android app so 加密算法分析破解|mtgsig unidbg
- android app so 加密算法分析破解|siua unidbg
- android app nsign so 加密算法分析
- android app sig 参数 so 加密逻辑逆向分析
- android app so sig 加密参数 unidbg
- 狗狗音乐登陆协议加密参数逆向分析
- android sign so 加密参数分析|unidbg
- android app X-SS-QUERIES 参数分析
- unidbg android app xgorgon 加密参数 leviathan
- sgmain 6.4.x xsign 加密算法分析研究
- sgmain 6.4.x xminiwua 加密算法分析研究
- 某 app mas 算法分析还原 cms so
- 某东登陆协议 tlv 逻辑分析
const 龙哥 = Function() {}
const a = 全能的傻宝,每天都会换一种姿势来分享各种操作,最近 10 月在分享密码学;
const b = 点击加入星球;
return "无敌的龙哥";
前言
unidbg
是个非常好用的工具,可以模拟手机运行环境执行so
文件,同时也非常适合算法还原
得益于它强大的hook debugger
功能,我们今天的主角是console debugger
,简单介绍一下使用
想学习unidbg
的小伙伴,可以call 龙哥 ();
demo
这篇文章的样本是 搜狗搜索 app,不了解的同学,可以参考一下文章
sougou搜索 app weixin公众号文章列表 so 加解密算法分析还原 | 简单分析
推荐阅读
start
上面的文章已经分析到
so navite encrypt
加密函数了,最后也用unidbg
成功跑了起来
0x1
前面遇到了个
init
函数,一般有经验的一眼就能看出是初始化函数,不知道的话,可以先通过分析代码确定
先来分析下encrypt
函数
这里的 j_Sc_EncryptWallEncode
函数有点可疑,点进去瞧瞧
经过分析加密逻辑都在 EncryptWall::EncryptHttpRequest3
这函数里
但是这里的 byte_3A0C0 = 1
有点可疑,看看是个啥子
发现是个 .bss
节,bss
节里的数据都是未初始化的数据,在函数运行中才初始化,
这里的话就可以使用 unidbg
的内存监控这个字节的读写操作
0X2
unidbg console debugger
基本使用
emulator.traceWrite(module.base + 0x3a0c0, module.base + 0x3a0c0);
加上这段代码,运行
搜索 3a0c0
,0xa27a
在该地址操作的,ida
中按 g
跳过去看看
这里赋值给 1
,但是这个函数在哪里调用的呢,通过 x
可以查找到调用的地方,但是这里我们可以通过 unidbg
的 console debugger
打印调用栈
// 初始化 debugger
debugger = emulator.attach(DebuggerType.CONSOLE);
// 添加一个断点
debugger.addBreakPoint(module.base + 0x0a27a);
初始化对象,并添加一个断点,执行代码
断点在 0x4000a27a
处断下来了,在下面输入 bt
指令,查看调用栈
往上翻可以看到是在 Java_com_sogou_scoretools_ScEncryptWall_init
这个函数里调用的,地址是 0x09a61
跳过去看看
现在大概明白了 init
的逻辑
0x3
回到
EncryptWall::EncryptHttpRequest3
函数处,点进去瞧瞧
得益于符号没去掉,可以清晰看到使用到的算法 rsa base64 aes
等
使用 unidbg console debugger
分析下 EncryptHttpRequest3
函数的参数
在 0xB300
处下个端点,运行代码
成功断下来 (百度 Google:根据ATPCS调用约定,R0-R3代表参数1234 后五个参数在栈中)
通过 m
指令查看寄存器的值
mr0 mr1
分别对应我们传的 参数一 参数二,使用 d
指令查看当前断点窗口信息
mr2
应该就是参数三了,mr3
应该是参数三的长度,可以修改参数验证一下,那后面的五个参数咋看呢,先查看 sp
寄存器的内存
sp
寄存器存的是堆栈数据,每四个字节就代表栈中的一个值,是小端序模式
参数五:0x40228000
参数六:0x40203000
参数七:0x40218040
参数八:0x00000000
= 0
参数九:0x00000040
= 0x40
分别看一下参数 五六七的 值
参数五是个 buffer
,还没有数据
参数 六七 也不知道是个啥,不管了。
这里的话,主要是通过 m
指令查看内存,使用方式 m + [r0-r7|address] [后面还可以加上查看多少字节例如查看 0x20 32个字节]
Tips: 继续
可以在这里下个断点,瞧瞧结果是啥
先查看地址使用 b
指令添加一个端点,在使用 c
指令跳转到下一个断点
可以使用 vbs
查看全部的断点
使用 n
指令,单步执行
查看 mr0
内存的地址,没显示完再使用 mr0 0x100 查看 256
个字节数据
最后
以上就是常用的指令可以连续敲两下换行查看全部指令