CG-CTF 部分re WP
0x01 Hello,RE!
flag{Welcome_To_RE_World!}

0x02 ReadAsm2
main函数,传入input和28两个参数,输出flag

看汇编,func函数,对input[i]进行处理

第一次循环:rax=chr(1^input[1]),第i次循环:rax=chr(i^input[i]),当i>28时return
写脚本,flag{read_asm_is_the_basic}

0x03 Py交易
反编译,考察逆向算法

写脚本,nctf{d3c0mpil1n9_PyC}

0x04 WxyVM
input放到4005B6进行处理,长度必须为24,再与601060比较

函数4005B6,数组6010C0每3个数一组,第一个数决定case,第二个数决定input的处理位置,,第三个数决定input的处理数,处理分别有加减乘异或

跟进数组,长度为15000,提取出来

跟进得到数组601060,将它逆向算回去就行了,nctf{Embr4ce_Vm_j0in_R3}

0x05 maze

迷宫题,v10是位置,v5是移动,跟进四个函数可知,上下左右分别对应“.”“0”“O”“o”

终点是“#”,迷宫图存在asc_601060


右下右右下下左下下下右右右右上上左左
nctf{o0oo00O000oooo..OO}

0x06 480小时精通C++
运行文件得到加密后的flag

flag长度为36,再由输出格式得到数组
arr[36]={0x62,0x64,0x61,0x63,0x73,0x4e,0x34,0x6a,0x6f,0x60,0x71,0x5f,0x67,0x3c,0x6e,0x5b,0x45,0x61,0x77,0x7c,0x33,0x76,0x57,0x63,0x5b,0x78,0x31,0x71,0x7b,0x5f,0x74,0x44,0x75,0x77,0x29,0x7d}

来到加密函数StringEncryptFunction,传入的参数是a1(字符串)和a2(字符串的长度)
发现了480个一模一样的子函数

随意选一个跟进,分析

v9="014014014"(表示第14次加密),v8=len(v9)=9,v3[i]=v2[i]=a1[i],v4=v9[i%v8],最后v2[i]=v4^v3^i
因为运算全是异或,所以我们逆回去还是异或,写脚本:

运行得到:flag{N0body_c4n_Mast3r_c_p1us_pLus!}
0x07 WxyVM 2
用IDA6.8反汇编,漫长的等待后。。。每错,两万多行代码
input存在byte_694100,长度为25(即byte_694100到byte_694118)

经过一连串运算后与dword_694060存的字符串进行比较

所以我们跟进得到dword_694060对应的十六进制数组0xC0,0x85,0xF9,0x6C,0xE2,0x14,0xBB,0xe4,0xd,0x59,0x1c,0x23,0x88,0x6e,0x9b,0xca,0xba,0x5c,0x37,0xfff,0x48,0xd8,0x1f,0xab,0xa5
再逆运算即可,这一堆运算其实只有少部分改变了input,如图

思路还是挺简单的,但是因为两万多行代码实在庞大,所以直接白嫖大佬的脚本了,先将所有运算存到a.txt

运行脚本报错,来到a.txt中把所有“u”都去掉就行了,nctf{th3_vM_w1th0ut_dAta}


0x08