36.[FlareOn4]IgniteMe
得到的 flag 请包上 flag{} 提交。
其中,txt文档的内容为:Hint:本题解出相应字符串后请用flag{}包裹,形如:flag{123456@flare-on.com}
IDA打开,搜索字符串,跟进,交叉引用。
直接反编译,发现
那就不看这里了
直接看sub_4010F0和sub_401050
首先看sub_4010F0()函数
就是将输入的\n和\r给去掉,那么加密函数就应该在sub_401050中了
最后是判断byte_403180是否与byte_403000相同,后者已给出,导出
这里需要确定v4的值,查看汇编(sub_401000)
静态确定:
能够确定,v4的值是存在ax寄存器里的,将80070057h存入eax和edx,然后,然后是丢弃了高16位数据(eax跟edx是32位)将ax与dx(ax跟dx是16位)异或。所以此时ax与dx的值是0057h
其中,rol是循环左移(不舍弃),shr是每位右移, 高位补 0,低位舍弃
0057h即1010111,首先进行异或,因为相同,所以ax的值为0
此时eax为80070000h(10000000000001110000000000000000b)
eax左移4位:00000000011100000000000000001000b
ax右移1位:0000000000000100b
所以此时c的值为100b即4(c是char占用16字节)
动态调试:
然后就没什么了,写脚本即可
enc=[0x0D,0x26,0x49, 0x45, 0x2A, 0x17, 0x78, 0x44, 0x2B, 0x6C, 0x5D,0x5E, 0x45, 0x12, 0x2F, 0x17, 0x2B, 0x44, 0x6F, 0x6E, 0x56, 0x9,0x5F, 0x45, 0x47, 0x73, 0x26, 0x0A, 0x0D, 0x13, 0x17, 0x48, 0x42,0x1, 0x40, 0x4D, 0x0C, 0x2, 0x69]
flag=""
L=len(enc)-1
for i in range(len(enc)):
if i==0:
enc[L-i]= enc[L-i]^4
enc[L-i-1] = enc[L-i-1]^enc[L-i]
flag+=chr(enc[L-i])
print("flag{"+flag[::-1]+"}")
flag{R_y0u_H0t_3n0ugH_t0_1gn1t3@flare-on.com}
37.[MRCTF2020]Xor
得到的 flag 请包上 flag{} 提交。
感谢天璇战队供题。
天璇战队平台:http://ctf.merak.codes/。
IDA打开,搜字符串,找到flag字样,题目是xor,所以肯定需要异或,但是F5不了…
其中此函数有个判断
正好之前框起来的长度就是27,而且判读过之后也确实需要用到
inc是自增,那就可以直接写脚本了
enc = [77, 83, 65, 87, 66, 126, 70, 88, 90, 58, 74, 58, 96, 116, 81, 74, 34, 78, 64, 32, 98, 112, 100, 100, 125, 56, 103]
flag = ""
for i in range(len(enc)):
flag += chr(enc[i]^i)
print(flag)
flag{@_R3@1ly_E2_R3verse!}
38.[MRCTF2020]hello_world_go
得到的 flag 请包上 flag{} 提交。
感谢天璇战队供题。
天璇战队平台:http://ctf.merak.codes/
未加壳的ELF,IDA64打开
搜索字符串发现一串像base64的字符串,尝试解码,发现不行。
搜索flag,发现有很多flag字样,但是在里面呈现的是一列一列的,觉得有点难看,决定用winhex查看,然后
尝试提交,过了…
flag{hello_world_gogogo}