【文章标题】: 【原创】迅捷智能答题器V1.0的注册算法简单分析
【文章作者】: talaqi
【软件名称】: 迅捷智能答题器V1.0
【软件大小】: 1.25M
【下载地址】: http://www.skycn.com/soft/8459.html
【加壳方式】: 无壳
【保护方式】: 注册码
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: Peid、OD
【操作平台】: WinXP
【软件介绍】: 迅捷智能答题器是一套专为在《开心辞典》网上选拔的答题器。
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
004D1E73 |. 55 push ebp ; 此处下断,F8
004D1E74 |. 68 6C1F4D00 push XjDt.004D1F6C
004D1E79 |. 64:FF30 push dword ptr fs:[eax]
004D1E7C |. 64:8920 mov dword ptr fs:[eax],esp
004D1E7F |. 8D55 FC lea edx,dword ptr ss:[ebp-4]
004D1E82 |. A1 0CA24D00 mov eax,dword ptr ds:[4DA20C]
004D1E87 |. 8B00 mov eax,dword ptr ds:[eax]
004D1E89 |. 8B80 F0030000 mov eax,dword ptr ds:[eax+3F0]
004D1E8F |. E8 F4470000 call XjDt.004D6688 ; 跟进
004D1E94 |. 8B45 FC mov eax,dword ptr ss:[ebp-4] ; 取机器码
004D1E97 |. 50 push eax
004D1E98 |. 8D55 F4 lea edx,dword ptr ss:[ebp-C]
004D1E9B |. 8B83 00030000 mov eax,dword ptr ds:[ebx+300]
004D1EA1 |. E8 EEDAF6FF call XjDt.0043F994
004D1EA6 |. 8B45 F4 mov eax,dword ptr ss:[ebp-C] ; 取伪码
004D1EA9 |. 8D55 F8 lea edx,dword ptr ss:[ebp-8]
004D1EAC |. E8 4B6EF3FF call XjDt.00408CFC
004D1EB1 |. 8B55 F8 mov edx,dword ptr ss:[ebp-8]
004D1EB4 |. 58 pop eax
004D1EB5 |. E8 462BF3FF call XjDt.00404A00 ; 真假码比较
004D1EBA |. 75 73 jnz short XjDt.004D1F2F
004D1EBC |. 8D55 EC lea edx,dword ptr ss:[ebp-14]
004D1EBF |. 8B83 00030000 mov eax,dword ptr ds:[ebx+300]
004D1EC5 |. E8 CADAF6FF call XjDt.0043F994
004D1ECA |. 8B45 EC mov eax,dword ptr ss:[ebp-14]
004D1ECD |. 8D55 F0 lea edx,dword ptr ss:[ebp-10]
004D1ED0 |. E8 276EF3FF call XjDt.00408CFC
004D1ED5 |. 8B45 F0 mov eax,dword ptr ss:[ebp-10]
004D1ED8 |. E8 87480000 call XjDt.004D6764
004D1EDD |. E8 76450000 call XjDt.004D6458
004D1EE2 |. A1 0CA24D00 mov eax,dword ptr ds:[4DA20C]
004D1EE7 |. 8B00 mov eax,dword ptr ds:[eax]
004D1EE9 |. 80B8 30040000 0>cmp byte ptr ds:[eax+430],0
004D1EF0 |. 74 31 je short XjDt.004D1F23
004D1EF2 |. B8 801F4D00 mov eax,XjDt.004D1F80 ; 注册成功
004D1EF7 |. E8 A06FF6FF call XjDt.00438E9C
004D1EFC |. A1 0CA24D00 mov eax,dword ptr ds:[4DA20C]
004D1F01 |. 8B00 mov eax,dword ptr ds:[eax]
004D1F03 |. 8B80 48030000 mov eax,dword ptr ds:[eax+348]
004D1F09 |. 33D2 xor edx,edx
004D1F0B |. E8 A4D9F6FF call XjDt.0043F8B4
004D1F10 |. A1 0CA24D00 mov eax,dword ptr ds:[4DA20C]
004D1F15 |. 8B00 mov eax,dword ptr ds:[eax]
004D1F17 |. BA 941F4D00 mov edx,XjDt.004D1F94
004D1F1C |. E8 A3DAF6FF call XjDt.0043F9C4
004D1F21 |. EB 16 jmp short XjDt.004D1F39
004D1F23 |> B8 AC1F4D00 mov eax,XjDt.004D1FAC ; 注册失败
004D1F28 |. E8 6F6FF6FF call XjDt.00438E9C
004D1F2D |. EB 0A jmp short XjDt.004D1F39
004D1F2F |> B8 C01F4D00 mov eax,XjDt.004D1FC0 ; 注册码错误
004D1F34 |. E8 636FF6FF call XjDt.00438E9C
004D1F39 |> 33C0 xor eax,eax
004D1F3B |. 5A pop edx
004D1F3C |. 59 pop ecx
004D1F3D |. 59 pop ecx
004D1F3E |. 64:8910 mov dword ptr fs:[eax],edx
004D1F41 |. 68 731F4D00 push XjDt.004D1F73
004D1F46 |> 8D45 EC lea eax,dword ptr ss:[ebp-14]
004D1F49 |. E8 B626F3FF call XjDt.00404604
004D1F4E |. 8D45 F0 lea eax,dword ptr ss:[ebp-10]
004D1F51 |. E8 AE26F3FF call XjDt.00404604
004D1F56 |. 8D45 F4 lea eax,dword ptr ss:[ebp-C]
004D1F59 |. E8 A626F3FF call XjDt.00404604
004D1F5E |. 8D45 F8 lea eax,dword ptr ss:[ebp-8]
004D1F61 |. BA 02000000 mov edx,2
004D1F66 |. E8 BD26F3FF call XjDt.00404628
004D1F6B \. C3 retn
跟进,004D1E8F |. E8 F4470000 call XjDt.004D6688,来到:
004D6688 /$ 55 push ebp
004D6689 |. 8BEC mov ebp,esp
004D668B |. 33C9 xor ecx,ecx
004D668D |. 51 push ecx
004D668E |. 51 push ecx
004D668F |. 51 push ecx
004D6690 |. 51 push ecx
004D6691 |. 51 push ecx
004D6692 |. 51 push ecx
004D6693 |. 53 push ebx
004D6694 |. 56 push esi
004D6695 |. 57 push edi
004D6696 |. 8BFA mov edi,edx
004D6698 |. 8945 FC mov dword ptr ss:[ebp-4],eax
004D669B |. 8B45 FC mov eax,dword ptr ss:[ebp-4]
004D669E |. E8 01E4F2FF call XjDt.00404AA4
004D66A3 |. 33C0 xor eax,eax
004D66A5 |. 55 push ebp
004D66A6 |. 68 54674D00 push XjDt.004D6754
004D66AB |. 64:FF30 push dword ptr fs:[eax]
004D66AE |. 64:8920 mov dword ptr fs:[eax],esp
004D66B1 |. 8D55 F0 lea edx,dword ptr ss:[ebp-10]
004D66B4 |. 8B45 FC mov eax,dword ptr ss:[ebp-4]
004D66B7 |. E8 4026F3FF call XjDt.00408CFC
004D66BC |. 8B45 F0 mov eax,dword ptr ss:[ebp-10]
004D66BF |. E8 F8E1F2FF call XjDt.004048BC
004D66C4 |. 85C0 test eax,eax ; 测试位数
004D66C6 |. 75 09 jnz short XjDt.004D66D1
004D66C8 |. 8BC7 mov eax,edi
004D66CA |. E8 35DFF2FF call XjDt.00404604
004D66CF |. EB 60 jmp short XjDt.004D6731
004D66D1 |> 8BF0 mov esi,eax
004D66D3 |. 85F6 test esi,esi
004D66D5 |. 7E 32 jle short XjDt.004D6709
004D66D7 |. BB 01000000 mov ebx,1
004D66DC |> 8B45 FC /mov eax,dword ptr ss:[ebp-4] ; 机器码送EAX
004D66DF |. 0FB64418 FF |movzx eax,byte ptr ds:[eax+ebx-1] ; 依次取机器码
004D66E4 |. 83E8 27 |sub eax,27 ; 减27
004D66E7 |. 8D145B |lea edx,dword ptr ds:[ebx+ebx*2] ; EDX=EBX*3
004D66EA |. 03C2 |add eax,edx ; EAX=EAX+EDX
004D66EC |. 8945 F8 |mov dword ptr ss:[ebp-8],eax
004D66EF |. 8D55 EC |lea edx,dword ptr ss:[ebp-14]
004D66F2 |. 8B45 F8 |mov eax,dword ptr ss:[ebp-8]
004D66F5 |. E8 6E29F3FF |call XjDt.00409068 ; 跟进
004D66FA |. 8B55 EC |mov edx,dword ptr ss:[ebp-14]
004D66FD |. 8D45 F4 |lea eax,dword ptr ss:[ebp-C]
004D6700 |. E8 BFE1F2FF |call XjDt.004048C4
004D6705 |. 43 |inc ebx
004D6706 |. 4E |dec esi
004D6707 |.^ 75 D3 \jnz short XjDt.004D66DC ; 循环,计算密码表“545221295554506371734746”
004D6709 |> BB 01000000 mov ebx,1
004D670E |> 8D45 E8 /lea eax,dword ptr ss:[ebp-18]
004D6711 |. 8BD3 |mov edx,ebx ; EBX送EDX
004D6713 |. 03D2 |add edx,edx ; 2*EDX
004D6715 |. 8B4D F4 |mov ecx,dword ptr ss:[ebp-C] ; 密码表送ECX
004D6718 |. 8A5411 FF |mov dl,byte ptr ds:[ecx+edx-1] ; 对应表中的值
004D671C |. E8 C3E0F2FF |call XjDt.004047E4
004D6721 |. 8B55 E8 |mov edx,dword ptr ss:[ebp-18] ; 相应值送EDX
004D6724 |. 8BC7 |mov eax,edi
004D6726 |. E8 99E1F2FF |call XjDt.004048C4
004D672B |. 43 |inc ebx
004D672C |. 83FB 09 |cmp ebx,9
004D672F |.^ 75 DD \jnz short XjDt.004D670E ; 循环
004D6731 |> 33C0 xor eax,eax
004D6733 |. 5A pop edx
004D6734 |. 59 pop ecx
004D6735 |. 59 pop ecx
004D6736 |. 64:8910 mov dword ptr fs:[eax],edx
004D6739 |. 68 5B674D00 push XjDt.004D675B
004D673E |> 8D45 E8 lea eax,dword ptr ss:[ebp-18]
004D6741 |. BA 04000000 mov edx,4
004D6746 |. E8 DDDEF2FF call XjDt.00404628
004D674B |. 8D45 FC lea eax,dword ptr ss:[ebp-4]
004D674E |. E8 B1DEF2FF call XjDt.00404604
004D6753 \. C3 retn
004D6754 .^ E9 F3D7F2FF jmp XjDt.00403F4C
004D6759 .^ EB E3 jmp short XjDt.004D673E
004D675B . 5F pop edi
004D675C . 5E pop esi
004D675D . 5B pop ebx
004D675E . 8BE5 mov esp,ebp
004D6760 . 5D pop ebp
004D6761 . C3 retn
跟进,004D66F5 |. E8 6E29F3FF |call XjDt.00409068,来到:
00409068 /$ 83C4 F8 add esp,-8
0040906B |. 6A 00 push 0 ; /Arg1 00000000
0040906D |. 894424 04 mov dword ptr ss:[esp+4],eax ; |
00409071 |. C64424 08 00 mov byte ptr ss:[esp+8],0 ; |
00409076 |. 8D4C24 04 lea ecx,dword ptr ss:[esp+4] ; |
0040907A |. 8BC2 mov eax,edx ; |
0040907C |. BA 94904000 mov edx,XjDt.00409094 ; |ASCII "%d"
00409081 |. E8 2E0B0000 call XjDt.00409BB4 ; \XjDt.00409BB4
00409086 |. 59 pop ecx
00409087 |. 5A pop edx
00409088 \. C3 retn
此CALL用于转换成带符号的10进制整数形式(~~真够拗口的~――!)
--------------------------------------------------------------------------------
【经验总结】
用机器码计算出“密码表”,再对应表中的值得出真正的注册码!
本人还是个菜鸟,这是我的第一篇破文,请多多鼓励,有不妥之处还望指正,为谢!
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年02月23日 11:59:02
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课