吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5483|回复: 36
收起左侧

[Android 原创] 最右 5.7.3 app sign aes 参数分析

[复制链接]
qinless 发表于 2021-11-18 01:06

本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!

推荐阅读

这个样本 unidbg 部分可以参考龙哥的 csdn 教程,可以参考一下
龙哥 csdn 最右样本

前言

最右 app 参数分析,版本 5.7.3

charles 抓包

1637167995369-0.png

一共有三个加密参数 sign request response 一个一个来看,java 层的就不再分析了,可以参考龙哥样本

so 分析

1637167995369-1.png

先使用 unidbg 加载 so 查看动态注册的函数地址,先来分析 encodeAES  函数

0x1 encodeAES

1637167995369-2.png

ida 跳过来,主要查看这个函数

1637167995369-3.png

点进来可以看到,这里是标准的 AES_128_cbc 算法,调用的是 openssl

通过查找 openssl 相关的资料得知,j_EVP_EncryptInit_ex 此函数的 后面两个参数 分别是 aes 的 key iv
可以参考此文章: https://blog.csdn.net/viewsky11/article/details/78983234

0x2 sign

此函数是变形的 md5,龙哥的 csdn 已经放出 python 源码,这里就不再分析了

0x3 decodeAES

1637167995369-4.png

ida 跳转到 decodeAES 函数,主要分析此函数

1637167995369-5.png

这里跟加密逻辑相同,使用的 openssl 库解密,下面使用 frida hook 一下

frida hook

1637167995369-6.png

具体的 hook 代码,俺就不贴出来,大家自行写一下,有啥问题一起讨论哈,我这里主要是 hook 了 java 层的几个 native 函数,跟 so aes key iv 相关的函数

1637167995369-7.png

先来看下 encodeAES 函数部分

1、encodeAES 参数
2、aes key
3、aes iv
4、aes encrypt result,最后会把 aes iv 拼接到加密结果前面

1637167995369-8.png

这里是 sign 比较简单,就是拿着 aes 加密结果进行 md5 运算

1637167995369-9.png

这是 decodeAES 部分

1、decodeAES 参数,也是请求的响应值
2、aes key
3、aes iv,这里的 iv 正是 参数一的前 16 个字节
4、aes 解密结果,但不是明文,显然后面还有其他的处理
5、最后才是最终的明文

unidbg

下面开始使用 unidbg 跑起来,不过这个样本的 aes key iv 都是动态生产的,所以需要先把 key iv 固定才行
下面的话我就直接贴代码了,具体含义可以参考龙哥的文章
unidbg hook 使用大全

public void ReplaceArgByConsoleDebugger() {
        emulator.attach().addBreakPoint(module.base + 0x5E1A2, new BreakPointCallback() {
                @Override
                public boolean onHit(Emulator<?> emulator, long address) {
                        String fakeInput = "1b 4a 4a 59 59 59 59 e9 e9 f8 f8 f8 f8 09 09 09".replace(" ", "");
                        emulator.getBackend().mem_write(0x403d2700, hexToByteArray(fakeInput));
                        Inspector.inspect(emulator.getBackend().mem_read(0x403d2700, 16), " 0x403d2700 ");

                        return true;
                }
        });

        emulator.attach().addBreakPoint(module.base + 0x5E140, new BreakPointCallback() {
                @Override
                public boolean onHit(Emulator<?> emulator, long address) {
                        String fakeInput = "c1 10 90 90 90 90 9f 9f 9f 9f be be be be ce ce ".replace(" ", "");
                        emulator.getBackend().mem_write(0x403df040, hexToByteArray(fakeInput));
                        Inspector.inspect(emulator.getBackend().mem_read(0x403df040, 16), " 0x403df040 ");

                        return true;
                }
        });

        emulator.attach().addBreakPoint(module.base + 0x5d22a, new BreakPointCallback() {
                @Override
                public boolean onHit(Emulator<?> emulator, long address) {
                        String fakeInput = "de fd fd 0d 0d 0d 0d 1d 1d ac ac ac ac bc bc bc".replace(" ", "");
                        int length = fakeInput.length();
                        MemoryBlock fakeInputBlock = emulator.getMemory().malloc(length, true);
                        fakeInputBlock.getPointer().write(hexToByteArray(fakeInput));

                        emulator.getBackend().reg_write(ArmConst.UC_ARM_REG_R6, fakeInputBlock.getPointer().peer);

                        return true;
                }
        });
}

1637167995369-10.png

代码写完跑起来,调用 encodeAES 函数,正常运行,结果跟 frida hook 出来的结果相同

1637167995369-11.png

在调用 sign 签名函数,结果也是相同的

1637167995369-12.png

最后便是 decodeAES 结果也是正常解密出来

最后

最右的分析到此结束,这里还有一个坑,就是 aes 解密之后还有一步处理,这个大家自行分析吧,总之就是要细心,不然可能会走很多弯路
此样本难度不高,主要是 key iv 动态生成的,会影响到 unidbg 的动态调试,这个搞完也算是,对 unidbg 的使用有了进一步的了解

1637167995369-13.png

最后附上 python 还原的效果图,有啥问题可以一起讨论哦

免费评分

参与人数 5威望 +2 吾爱币 +104 热心值 +4 收起 理由
qtfreet00 + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
nightmare77 + 1 + 1 热心回复!
lgc81034 + 1 谢谢@Thanks!
笙若 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Forgo7ten2020 + 1 + 1 牛哇牛哇,收藏了

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| qinless 发表于 2022-1-14 13:52
小公主々 发表于 2022-1-13 12:45
大佬太强了,目前我只能获取到 .dex文件,获取不到so,也不知道.so怎么去查看等等操作,期待大佬指点。

vx 2027762055,欢迎来讨论
 楼主| qinless 发表于 2021-11-18 22:15
icjhao 发表于 2021-11-18 22:02
看完作者的分享很有启发,写得非常详细,有空实战试试

啥启发,有啥新想法,分享下呗,老哥
不苦小和尚 发表于 2021-11-18 07:22
wasm2023 发表于 2021-11-18 08:15
新东西,以后备用,感谢分享
wsz12312 发表于 2021-11-18 08:22
留着学习
huzp 发表于 2021-11-18 08:52
没用过unidbg,学习了
KyrieIrving11 发表于 2021-11-18 10:13
真厉害,学习学习
DXSN 发表于 2021-11-18 10:40
感谢分享
ale0320 发表于 2021-11-18 14:10
真厉害,学习学习!
lvcha04 发表于 2021-11-18 16:30
学习了,感谢分享!!!
Xw丶小威 发表于 2021-11-18 16:35
迷迷糊糊的看完了,骂骂咧咧的走了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 11:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表