reverse之第一更

reverse之第一更

今天在刷题的时候,遇到一道比较有意思的reverse,以前并没有见过,认真研究过学会了通过OD对程序patch,接下来通过这个题目和大家交流一下:

本题是CFF2016的一个reverse100,使用IDA打开分析流程就是在你输入password之后父进程会创建一个子进程。

然后通过WriteProcessMemory()函数实现改写。通过OD调试发现改写内容如下:


在内存的样子是

002CE688  90 46 8A 14 0E 30 14 0F 41 3B C8 75 F5 

改写的位置就是程序在运行的时候中断的地方,启动带参数进程:

由于改写大小为0xD

将上面的内存写入当前位置,patch就好了。

修改之后代码为:

再通过IDA分析:

patch子进程后,做了变换,并将变换后的字符串用OutputDebugString传给父进程。父进程读取比较:

即把输入的字符串与“elcome to CFF test!”异或,然后再加一。其结果需要等于“25 5c 5c 2b 2f 5d 19 36 2c 64 72 76 80 66 4e 52”。

result = [0x25, 0x5C, 0x5C, 0x2B, 0x2F, 0x5D, 0x19, 0x36, 0x2C, 0x64, 0x72, 0x76, 0x80, 0x66, 0x4E, 0x52]
table = [0x65, 0x6C, 0x63, 0x6F, 0x6D, 0x65, 0x20, 0x74, 0x6F, 0x20, 0x43, 0x46, 0x46, 0x20, 0x74, 0x65]
flag = ''for i in xrange(len(table)):
    flag += chr((result[i] - 1) ^ table[i])print flag
文章目录
  1. 1. reverse之第一更
|