wangxiaobai123 发表于 2024-9-26 17:23

2020太湖杯ReverseMe(easy-app题解)

##### 2020太湖杯easy-app题解

观察是否有壳

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240924193006102.png)

直接从oncreate()开始

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240924192338248.png)

调用系统函数加载so库

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240924192411112.png)

接下来用IDA逆向对应的so层,首先直接crtl+f直接搜索java_come_xxx,

- 若存在包名,直接点击跳转对应逻辑
- 若没有则可能动态加载,重点怀疑JNI_Load方法和init,init_arry段

顺利找到,开始分析(以下步骤均通过静态+动态调试进行):

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926112908498.png)

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926112920263.png)

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926112944956.png)

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926113006770.png)

###### **线索一**

**我们要输入的字符串长度为38位,且前5位为"flag{",最后一位为“}”,而中间是32位进行下一步分析**

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926113309318.png)

接着经过check1()函数处理

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926113352738.png)

跟进去进一步查看

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926114733384.png)

这里用的是arm64-v8架构进行逆向,倘若用armabi-v7架构将会有更明显的特征

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926115004141.png)

`push_back` 调用中,`(unsigned __int8)(*(_BYTE *)(v14 + i) & 0xF0) + (v15 & 0xF)` 和 `push_back(v3 + 9, (unsigned __int8)(*(_BYTE *)(v17 + i) & 0xF0) + v18)` 分别将高四位和低四位组合在一起

> 举个例子
>
> 假设一个32位的二进制数为 `A B C D E F G H I J K L M N O P`,其中:
>
> - 前16位为 `A B C D E F G H`
> - 后16位为 `I J K L M N O P`
>
> 其中:
>
> 1. 将前16位的高4位(`A B C D`)和后16位的低4位(`M N O P`)组合,存放到后16位。
> 2. 将后16位的高4位(`I J K L`)和前16位的低4位(`E F G H`)组合,存放到前16位。
>
> 结果可能是这样的:
>
> - 新的前16位为 `I J K L E F G H`
> - 新的后16位为 `A B C D M N O P`

###### 线索二

**check()函数将前十六位的高四位和后十六位的低四位组合存放到后十六位,将后十六位的高四位和前十六位的低四位组合存放到前十六位。**

重新分组后进入如下算法:

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926115545669.png)

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926115646405.png)

###### 线索三

**这里将字符串分为4组进行TEA加密,注意key这里运行时候被修改了,正确的应该是0x42,0x37,0x2c,0x21**

接着分析:

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926115813150.png)

进入了一个类似base64加密函数进行加密,跟进查看

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926120526232.png)

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926120605096.png)

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926120628875.png)

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926120648134.png)

###### 线索四

**值得注意的是base64_encode中不止包括了base64加密,还有移位操作。将编码之后的base64,每三位循环向左移动,第四位做分隔符不变.并且通过动态调试发现base64的表为`abcdefghijklmnopqrstuvwxyz!@#$%^&*()ABCDEFGHIJKLMNOPQRSTUVWXYZ+/`**

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926120829345.png)

###### 比较

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926121045256.png)

###### 代码编写

综合以上知识,开始编写逆向代码:

首先编写TEA算法的C语言库以供python调用:

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926165122329.png)

其次主要逆向脚本如下:

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926165214669.png)

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926165300508.png)

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926170412022.png)

最终结果如下:

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926170428912.png)

###### 验证

!(https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240926170553321.png)

###### 题目及脚本

通过网盘分享的文件:easy-app.zip
链接: https://pan.baidu.com/s/1E6-WtYpF1f0hiW01S_kO3w?pwd=uj1r 提取码: uj1r

cattie 发表于 2024-9-26 18:20

图挂了,直接附件形式上传论坛吧。

justwz 发表于 2024-9-26 22:30

跟着大佬学逆向

Theropej 发表于 2024-9-27 08:39

cattie 发表于 2024-9-26 18:20
图挂了,直接附件形式上传论坛吧。

哈哈哈 开代{过}{滤}理就可以看了·,没问题

无奈的地刺王 发表于 2024-9-27 11:08

图床挂了

wangxiaobai123 发表于 2024-9-27 11:30

无奈的地刺王 发表于 2024-9-27 11:08
图床挂了

https://cdn.jsdelivr.net/gh/wangxiaobai08/Picture@main/image-20240927112930246.png

wangxiaobai123 发表于 2024-9-27 11:32

无奈的地刺王 发表于 2024-9-27 11:08
图床挂了

啊,新人不是很懂,我用的图床本地浏览器能加载起来看到。你们都看不到吗?

puree19890428 发表于 2024-9-27 15:21

11看看再睡

GoogleHacking 发表于 2024-9-27 15:55

怎么看不到图了

collinchen1218 发表于 2024-9-27 19:03

wangxiaobai123 发表于 2024-9-27 11:32
啊,新人不是很懂,我用的图床本地浏览器能加载起来看到。你们都看不到吗?

看不了,注册这个图床:imgse.com,然后图片重新上传
页: [1] 2
查看完整版本: 2020太湖杯ReverseMe(easy-app题解)