首页
社区
课程
招聘
[原创]TSG CTF 2020 Reverse-ing
发表于: 2020-7-13 20:14 7313

[原创]TSG CTF 2020 Reverse-ing

2020-7-13 20:14
7313

上周末做了TSG ctf,感觉这个reverse题目还挺有创意,参考了了Writeup发现他们有些点没讲出来,我再这里补充一下。先附上原文链接:https://0x90skids.com/tsg-ctf-writeup/#reverse-ing
Solved By: not-matthias
Points: 114
Flag: TSGCTF{S0r3d3m0_b1n4ry_w4_M4wa77e1ru}

拿到题目的第一件事就是检查二进制架构,目标操作系统以及是否保留了调试信息

现在我们知道他是一个Linux的ELF文件,拖到IDA里面看一下_start函数,可以看到他先是跳到了reverse函数里面进行执行,但是执行完Call rbx之后,代码就变成了一团糟
图片描述
reverse函数里面对_start函数进行了修改,所以每次我们从call rbx回来之后,代码都发生了变化
图片描述
我最开始直接把代码复制过去,然后写了一个python脚本来转换指令,但是实话实说这个有点难而且花了我很多时间。后面@jeff_提到reverse函数调用了很多次决定采用另一种方法。我从_start函数的起始地址开始,遍历所有的代码,检查是否有jmp rbx的opcode存在。因为我们知道在跳转之前的代码都是能够正确执行的,所以我们jmp rbx之前的代码保存在输出文件中。接下来我们调用reverse函数,转换_start函数的代码,继续往下执行。

我们用IDA打开已经去混淆的二进制文件,代码已经能够读懂了。但是IDA似乎无法创建函数?及时我们手动创建,也还是会出现错误:
The function has undefined instruction/data at the specified address..
图片描述
从上到下看了一遍之后,我注意到没有返回状态,所以我把最后一个NOP(0x90)修改为了RET(0xC3)
之后按P创建函数,F5看伪代码
图片描述
那,到了这里大家好像就觉得,“啊,就是个异或和加运算”,这样往下走就行了对不对?并不是!!!
有一点不要忘了,因为reverse函数的存在我们这里面的loc_600194里面的数据,每执行一次reverse函数,都会进行交换。
所以还是要回到汇编代码上来看

先单步来解释一下:

因此写出来公式为 Input[i] ^ A[i] + B[i] = 0; i为奇数
Input[i] ^ B[i] + A[i] = 0; i为偶数

计算Flag的代码为:

最后输出flag:TSGCTF{S0r3d3m0_b1n4ry_w4_M4wa77e1ru}


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-7-14 09:48 被CrackM编辑 ,原因: 补充附件
上传的附件:
收藏
免费 4
支持
分享
最新回复 (2)
雪    币: 344
活跃值: (922)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
BIX
2
您好,有题目文件嘛。
2020-7-13 21:01
0
雪    币: 290
活跃值: (413)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
BIX 您好,有题目文件嘛。[em_63]
有,我放一下附件
2020-7-14 09:44
1
游客
登录 | 注册 方可回帖
返回
//