jacksunblack 发表于 2007-12-28 23:43:00

ASPACK+注册表重启验证(2007年12月24日)

【破文标题】ASPACK+注册表重启验证(2007年12月24日)
【破文作者】Jacksunblack
【作者邮箱】[email protected]
【破解工具】PeiD v0.94;Ollydbg;LordPE;Import REConstructor;DeDe
【破解平台】Windows XP sp2
【软件名称】008个人通讯录 2.67
【软件大小】1055KB
【原版下载】http://www.onlinedown.net/soft/39594.htm
【保护方式】ASPACK+注册表重启验证
【软件简介】008个人通讯录是一款功能实用,设计精巧,风格别致,界面优美的个人信息管理软件。可用于存储大量的个人通讯联系信息,并可执行分类管理。
【破解声明】本破解过程仅出于个人学习目的,如有不足敬请指教!
------------------------------------------------------------------------
【破解过程】首先,用PeiD查壳:inforcard主程序的壳为:ASPack 2.12 -> Alexey Solodovnikov,一款比较常见的压缩壳。使用OD载入程序:
005DE001 >60            pushad             ;OD载入位置
005DE002    E8 03000000   call    005DE00A   ;F8运行到此处,对ESP下硬件访问断点
005DE007- E9 EB045D45   jmp   45BAE4F7
005DE00C    55            push    ebp
005DE00D    C3            retn
005DE00E    E8 01000000   call    005DE014
Shift+F9,运行到:
005DE3B0   /75 08         jnz   short 005DE3BA
005DE3B2   |B8 01000000   mov   eax, 1
005DE3B7   |C2 0C00         retn    0C
005DE3BA   \68 6CB75300   push    0053B76C
005DE3BF    C3            retn
F8单步运行到005DE3BF处,返回:
0053B76C    55            push    ebp
0053B76D    8BEC            mov   ebp, esp
0053B76F    83C4 F0         add   esp, -10
0053B772    53            push    ebx
0053B773    B8 14B35300   mov   eax, 0053B314
如上,即到达OEP。
使用LordPE和Import REConstructor修复原程序,运行成功。

打开008个人通讯录,在软件注册页面,填入注册码和用户名,点击“确定”
提示“注册完成,重新运行程序”,由此,可以判定这是一个重启验证型的程序。
查看目录下的相关文件修改时间,没有同注册时间相近的,由此,排除了为ini文件或其它类型文件重启验证的可能性。猜测是注册表重新验证类型的软件。
使用工具RegShot,对当前注册表进行快照(保存为文件1),随后,打开软件输入伪注册码“54321”,关闭软件,使用RegShot对当前注册表进行快照(保存为文件2)。通过对比

,找到了如下位置:
项名称:             HKEY_CURRENT_USER\Software\008InfoCard
类别名:         <无类别>
最近写入时间:    2007-12-24 - 16:20
值0
名称:            RegUser
类型:            REG_SZ
数据:            jacksunblack

值1
名称:            RegNo
类型:            REG_SZ
数据:            54321
由此,可以确定这是一款注册表重启验证程序。

重新加载程序,下断点:RegOpenKeyExA,RegCreateKeyExA
程序停在如下程序段:
77DAEAF4 >8BFF            mov   edi, edi
77DAEAF6    55            push    ebp
77DAEAF7    8BEC            mov   ebp, esp
77DAEAF9    83EC 30         sub   esp, 30
77DAEAFC    8B45 08         mov   eax, dword ptr
观察此处的堆栈窗口:
0012FD7C   004717E7/CALL 到 RegCreateKeyExA 来自 dumped_.004717E2
0012FD80   80000001|hKey = HKEY_CURRENT_USER
0012FD84   00539BBC|Subkey = "Software\008InfoCard"
0012FD88   00000000|Reserved = 0
0012FD8C   00000000|Class = NULL
0012FD90   00000000|Options = REG_OPTION_NON_VOLATILE
0012FD94   000F003F|Access = KEY_ALL_ACCESS
0012FD98   00000000|pSecurity = NULL
0012FD9C   0012FDC0|pHandle = 0012FDC0
0012FDA0   0012FDB8\pDisposition = 0012FDB8
返回到调用处,按F8一路运行到如下程序段:
00539A0F|.8D4D F8       lea   ecx, dword ptr
00539A12|.BA DC9B5300   mov   edx, 00539BDC                  ;reguser
00539A17|.8BC6          mov   eax, esi
00539A19|.E8 FE7EF3FF   call    0047191C
00539A1E|.8B55 F8       mov   edx, dword ptr
00539A21|.B8 C4625400   mov   eax, 005462C4
00539A26|.E8 65ADECFF   call    00404790
00539A2B|.8D4D F4       lea   ecx, dword ptr
00539A2E|.BA EC9B5300   mov   edx, 00539BEC                  ;regno
00539A33|.8BC6          mov   eax, esi
00539A35|.E8 E27EF3FF   call    0047191C
00539A3A|.8B45 F4       mov   eax, dword ptr
00539A3D|.50            push    eax
00539A3E|.8D4D F0       lea   ecx, dword ptr
00539A41|.BA FC9B5300   mov   edx, 00539BFC                  ;008infocardchina
00539A46|.A1 C4625400   mov   eax, dword ptr
00539A4B|.E8 18B0FDFF   call    00514A68
观察寄存器窗口,可以看到,程序依次读出了注册表中的数据:jacksunblack和54321
运行到如上程序段的最后一句,即可以看到在寄存器中EAX中出现了伪注册码“54321”,在ECX中出现了真实注册码“AF46F650B24D977776CB715ABEEBC5ED”
经过注册验证,该码为真实注册码。

完成注册过程之后,还发现了另外一个问题,软件在运行初期,自动将IE主页修改成了:http://www.haoda123.com/。为此,通过RegCreateKeyExA的断点,找到相应的位置,其修

改了注册表中main的位置,从而实现了IE主页的转换。
其堆栈段如下所示
0012FD74   004717E7/CALL 到 RegCreateKeyExA 来自 dumped_2.004717E2
0012FD78   80000001|hKey = HKEY_CURRENT_USER
0012FD7C   00F1276C|Subkey = "Software\Microsoft\Internet explorer\Main"
0012FD80   00000000|Reserved = 0
0012FD84   00000000|Class = NULL
0012FD88   00000000|Options = REG_OPTION_NON_VOLATILE
0012FD8C   000F003F|Access = KEY_ALL_ACCESS
0012FD90   00000000|pSecurity = NULL
0012FD94   0012FDB8|pHandle = 0012FDB8
0012FD98   0012FDB0\pDisposition = 0012FDB0
在程序中查找字符串“http://www.haoda123.com/”,来到了如下程序段
005388AC/$53            push    ebx
005388AD|.B2 01         mov   dl, 1
005388AF|.A1 30154700   mov   eax, dword ptr
005388B4|.E8 778DF3FF   call    00471630
005388B9|.8BD8          mov   ebx, eax
005388BB|.BA 01000080   mov   edx, 80000001
005388C0|.8BC3          mov   eax, ebx
005388C2|.E8 098EF3FF   call    004716D0
005388C7|.B1 01         mov   cl, 1
005388C9|.BA FC885300   mov   edx, 005388FC                  ;\software\microsoft\internet explorer\main
005388CE|.8BC3          mov   eax, ebx
005388D0|.E8 5F8EF3FF   call    00471734
005388D5|.84C0          test    al, al
005388D7|.74 11         je      short 005388EA
005388D9|.B9 30895300   mov   ecx, 00538930                  ;http://www.haoda123.com
005388DE|.BA 50895300   mov   edx, 00538950                  ;start page
005388E3|.8BC3          mov   eax, ebx
005388E5|.E8 0690F3FF   call    004718F0
005388EA|>8BC3          mov   eax, ebx
005388EC|.E8 BFB0ECFF   call    004039B0
005388F1|.5B            pop   ebx
005388F2\.C3            retn
注意上述005388E5的位置,修改了IE的主页,将其位置nop掉,保存文件。重新执行程序,IE主页保持不变。从而,完成了整个破解过程
------------------------------------------------------------------------
【破解总结】1.Ctrl+N调用程序函数的应用,通过OD的这一功能,往往能够更加快速的找到所需要的函数。
2.对于注册表重启验证类型程序的破解思路,包括RegOpenKeyExA,RegCreateKeyExA。
此外,RegShot等注册表快速比较的工具往往能够方便对程序修改注册表的监控。
3.个人观点:我厌恶不加提示就修改用户主页的软件!
------------------------------------------------------------------------
【版权声明】请尊重原版软件!

yuanren 发表于 2007-12-29 07:38:48

/:good /:good /:good 我还是一个新手,以前也知到注册表验证,可不知怎样查找在这里我又学到一点。谢谢。

magic659117852 发表于 2007-12-29 10:07:57

:loveliness:学习。。。下一个操作一下

magic659117852 发表于 2007-12-29 10:43:18

:loveliness:   新手提问。。

重新加载程序,下断点:RegOpenKeyExA,RegCreateKeyExA

??------------ 两个一起么,,还是?


偶这边bp RegCreateKeyExA 后堆栈是:

0012E330   766A13E3/CALL 到 RegCreateKeyExA 来自 WININET.766A13DD
0012E334   80000001|hKey = HKEY_CURRENT_USER
0012E338   76685160|Subkey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings"
0012E33C   00000000|Reserved = 0
0012E340   00000000|Class = NULL
0012E344   00000000|Options = REG_OPTION_NON_VOLATILE
0012E348   0002001F|Access = KEY_QUERY_VALUE|KEY_SET_VALUE|KEY_CREATE_SUB_KEY|KEY_ENUMERATE_SUB_KEYS|KEY_NOTIFY|20000
0012E34C   00000000|pSecurity = NULL
0012E350   0012E364|pHandle = 0012E364
0012E354   0012E360\pDisposition = 0012E360

---------------/:001 跟随后到了WININET.dll的地盘,,这情况又该怎样处理 ?

jacksunblack 发表于 2007-12-29 12:01:17

原帖由 magic659117852 于 2007-12-29 10:43 发表 https://www.chinapyg.com/images/common/back.gif
:loveliness:   新手提问。。

重新加载程序,下断点:RegOpenKeyExA,RegCreateKeyExA

??------------ 两个一起么,,还是?


偶这边bp RegCreateKeyExA 后堆栈是:

0012E330   766A13E3/CALL 到 ...

一般查询注册表比较常用的是bp RegOpenKeyExA,但是针对这个程序而言,是使用bp RegCreateKeyExA来下断点。
这也就是为什么我在总结中说,要多用ctrl+N来查看程序所调用的函数有哪些,从而便于处理

此外,对于我上文中所说的到达堆栈的状态,是要shift+F9运行几次到达的。
你可以看一下,你现在的堆栈状态是针对internet setting

再次,对于你说的如何返回到相应的程序的办法,你可以在堆栈段的首句上,单击ENTER,从而返回到相应的程序段。

magic659117852 发表于 2007-12-29 16:41:09

:loveliness: :loveliness:

感谢,, :loveliness:

菜鸟..自己再慢慢摸索一下

cxl0825 发表于 2007-12-30 23:19:17

学习 下 ,,哈哈,

hnld 发表于 2008-1-20 10:55:21

一遍好的范例,我正在破解重启验证的程序,谢谢楼主,先下载程序自己操作一把。

hnld 发表于 2008-1-20 14:07:55

按照楼主的思路跟踪了一遍,得出:
帐号:123456789   注册码:FB97A87E72EE3974FF1E3F55C242056F
每按前人的脚步走一次,就长了一点经验。谢谢楼主。
以前我是跟到一半就不跟了,怀疑自己是不是跟错了,原来跟一个注册码真的要功夫。

天下 发表于 2008-1-20 14:31:11

来学习以下啊,多谢分享啊
页: [1] 2
查看完整版本: ASPACK+注册表重启验证(2007年12月24日)