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
网友评论