文章目录[隐藏]
android 逆向 14 / 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 android逆向 密码学 算法还原
的小伙伴可以call 龙哥 ();
接着上一篇文章分析,本次来分析下zip base64
的加密逻辑
0x1
v46 = sub_B178(s, v17, v11, v57);
先来看看这段代码,v46
刚好是u
参数,调用sub_B178
函数获取的
点进来可以看到一些算法,分别是 zip_compress aes base64
对
aes
算法了解的同学应该知道需要关注那些内容,不了解的可以call 龙哥 ()
跟着一起学习密码学
咱们需要关注的是
1、使用的密码长度:AES-128 or AES-192 or AES-256
2、明文是啥
3、密钥 key 是啥
4、加密模式是啥:ECB or CBC,如果非 ECB,那么 IV 是啥
5、填充方式是啥:No or PKCS5 or PKCS7
Tips: 下面一个一个来分析,先来看看 sub_B178 函数的入参是啥
1、s 是参数 a1
2、v17 是 s 的长度
3、v11 是 48字节大小的首地址加 16 的地址
3、v57 48字节大小的地址
Tips: 进入 sub_B178 函数继续分析
这里的
zip_compress
需要注意,是用的是deflate
压缩算法
其他的zlib gzip
实际在压缩的时候会添加上头和尾,使用这两个算法需要去掉头和尾才是真正的数据
参考链接 gzip,deflate,zlib辨析
继续分析 AES_Encrypt
函数,Base64Encode
函数可以暂时忽略,看下参数
1、v10 = v9 也就是 v9 的内存地址
2、v11 是 zip_compress 函数的结果
3、&v16 地址
4、v5 参数 a3,也就是前面 48字节的 后 32位
5、32u 32数字
6、v4 参数 a4 前面的 48字节
7、16u 16数字
Tips: 参数分析完,点击去继续分析
先分析
n_crypto::SetEncKeySym(&v20, v10, 8 * a5);
这一行代码,看像是密钥相关函数
1、&v20 char 类型的地址
2、v10 是参数 a4
3、8 x a5,a5 是参数 a5 8 x a5 = 256
SetEncKeySym
函数点进来,看到这个判断,就可以判断是AES-256
,在AES-256中,密钥是32字节
这里的 a2 就是参数3,而参数1 = a4 = 32 字节,这里的参数1 应该就是密钥
再往下分析 padding
填充方式,目前看不出来是啥方式,不过通过参数 16u
可以猜测这个应该是 block
大小,Pcks#5 默认是 block = 8
, Pcks#7 可变的 1-255
,这里应该是 Pcks#7
填充,后面可以验证下
Tips: 继续分析 n_crypto::EncSym 函数
先来看下参数
1、&v21 是个内存地址。v21 在上面有初始化,a6 就是前面的 48字节,这里应该是取前 16 个字节,猜测:前 16 是 IV,后面 32 是密钥
2、v9 内存地址
3、v18 内存地址
4、v14 内存地址
5、&v20 应该是密钥的内存地址
EncSym 函数点进去,通过符号可以发现是 CBC 加密模式
前面的猜测确实正确,CBC
模式下的 IV
在运算会先跟密钥进行异或,这里应该就是异或的逻辑了
unidbg
又到了
unidbg debugger hook
阶段,验证一些数据
unidbg console debugger zip_compress
先在
0xB1B0
下个断点
运行代码,成功断下来,查看 mr0
的数据,就是我们传进来的 url
输入 n
指令单步执行,在查看 r6
的值,使用 cyberchef
转成 bas64
稍后再使用 python
来验证
这里为啥看 r6
的值呢,看下 so
就明白了 operator new[]
申请一块内存,存到 r6
寄存器,zip_compress
的加密结果存到了 v9
里也就是 r6
使用 python zlib
模块,头和尾分别是 2-4
个字节去掉即可
unidbg console debugger aes
最后再来看下
aes cbc
使用的啥填充模式,0x12970
下断点
查看 mr0
的值,第三行后面 11 都是填充的,模式就是 pkcs#7
最后
加密逻辑就分析完了,后面再看时间是否写算法还原的文章