QCTF2018-Xman-babymips

可以看到上述代码不同于汇编代码,是MIPS指令,不过好在IDA有相应的插件反汇编这种代码。

整个代码流程为:我们输入32bytes的字符串,先进行异或,然后比较前5bytes的字符是否相等,然后进入sub_4007F0函数。

将后27bytes字符串进行移位运算,然后再与字符串比较。

相应的逆向比较简单,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>

int main(){

char v5[32] = {'Q','|','j','{','g'};

unsigned char off_410D04[] ={
0x52, 0xFD, 0x16, 0xA4, 0x89, 0xBD, 0x92, 0x80, 0x13, 0x41,
0x54, 0xA0, 0x8D, 0x45, 0x18, 0x81, 0xDE, 0xFC, 0x95, 0xF0,
0x16, 0x79, 0x1A, 0x15, 0x5B, 0x75, 0x1F
};

for(int i=5;i<32;i++){
if ( (i & 1) != 0 ){
v5[i] = (off_410D04[i-5] >> 6) | (off_410D04[i-5] << 2);
}
else
v5[i] = (off_410D04[i-5] << 6) | (off_410D04[i-5] >> 2);
}

for(int i=0;i<32;i++){
v5[i] ^= 32 - i;
printf("%c",v5[i]);
}

}

QCTF2018-Xman-babymips
http://example.com/2023/09/04/CTF/QCTF2018-Xman-babymips/
作者
gla2xy
发布于
2023年9月4日
许可协议