中华通讯录 V5.8.111简单算法分析-菜鸟篇

【文章作者】: tzl 
【作者邮箱】: 无
【软件名称】: 中华通讯录 V5.8.111
【软件大小】: 3169 KB
【下载地址】: http://www.skycn.com/soft/12563.html#download
【加壳方式】: UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
【保护方式】: 注册码
【编写语言】: Borland Delphi 4.0 - 5.0
【使用工具】: OD PEID
【操作平台】: XP SP2
【软件介绍】:
是一款实用的通讯录软件,软件界面采用WINXP风格,功能完善,最多能够容纳十万条通讯记录,新版本加强了搜索功能,用户不但可以通过姓名搜索,还可以按邮箱,手机号码,妮称,等项进行查询,功能非常强大。新版本增加了企业通讯录管理信息,用户可以对企业员工进行详细管理,方便易用。增加了新的皮肤,修正了换肤功能的BUG.启动时需要输入密码,使其它人不能看到你的通讯资料,让你的信息更安全。查询栏让你很快找到你的联系人。支持增加分类,添加,删除信息。

很简单的算法,适合我这只小菜鸟,这里与大家分享,菜鸟共同进步。  

一、查壳UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo,程序只是用UPX工具压缩了一下,只要解压缩即可。

二、根据字符串相关信息,我们可以在这里下断开始分析,试练码:123456789

00567A41          8BD8            mov ebx,eax
00567A43          8BC3            mov eax,ebx
00567A45          E8 12CCFFFF     call 中华通讯.0056465C           ; 算法分析call
00567A4A          84C0            test al,al
00567A4C          74 09           je short 中华通讯.00567A57       ; 标志位判断点
00567A4E          8BC3            mov eax,ebx
00567A50          E8 4FC9FFFF     call 中华通讯.005643A4
00567A55          5B              pop ebx
00567A56          C3              retn
00567A57          6A 20           push 20                          ; 注册码正确则跳转到此
00567A59          B9 747A5600     mov ecx,中华通讯.00567A74
00567A5E          BA 807A5600     mov edx,中华通讯.00567A80
00567A63          A1 CC715700     mov eax,dword ptr ds:[5771CC>
00567A68          8B00            mov eax,dword ptr ds:[eax]
00567A6A          E8 1DF2EEFF     call 中华通讯.00456C8C
00567A6F          5B              pop ebx
00567A70          C3              retn
*************************************************************************************

跟进算法call 中华通讯.0056465C,来到这里:

0056466D          55              push ebp
0056466E          68 38475600     push 中华通讯.00564738
00564673          64:FF30         push dword ptr fs:[eax]
00564676          64:8920         mov dword ptr fs:[eax],esp
00564679          33C0            xor eax,eax                        ; eax清零
0056467B          8945 F4         mov dword ptr ss:[ebp-C],eax
0056467E          8D55 F8         lea edx,dword ptr ss:[ebp-8]
00564681          8B45 FC         mov eax,dword ptr ss:[ebp-4]
00564684          8B80 140A0000   mov eax,dword ptr ds:[eax+A14]
0056468A          E8 E934EDFF     call 中华通讯.00437B78
0056468F          8B45 F8         mov eax,dword ptr ss:[ebp-8]       ; 出现机器码,即ebp-8=机器码“4CF0-4CBA”,送eax中
00564692          E8 99FBE9FF     call 中华通讯.00404230                 ; eax=4CF0-4CBA
00564697          8BD8            mov ebx,eax                        ; eax=机器码位数9
00564699          85DB            test ebx,ebx
0056469B          7E 2E           jle short 中华通讯.005646CB
0056469D          BE 01000000     mov esi,1                          ; esi置1,进入循环
005646A2          8D45 F0         lea eax,dword ptr ss:[ebp-10]      ; eax=9,即机器码位数
005646A5          50              push eax
005646A6          B9 01000000     mov ecx,1                          ; ecx置1
005646AB          8BD6            mov edx,esi
005646AD          8B45 F8         mov eax,dword ptr ss:[ebp-8]       ; ebp-8=机器码“4CF0-4CBA”,送eax
005646B0          E8 83FDE9FF     call 中华通讯.00404438                 ; eax=4CF0-4CBA
005646B5          8B45 F0         mov eax,dword ptr ss:[ebp-10]
005646B8          E8 37FDE9FF     call 中华通讯.004043F4
005646BD          8A00            mov al,byte ptr ds:[eax]           ; 机器码“4CF0-4CBA”逐位ascii码送al
005646BF          25 FF000000     and eax,0FF                        ; eax与0FF进行add运算
005646C4          0145 F4         add dword ptr ss:[ebp-C],eax       ; eax(机器码逐位的ascii码)+ss:[ebp-C]
005646C7          46              inc esi                            ; esi+1
005646C8          4B              dec ebx                            ; ebx-1
005646C9        ^ 75 D7           jnz short 中华通讯.005646A2            ; 循环计算,直到取完机器码,最后的ss:[ebp-C]=214
005646CB          8D55 EC         lea edx,dword ptr ss:[ebp-14]
005646CE          8B45 FC         mov eax,dword ptr ss:[ebp-4]
005646D1          8B80 340A0000   mov eax,dword ptr ds:[eax+A34]
005646D7          E8 9C34EDFF     call 中华通讯.00437B78
005646DC          8B45 EC         mov eax,dword ptr ss:[ebp-14]      ; 试练码=ebp-14送eax
005646DF          E8 645BEAFF     call 中华通讯.0040A248                 ; eax=试练码“123456789”
005646E4          8B55 F4         mov edx,dword ptr ss:[ebp-C]       ; ss:[ebp-C]=214,送edx
005646E7          81C2 FC7E1200   add edx,127EFC                     ; edx+127EFC=128110
005646ED          81C2 9FE46400   add edx,中华通讯.0064E49F              ; edx+64E49F=007765AF
005646F3          3BC2            cmp eax,edx                        ; eax内为试练码“123456789”,edx=007765AF,转成十进制即为真码“7824815”
005646F5          75 19           jnz short 中华通讯.00564710        ; 比较是否相等,相等则注册成功,爆破点
005646F7          B3 01           mov bl,1
005646F9          B8 E0B65700     mov eax,中华通讯.0057B6E0
005646FE          8B55 F8         mov edx,dword ptr ss:[ebp-8]
00564701          E8 FEF8E9FF     call 中华通讯.00404004
00564706          8B45 F4         mov eax,dword ptr ss:[ebp-C]
00564709          A3 E4B65700     mov dword ptr ds:[57B6E4],eax
0056470E          EB 02           jmp short 中华通讯.00564712
00564710          33DB            xor ebx,ebx
00564712          33C0            xor eax,eax
00564714          5A              pop edx
00564715          59              pop ecx
00564716          59              pop ecx
00564717          64:8910         mov dword ptr fs:[eax],edx
0056471A          68 3F475600     push 中华通讯.0056473F
0056471F          8D45 EC         lea eax,dword ptr ss:[ebp-14]
00564722          E8 89F8E9FF     call 中华通讯.00403FB0
00564727          8D45 F0         lea eax,dword ptr ss:[ebp-10]
0056472A          E8 81F8E9FF     call 中华通讯.00403FB0
0056472F          8D45 F8         lea eax,dword ptr ss:[ebp-8]
00564732          E8 79F8E9FF     call 中华通讯.00403FB0
00564737          C3              retn
*************************************************************************************
算法总结:

软件算法非常简单,主要思路如下:

将机器码逐位的ascii码进行累加,得到的结果与127EFC相加,然后再与64E49F相加,结果转成十进制即为注册码。我这里的机器码为4CF0-4CBA,注册码为7824815

特别说明: 本文仅是一些破解的心得和思路,完全是个人对程序的研究,无其他目的。