[原创]TSG CTF 2020 Reverse-ing
发表于:
2020-7-13 20:14
7580
[原创]TSG CTF 2020 Reverse-ing
上周末做了TSG ctf,感觉这个reverse题目还挺有创意,参考了了Writeup发现他们有些点没讲出来,我再这里补充一下。先附上原文链接:1bdK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1j5H3P5o6V1H3M7$3E0A6k6s2y4Q4x3X3g2U0L8$3#2Q4x3V1k6@1M7$3N6Q4x3X3c8U0N6r3k6Q4x3X3c8%4M7X3W2@1k6i4g2H3i4K6u0r3i4K6t1K6M7X3g2$3k6i4u0K6k6g2)9J5k6r3W2F1k6H3`.`. 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}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-7-14 09:48
被CrackM编辑
,原因: 补充附件
上传的附件: