-
-
[原创] 看雪 ctf 攻防战 2018 - 追凶者也
-
发表于: 2018-12-12 21:36 3047
-
一个 32位的 exe
自己电脑跑不起来,上班摸鱼又不敢花时间搞个win7,只能静态看了..
ida 打开首先可以看到 WinMain 函数,进去看看
WinMain 调了一个 函数,sub_401280 ,这个函数 call 了一个 CheckEsp 函数, 看 WinMain 的 xref 貌似 还加了反调试,应该是检查内存镜像完整性什么什么的
还好这个程序比较小,函数不多,乱点一下就可以找到关键逻辑
先看 DialogFunc 调用了下面这个函数
主要是
分配内存
然后调用了一个函数
这函数就是跳到了 loc_40D180 这个地址,这里是再 rdata 段
ida p 一下就可以 f5 看了,开头像下面
写了一堆字符,最后可以看到 MessageBox , success 等, 这里应该是 loadlibary 然后调里面的 MessageBox 什么的吧,好像没有什么逻辑处理的东西???
乱点函数看到了一个可疑的逻辑
看到 wdsa 基本上就可以确定关键逻辑在这里了,这是要玩游戏??
注意到 rdata 是不可执行的,可能这里有什么SEH的处理逻辑在里面,木有时间,就先不管了,反正逻辑找到了
看看上面两个函数的 xref 什么的,wdsa 比较的应该就是 输入的每个byte
,输入的格式是
wXdXSXaXaX 类似这样,X是数字 0-9
每次获取两个byte 然后进入 sub_401380
最后要求byte_4147D0 这个表里面的内容是 1,2,...,8,0 这样,这个有9个项, 会不会是 3x3 的迷宫什么什么的
进 sub_401380 看看
一开头的逻辑,可以确定这是进行 一个 3x3 的表的操作了,这里是根据 我们输入的 wX 的 X 定位一个项, 后面 根据 wdsa switch 处理
wdsa 一般想到的是 方向键,还原一下 这个表初始化的时候
这不会是拼图游戏吧,类似这样?
看一下后面 switch 的处理逻辑也基本可以确定了,那么就是要把初始化的表变成
玩了一下,结果是
d6d8s7s4a1w2a5
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { sub_401280(); return 0; } .text:00401280 sub_401280 proc near ; CODE XREF: WinMain(x,x,x,x)+5↑p .text:00401280 ; DATA XREF: .data:off_414018↓o .text:00401280 push ebp .text:00401281 mov ebp, esp .text:00401283 push eax .text:00401284 mov eax, ebx .text:00401286 pop eax .text:00401287 cmp ebp, esp .text:00401289 call __RTC_CheckEsp .text:0040128E pop ebp .text:0040128F retn .text:0040128F sub_401280 endp
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)