[FlareOn4]IgniteMe
恶灵的题目传送门
此题无需脱壳
查看主函数
BOOL WINAPI ReadFile(
__in HANDLE hFile, // 文件句柄
__out LPVOID lpBuffer, // 接收数据用的 buffer
__in DWORD nNumberOfBytesToRead, // 要读取的字节数
__out LPDWORD lpNumberOfBytesRead, // 实际读取到的字节数
__in LPOVERLAPPED lpOverlapped // OVERLAPPED 结构,一般设定为 NULL
);
这里的writeFile其实就是输出字符串到屏幕上。
查看sub_4010F0()
这个函数主要功能就是将ASCII码为10(\n)和13(\r)给剔除了。
关键函数sub_401050()
进入函数sub_401000(),先尝试获得v4的值
方法一 查看函数用法
嘿嘿嘿,这不打开我的汇编金手指。
即将0x80070000向左循环移动4位,即× 24(相当于十六进制向左移动一位),得到0x00700008。
然后再右移一位得到0x00700004。还要注意到return(int16),即取十六进制的后两个字节。
故v4=0x0004
方法二 od调试
od动态调试,显示ax=0x0004(最近学了一点汇编,也是能看懂简单的汇编指令了)
解密
403000数组已经告知
简单的加密
按照逻辑编写脚本
num=[13,38,73,69,42,23,120,68,43,108,93,94,69,18,47,23,43,68,111,110,86,9,95,69,71,115,38,10,13,19,23,72,66,1,64,77,12,2,105,0]
flag=""
v4=4
put=0
for i in range(39,-1,-1):
put=v4^num[i]
flag+=chr(put)
v4=put
result=flag[::-1]
result='flag{'+result
result+='}'
print(result)
得到flag
评论区