首页
社区
课程
招聘
[原创]贵阳大数据及网络安全精英对抗赛Reverse EZRE_0解题
2023-4-28 17:44 17383

[原创]贵阳大数据及网络安全精英对抗赛Reverse EZRE_0解题

2023-4-28 17:44
17383

贵阳大数据及网络安全精英对抗赛Reverse EZRE_0解题

 

昨天参加了比赛,水平太菜了,做了一下,没做出来。今天做出来了,但是不能提交了,呜呜~~~

 

先查壳,没有加壳,C++语言,o(* ̄▽ ̄*)

 

运行:

1

 

有字符串提示,拖到IDA里,

定位到关键位置:


2

 

大概的瞄一下函数的功能:有长度校验、错位异或、开启线程进行检测,最后通过变量判断flag是否正确。


 

接下来我们采用静态分析和动态调试的方式来分析。

 

打开x32debug,运行,输入flag:

flag{77e52c5b-b141-4f3b-92ec-aa680ca38,长度为38位,


Flag的值在一个全局变量中。


1中第12行长度校验顺利通过,比较简单。

 

18~19行对输入进行错位异或,x[i] ^= x[i+1]

调试器跟踪一下:


3

对比一下异或前后的数据:

4

 

5

 

现在来分析第20行创建的线程,我们跟进去看看

 

6

从函数的功能来看,函数主体调用了某个函数对数据进行进一步的变换,我们在调试器里定位到调用函数sub_f1127b处,这里先从上一步异或变换后的数据中取2个字入栈,另外还从全局的数据中取了两个字入栈(后面分析可以知道是一个key

看一下压入的值

发现不是图5中的数据:

7

说明在这之前又进行了变换。

 

回到错位异或后,在图5中对数据下硬件断点,F9

 

调试器中断了,来到了另一个函数中

8

中断在第52行伪代码的位置,为了简便,这里直接从ODIDA进行了对应。

从函数的名字来看,这个函数是一个TLS回调函数,回调函数会在创建线程的前后被调用。

通过第20行的2个参数进行过滤。

8的函数是一个RC4的加密实现(主流加密算法也必须要熟练,不然打比赛很吃亏,哈哈),这里我们只要把密码抠出来就行了。

9

通过调试可以知道RC4的密码是JT8U9ptt

52行对异或后的flag值进行了RC4加密

对比一下加密前后的数据:

 

10

11

 

和上面的分析吻合。

 

接下来我们继续从图610行的位置开始分析

该变换函数比较复杂,

12

也没有出现特殊的加密字,不好猜测是什么算法。这个变换函数暂时不深入分析。知道该算法的同学请指教,谢谢

 

通过5次变换后,flag的数据最终变成了:

13

 

接下来把最终的变换值和正确的值

14

做对比,如果相同则是正确。

 

我们回到题目本身,通过猜测flag的值是不可能的,那要解题,则必须可以通过图14的正确的值“逆变换”出正确的flag

 

因此整个变换过程都是可逆的。从这个角度出发,我们大胆猜测第三次变换也肯定是可逆的。

 

我们在调试器里把第三次变换前的flag数据和变换后的flag数据记录下来,也就是图11和图13的数据。开启新一次调试,在第三次变换参数入栈之前用变换后的数据覆盖一下变换前的数据,执行完变换后,看输出是否是原来的输入。

 

可是实验后发现并不可逆。。。

 

是哪里出问题了?

 

再观察一下变换函数的原型:

 

5个参数传入的是一个整数0x65

15

变换函数中只有一个地方用到了该参数:

16

看来该参数是有作用的。我们试着在对调变换的输入输出后,再把参数5换成0x64(选中指令二进制编辑)。奇迹发生了,变换后的输出果然是原来的输入。

 

这也就证明了第三步的变换是可逆的,而且通过参数5来控制加密和解密。

 

接下里就可以整理出获取正确flag的步骤了:

1. 把正确的flag变换数据记为DATA_D(图14)通过第三步的逆变换解密,记为DATA_C

2. DATA_C RC4解密,密码为JT8U9ptt,解密的结果记为DATA_B

3. DATA_B逆错位异或,得到DATA_A,也就是明文flag.

 

把输入替换成:

17

把变换函数的第5个参数设置成100

 

变换完成之后是:

18

3F D8 A0 03 BB 66 8C FC 94 AF A9 EA 83 28 31 59 82 83 C9 92 9D B5 73 A4 8D 4C 7B 96 2B 74 6A A8 AE C8 C0 AE B2 D4 00 00

 

RC4解密,

19

 

再逆向错位XOR,

得到flag:

flag{068d772e155448f0ba101abb62a2a837}

 

运行输入flag测试:

20

 

解题完毕!


附件:https://pan.baidu.com/s/1vyCIzqWl99dHDp4EKRy7mw,提取码:ucte

 

好久没写文章了,写的不好的地方请大家多多包涵~


有错误或者更好的方法欢迎大家一起讨论

 



[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2023-4-29 10:21 被chence编辑 ,原因:
收藏
点赞2
打赏
分享
最新回复 (6)
雪    币: 19584
活跃值: (60093)
能力值: (RANK:125 )
在线值:
发帖
回帖
粉丝
Editor 2023-5-1 18:14
2
0

附件本地存一份

上传的附件:
雪    币: 2093
活跃值: (1820)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
洪七公. 2023-5-2 20:21
3
3
感谢分享
雪    币: 7563
活跃值: (1231)
能力值: ( LV12,RANK:256 )
在线值:
发帖
回帖
粉丝
丿feng 3 2023-5-4 09:15
4
0
DES
雪    币: 5496
活跃值: (2346)
能力值: ( LV7,RANK:108 )
在线值:
发帖
回帖
粉丝
Bxb0 1 2023-5-4 14:03
5
0
应该魔改DES
雪    币: 1327
活跃值: (355)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
chence 4 2023-5-4 17:20
6
0
丿feng DES
谢谢指点
雪    币: 1327
活跃值: (355)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
chence 4 2023-5-4 17:20
7
0
Bxb0 应该魔改DES
谢谢指点
游客
登录 | 注册 方可回帖
返回