破文标题】创奇会计档案管理系统 3.0注册算法
【破文作者】XXNB
【作者邮箱】支持PYG
【作者主页】http://free.ys168.com/?binbinbin7456
【破解工具】OD
【破解平台】xpsp2
【软件名称】创奇会计档案管理系统 2.0
【软件大小】2852KB
【原版下载】http://www.newhua.com/soft/49987.htm
【保护方式】名+码
【软件简介】 该系统根据国家会计档案整理标准设计通用性强、数据库灵活的备份与恢复使你的工作得到保证、数据EXCEL、WORD的导出使系
统具有更强扩展性。
【破解声明】向大侠们学习!!!只为学习!请尊重作者的劳动成功!
------------------------------------------------------------------------
【破解过程】
这两天学了下脱壳。
结果给我找到了个国产的用Aspr标准加壳的软件。verA0.15查到的是:Version: ASProtect 2.11 SKE build 03.13 Release [1]
我照大侠们的补区段大法顺利脱壳成功,然后发现算法还是比较简单,所以。放出来了。
1、下断函数:bp MessageBoxA。然后查看堆栈信息。我们能够返回到下面的关键代码处!!
006266C4 /. 55 push ebp
006266C5 |. 8BEC mov ebp, esp
006266C7 |. 33C9 xor ecx, ecx
006266C9 |. 51 push ecx
006266CA |. 51 push ecx
006266CB |. 51 push ecx
006266CC |. 51 push ecx
006266CD |. 51 push ecx
006266CE |. 51 push ecx
006266CF |. 53 push ebx
006266D0 |. 56 push esi
006266D1 |. 8BD8 mov ebx, eax
006266D3 |. 33C0 xor eax, eax
006266D5 |. 55 push ebp
006266D6 |. 68 53686200 push 00626853
006266DB |. 64:FF30 push dword ptr fs:[eax]
006266DE |. 64:8920 mov dword ptr fs:[eax], esp
006266E1 |. 8D55 F4 lea edx, dword ptr [ebp-C]
006266E4 |. 8B83 E0020000 mov eax, dword ptr [ebx+2E0]
006266EA |. E8 B14FE5FF call 0047B6A0
006266EF |. 8B45 F4 mov eax, dword ptr [ebp-C] ; 用户名
006266F2 |. 8D55 FC lea edx, dword ptr [ebp-4]
006266F5 |. E8 D636DEFF call 00409DD0
006266FA |. 8D55 F0 lea edx, dword ptr [ebp-10]
006266FD |. 8B83 E4020000 mov eax, dword ptr [ebx+2E4]
00626703 |. E8 984FE5FF call 0047B6A0
00626708 |. 8B45 F0 mov eax, dword ptr [ebp-10] ; 假码
0062670B |. 8D55 F8 lea edx, dword ptr [ebp-8]
0062670E |. E8 BD36DEFF call 00409DD0
00626713 |. 837D FC 00 cmp dword ptr [ebp-4], 0 ; 是否为空
00626717 |. 74 06 je short 0062671F
00626719 |. 837D F8 00 cmp dword ptr [ebp-8], 0 ; 是否为空
0062671D |. 75 16 jnz short 00626735
0062671F |> A1 8CD76400 mov eax, dword ptr [64D78C]
00626724 |. 8B00 mov eax, dword ptr [eax]
00626726 |. BA 68686200 mov edx, 00626868
0062672B |. E8 5041FBFF call 005DA880
00626730 |. E9 03010000 jmp 00626838
00626735 |> 8B45 FC mov eax, dword ptr [ebp-4] ; 用户名
00626738 |. E8 CBD9DDFF call 00404108 ; 计算位数
0062673D |. 83F8 0A cmp eax, 0A ; 要大于等于0A
00626740 |. 7D 16 jge short 00626758
00626742 |. A1 8CD76400 mov eax, dword ptr [64D78C]
00626747 |. 8B00 mov eax, dword ptr [eax]
00626749 |. BA 88686200 mov edx, 00626888
0062674E |. E8 2D41FBFF call 005DA880
00626753 |. E9 E0000000 jmp 00626838
00626758 |> 8D55 EC lea edx, dword ptr [ebp-14]
0062675B |. 8B45 FC mov eax, dword ptr [ebp-4] ; 用户名
0062675E |. E8 51F7FFFF call 00625EB4 ; 算法call,跟进《《《《《《《《《《《《《《
00626763 |. 8B45 EC mov eax, dword ptr [ebp-14] ; 真码
00626766 |. 8B55 F8 mov edx, dword ptr [ebp-8] ; 假码
00626769 |. E8 AADADDFF call 00404218 ; 比较函数
0062676E |. 74 16 je short 00626786 ; 关键跳
00626770 |. A1 8CD76400 mov eax, dword ptr [64D78C]
00626775 |. 8B00 mov eax, dword ptr [eax]
00626777 |. BA AC686200 mov edx, 006268AC
0062677C |. E8 FF40FBFF call 005DA880
00626781 |. E9 B2000000 jmp 00626838
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2、跟进上面的算法call 00625EB4 得到:
00625EB4 /$ 55 push ebp
00625EB5 |. 8BEC mov ebp, esp
00625EB7 |. 81C4 ECFDFFFF add esp, -214
00625EBD |. 53 push ebx
00625EBE |. 56 push esi
00625EBF |. 57 push edi
00625EC0 |. 33C9 xor ecx, ecx
00625EC2 |. 898D ECFDFFFF mov dword ptr [ebp-214], ecx
00625EC8 |. 894D F0 mov dword ptr [ebp-10], ecx
00625ECB |. 894D F4 mov dword ptr [ebp-C], ecx
00625ECE |. 8955 F8 mov dword ptr [ebp-8], edx
00625ED1 |. 8945 FC mov dword ptr [ebp-4], eax
00625ED4 |. 8B45 FC mov eax, dword ptr [ebp-4]
00625ED7 |. E8 E0E3DDFF call 004042BC
00625EDC |. 33C0 xor eax, eax
00625EDE |. 55 push ebp
00625EDF |. 68 B95F6200 push 00625FB9
00625EE4 |. 64:FF30 push dword ptr fs:[eax]
00625EE7 |. 64:8920 mov dword ptr fs:[eax], esp
00625EEA |. 8D45 F4 lea eax, dword ptr [ebp-C]
00625EED |. E8 96DFDDFF call 00403E88
00625EF2 |. 8B45 FC mov eax, dword ptr [ebp-4]
00625EF5 |. E8 0EE2DDFF call 00404108
00625EFA |. 8BF8 mov edi, eax
00625EFC |. 85FF test edi, edi
00625EFE |. 7E 48 jle short 00625F48
00625F00 |. BB 01000000 mov ebx, 1 ; 计数器
00625F05 |> 8B45 FC /mov eax, dword ptr [ebp-4] ; 用户名到eax
00625F08 |. 0FB67418 FF |movzx esi, byte ptr [eax+ebx-1] ; 逐个去用户名
00625F0D |. B8 D05F6200 |mov eax, 00625FD0 ; 固定字符串 (ASCII "dd23439olklj+jik32fg443243
\o2u8o@wgbv825ytryrl;5kgi\-klj`ashjs^df`afteyr65756tye7dg876s")
00625F12 |. 0FB64418 FF |movzx eax, byte ptr [eax+ebx-1] ; 逐个取固定字符串
00625F17 |. 33F0 |xor esi, eax ; 两个值异或
00625F19 |. 8D8D F0FEFFFF |lea ecx, dword ptr [ebp-110]
00625F1F |. BA 03000000 |mov edx, 3
00625F24 |. 8BC6 |mov eax, esi ; 异或结果到eax
00625F26 |. E8 01FFFFFF |call 00625E2C
00625F2B |. 8D95 F0FEFFFF |lea edx, dword ptr [ebp-110] ; 扩展成三位数,比如“6”->“006”;“15”->"015"
00625F31 |. 8D45 F0 |lea eax, dword ptr [ebp-10]
00625F34 |. E8 73E1DDFF |call 004040AC
00625F39 |. 8B55 F0 |mov edx, dword ptr [ebp-10]
00625F3C |. 8D45 F4 |lea eax, dword ptr [ebp-C]
00625F3F |. E8 CCE1DDFF |call 00404110
00625F44 |. 43 |inc ebx
00625F45 |. 4F |dec edi
00625F46 |.^ 75 BD \jnz short 00625F05
00625F48 |> 8D95 ECFDFFFF lea edx, dword ptr [ebp-214]
00625F4E |. 8B45 F4 mov eax, dword ptr [ebp-C] ; 这里就是循环的结果了。
00625F51 |. E8 7A3EDEFF call 00409DD0
00625F56 |. 8B95 ECFDFFFF mov edx, dword ptr [ebp-214]
00625F5C |. 8D85 F0FDFFFF lea eax, dword ptr [ebp-210]
00625F62 |. B9 FF000000 mov ecx, 0FF
00625F67 |. E8 78E1DDFF call 004040E4
00625F6C |. 8D85 F0FDFFFF lea eax, dword ptr [ebp-210]
00625F72 |. 8D95 F0FEFFFF lea edx, dword ptr [ebp-110]
00625F78 |. E8 07FEFFFF call 00625D84
00625F7D |. 8D95 F0FEFFFF lea edx, dword ptr [ebp-110] ; 倒转字符串。这个就是真正的注册码了。
00625F83 |. 8B45 F8 mov eax, dword ptr [ebp-8]
00625F86 |. E8 21E1DDFF call 004040AC
00625F8B |. 33C0 xor eax, eax
00625F8D |. 5A pop edx
00625F8E |. 59 pop ecx
00625F8F |. 59 pop ecx
00625F90 |. 64:8910 mov dword ptr fs:[eax], edx
00625F93 |. 68 C05F6200 push 00625FC0
00625F98 |> 8D85 ECFDFFFF lea eax, dword ptr [ebp-214]
00625F9E |. E8 E5DEDDFF call 00403E88
【破解总结】
------------------------------------------------------------------------
这个软件的2.0和3.0的算法差别就只是变换了下固定字符串。作者真是太忙了,看来。
1、判断用户名位数一定要大于等于10位数。
2、逐个取用户名字符串的Ascii码值到esi,
相应的逐个取固定字符串“dd23439olklj+jik32fg443243\o2u8o@wgbv825ytryrl;5kgi\-klj`ashjs^df`afteyr65756tye7dg876s”到eax
然后esi 异或 eax。得到的值转成10进制。如果不足三位的用0填充。如:“6”->“006”。“15”->“015”
3、把得到的异或值填充后的字符串连接后,再倒过来,就是最后真正的注册码了。
用户名:binbinbinbin
注册码:400500900200600190390390180290310600
用户名:unpackunpack
注册码:100510010820100670880780280660010710 |