请求老鸟指点。。。。。
文章里的好多问号
和空注释的地方(不是所有。。)
都是不懂。。不明白的地方。。。
希望老鸟。。。达人们指点。。。。
004417C6 55 push ebp
004417C7 68 60184400 push 00441860
004417CC 64:FF30 push dword ptr fs:[eax]
004417CF 64:8920 mov dword ptr fs:[eax], esp
004417D2 8D55 FC lea edx, dword ptr [ebp-4]
004417D5 8B83 C8020000 mov eax, dword ptr [ebx+2C8]
004417DB E8 C419FEFF call 004231A4 ; 放入假注册码
004417E0 8B45 FC mov eax, dword ptr [ebp-4]
004417E3 50 push eax ; 压入EAX
004417E4 8D55 F4 lea edx, dword ptr [ebp-C]
004417E7 8B83 C4020000 mov eax, dword ptr [ebx+2C4]
004417ED E8 B219FEFF call 004231A4
004417F2 8B45 F4 mov eax, dword ptr [ebp-C] ; 放入用户名
004417F5 8D55 F8 lea edx, dword ptr [ebp-8]
004417F8 E8 FBFEFFFF call 004416F8 ; 这里是算法。。。F7进入
004417FD 8B55 F8 mov edx, dword ptr [ebp-8] ; 这里出现了注册码
00441800 58 pop eax ; 弹出注册码
00441801 E8 3E23FCFF call 00403B44 ; 关键CALL(跟进去吧。。)
00441806 75 1A jnz short 00441822 ; 爆破地点
00441808 6A 40 push 40
0044180A B9 6C184400 mov ecx, 0044186C ; ASCII "U made it"
0044180F BA 78184400 mov edx, 00441878 ; ASCII "Right Code"
00441814 A1 302C4400 mov eax, dword ptr [442C30]
00441819 8B00 mov eax, dword ptr [eax]
0044181B E8 D4D6FFFF call 0043EEF4
00441820 EB 18 jmp short 0044183A
00441822 6A 10 push 10
00441824 B9 84184400 mov ecx, 00441884 ; ASCII "Error"
00441829 BA 8C184400 mov edx, 0044188C ; ASCII "Wrong Code"
0044182E A1 302C4400 mov eax, dword ptr [442C30]
00441833 8B00 mov eax, dword ptr [eax]
00441835 E8 BAD6FFFF call 0043EEF4
0044183A 33C0 xor eax, eax
0044183C 5A pop edx
0044183D 59 pop ecx
0044183E 59 pop ecx
进入关键CALL(call 00403B44)
004416F8 53 push ebx
004416F9 56 push esi
004416FA 57 push edi
004416FB 83C4 DC add esp, -24
004416FE 891424 mov dword ptr [esp], edx
00441701 8BF8 mov edi, eax ; 将用户名放入EDI中
00441703 BB 05033949 mov ebx, 49390305 ; 某个固定值放入EBX
00441708 BE 20126348 mov esi, 48631220 ; 某个固定值放入ESI
0044170D 8BC7 mov eax, edi ; 怎么有放回去了??? 不明白??在搞什么?
0044170F E8 2023FCFF call 00403A34 ; 比较什么???去看看??
00441714 85C0 test eax, eax ; 出来了。。。上面比较用户名是否为空
00441716 7E 2E jle short 00441746 ; 若小于等于则跳
00441718 BA 01000000 mov edx, 1 ; 将1放入EDX中
0044171D 33C9 xor ecx, ecx
0044171F 8A4C17 FF mov cl, byte ptr [edi+edx-1] ; 取用户名的第一位
00441723 33D9 xor ebx, ecx ; 异或它们
00441725 33F3 xor esi, ebx ; 异或它们
00441727 F6C3 01 test bl, 1 ; EBX的低八位和1比较?
0044172A 74 0F je short 0044173B ; 相等~~跳了
0044172C D1FB sar ebx, 1
0044172E 79 03 jns short 00441733
00441730 83D3 00 adc ebx, 0
00441733 81F3 11032001 xor ebx, 1200311
00441739 EB 07 jmp short 00441742
0044173B D1FB sar ebx, 1
0044173D 79 03 jns short 00441742
0044173F 83D3 00 adc ebx, 0
00441742 42 inc edx
00441743 48 dec eax
00441744 ^ 75 D7 jnz short 0044171D ; 回跳了。。。。(算法?)
00441746 8B0424 mov eax, dword ptr [esp] ; 上面逐位取用户名。。。看不懂算法。。F4直接到这里
00441749 50 push eax
0044174A 8BC3 mov eax, ebx
0044174C 25 FFFF0000 and eax, 0FFFF
00441751 894424 08 mov dword ptr [esp+8], eax
00441755 C64424 0C 00 mov byte ptr [esp+C], 0
0044175A C1EB 10 shr ebx, 10
0044175D 895C24 10 mov dword ptr [esp+10], ebx ; 出现用户名
00441761 C64424 14 00 mov byte ptr [esp+14], 0
00441766 8BC6 mov eax, esi
00441768 25 FFFF0000 and eax, 0FFFF
0044176D 894424 18 mov dword ptr [esp+18], eax
00441771 C64424 1C 00 mov byte ptr [esp+1C], 0
00441776 C1EE 10 shr esi, 10
00441779 897424 20 mov dword ptr [esp+20], esi
0044177D C64424 24 00 mov byte ptr [esp+24], 0
00441782 8D5424 08 lea edx, dword ptr [esp+8]
00441786 B9 03000000 mov ecx, 3
0044178B B8 A4174400 mov eax, 004417A4 ; ASCII "%.4x-%.4x-%.4x-%.4x"
00441790 E8 6F68FCFF call 00408004 ; 这里进去看过了。。。是出现注册码的地方。根本就看不懂(略过)
00441795 83C4 24 add esp, 24
00441798 5F pop edi ; 堆栈里开始出现真码
00441799 5E pop esi
0044179A 5B pop ebx
0044179B C3 retn
文章里的好多问号
和空注释的地方(不是所有。。)
都是不懂。。不明白的地方。。。
希望老鸟。。。达人们指点。。。。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课