-
-
[原创]第一题 WannaLOL分析
-
发表于: 2017-6-1 15:44 2571
-
通过查找字符串“Registration successful !”找到其所在的关键CALL004011F4,分析如下:
004011F4 $ 55 push ebp 004011F5 . 8BEC mov ebp,esp 004011F7 . 83EC 1C sub esp,0x1C 004011FA . 8D45 E4 lea eax,dword ptr ss:[ebp-0x1C] 004011FD . 6A 15 push 0x15 ; /Count = 15 (21.) 004011FF . 50 push eax ; |Buffer = 00000031 00401200 . 68 E9030000 push 0x3E9 ; |ControlID = 3E9 (1001.) 00401205 . FF35 38AA4000 push dword ptr ds:[0x40AA38] ; |hWnd = 000C01D6 (class='#32770',parent=000E04BC) 0040120B . FF15 A8704000 call dword ptr ds:[<&USER32.GetDlgItemTe>; \GetDlgItemTextA 00401211 . 68 F4010000 push 0x1F4 ; /Timeout = 500. ms 00401216 . FF15 00704000 call dword ptr ds:[<&KERNEL32.Sleep>] ; \Sleep 0040121C . 8D45 E4 lea eax,dword ptr ss:[ebp-0x1C] 0040121F . 50 push eax 00401220 . E8 DB000000 call WannaLOL.00401300 ; 取注册码位数 00401225 . 83F8 04 cmp eax,0x4 ; 必须为4位 00401228 . 59 pop ecx 00401229 . 0F85 A0000000 jnz WannaLOL.004012CF ; 非4位则失败 0040122F . 6A 30 push 0x30 00401231 . 59 pop ecx 00401232 . 384D E4 cmp byte ptr ss:[ebp-0x1C],cl ; 第1位:非0 00401235 . 0F84 94000000 je WannaLOL.004012CF 0040123B . 384D E5 cmp byte ptr ss:[ebp-0x1B],cl ; 第2位:非0 0040123E . 0F84 8B000000 je WannaLOL.004012CF 00401244 . 384D E6 cmp byte ptr ss:[ebp-0x1A],cl ; 第3位:非0 00401247 . 0F84 82000000 je WannaLOL.004012CF 0040124D . 384D E7 cmp byte ptr ss:[ebp-0x19],cl ; 第4位:非0 00401250 . 74 7D je short WannaLOL.004012CF 00401252 . 807D E4 31 cmp byte ptr ss:[ebp-0x1C],0x31 ; 第1位:1 00401256 . 75 77 jnz short WannaLOL.004012CF 00401258 . 807D E5 35 cmp byte ptr ss:[ebp-0x1B],0x35 ; 第2位:5 0040125C . 75 71 jnz short WannaLOL.004012CF 0040125E . 74 03 je short WannaLOL.00401263 00401260 . 75 01 jnz short WannaLOL.00401263 00401262 E8 db E8 00401263 > 66:B8 0800 mov ax,0x8 00401267 . 66:35 0700 xor ax,0x7 0040126B . 0FBE45 E6 movsx eax,byte ptr ss:[ebp-0x1A] ; 第3位->eax 0040126F . 2BC1 sub eax,ecx ; 第3位 -30 00401271 . 8945 FC mov dword ptr ss:[ebp-0x4],eax ; (第3位 -30) -> [0012f8b0] 00401274 . 0FBE45 E4 movsx eax,byte ptr ss:[ebp-0x1C] ; 第1位 -> eax 00401278 . DB45 FC fild dword ptr ss:[ebp-0x4] ; '第3位' - 30 -> 压入st--------- 0040127B . 2BC1 sub eax,ecx ; 第1位 -30 0040127D . 8945 FC mov dword ptr ss:[ebp-0x4],eax ; (第1位 -30) -> [0012f8b0] 00401280 . 0FBE45 E5 movsx eax,byte ptr ss:[ebp-0x1B] ; 第2位->eax 00401284 . DB45 FC fild dword ptr ss:[ebp-0x4] ; (第1位 -30) -> 压入st 1--------- 00401287 . 2BC1 sub eax,ecx 00401289 . 8945 FC mov dword ptr ss:[ebp-0x4],eax ; (第2位 -30) -> [0012f8b0] 5 0040128C . DA75 FC fidiv dword ptr ss:[ebp-0x4] ; st(0) <- st(0) /(第2位 -30) 即 st0=1/5=0.2---------- 0040128F . 0FBE45 E7 movsx eax,byte ptr ss:[ebp-0x19] ; 第4位->eax 00401293 . 2BC1 sub eax,ecx ; 第4位- 30 00401295 . 8945 FC mov dword ptr ss:[ebp-0x4],eax ; (第4位- 30) -> [0012f8b0] 00401298 . DEE9 fsubp st(1),st ; st0 = st1 - st0---------- 0040129A . DA4D FC fimul dword ptr ss:[ebp-0x4] ; st(0) <- st(0) * (第4位- 30)------------------- 0040129D . D80D 1C714000 fmul dword ptr ds:[0x40711C] ; st0 *= ds:[0x40711C] 16-------------------- 004012A3 . D95D FC fstp dword ptr ss:[ebp-0x4] ; st0 -> [0012f8b0] 004012A6 . 74 03 je short WannaLOL.004012AB 004012A8 . 75 01 jnz short WannaLOL.004012AB 004012AA E8 db E8 004012AB > 66:B8 0800 mov ax,0x8 004012AF . 66:35 0700 xor ax,0x7 004012B3 . D945 FC fld dword ptr ss:[ebp-0x4] ; st0 <- [0012f8b0] 004012B6 D81D 18714000 fcomp dword ptr ds:[0x407118] ; ds:[0x407118] 与 st0比较 384.00---------------- 004012BC . 6A 00 push 0x0 004012BE . 68 78804000 push WannaLOL.00408078 ; CrackMe 2017 CTF 004012C3 . DFE0 fstsw ax ; 保存状态字的值到AX AX<- MSW 004012C5 . 9E sahf ; 把AH内容装入标志寄存器 004012C6 . /75 0E jnz short WannaLOL.004012D6 ; 关健比较 004012C8 . 68 5C804000 push WannaLOL.0040805C ; Registration successful ! 004012CD . EB 0C jmp short WannaLOL.004012DB 004012CF > 6A 00 push 0x0 004012D1 . 68 48804000 push WannaLOL.00408048 ; CrackMe 2017 CTF v2 004012D6 > 68 40804000 push WannaLOL.00408040 ; error ! 004012DB > FF35 34AA4000 push dword ptr ds:[0x40AA34] ; |hOwner = 000E04BC ('PEDIY CTF 2017',class='myWindowClass') 004012E1 . FF15 AC704000 call dword ptr ds:[<&USER32.MessageBoxA>>; \MessageBoxA
解析如下:
注册码必须为4位,用B1、B2、B3、B4表示,须满足3个条件:
1、B1 = 0x31,即字符’1’
2、B2 = 0x35,即字符’5’
3、( ( ( B3 – 0x30 )- 0.2 ) * ( B4 -0x30 ) ) * 16 = 384.00
当B3=0x35时,可计算出B4=0x35,所以一组答案为1555
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
- [原创]第一题 WannaLOL分析 2572
- [求助]OD里面alt+F9与代码段的访问断点为什么断在程序领空下不同的地方 4065
- [翻译]<脱壳的艺术>前言 7215
- [原创]一个加密视频的爆破 9371
看原图
赞赏
雪币:
留言: