qinless 发表于 2021-11-18 01:06

最右 5.7.3 app sign aes 参数分析


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

# 推荐阅读
***这个样本 unidbg 部分可以参考龙哥的 csdn 教程,可以参考一下***
***[龙哥 csdn 最右样本](https://blog.csdn.net/qq_38851536/article/details/117533396?spm=1001.2014.3001.5501)***

# 前言
> ***最右 app 参数分析,版本 5.7.3***

# charles 抓包



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

# so 分析



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

### 0x1 encodeAES



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



点进来可以看到,这里是标准的 `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



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



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

# frida hook



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



先来看下 `encodeAES` 函数部分
> ***1、encodeAES 参数***
> ***2、aes key***
> ***3、aes iv***
> ***4、aes encrypt result,最后会把 aes iv 拼接到加密结果前面***



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



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

# unidbg

> ***下面开始使用 unidbg 跑起来,不过这个样本的 aes key iv 都是动态生产的,所以需要先把 key iv 固定才行***
> ***下面的话我就直接贴代码了,具体含义可以参考龙哥的文章***
> ***(https://www.qinless.com/670)***

```java
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;
                }
      });
}
```



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



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



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

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



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

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

没用过unidbg,学习了

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

迷迷糊糊的看完了,骂骂咧咧的走了。
页: [1] 2 3 4
查看完整版本: 最右 5.7.3 app sign aes 参数分析