首页
社区
课程
招聘
[原创]解除关机自校验 完美破解“实创桌面助手”
发表于: 2009-6-13 11:15 6820

[原创]解除关机自校验 完美破解“实创桌面助手”

2009-6-13 11:15
6820
解除关机自校验 完美破解“实创桌面助手”
                       
【软件简介】 实创桌面助手
【破解作者】 漏网之鱼
【作者邮箱】 lwzy-crack@163.com
【使用工具】 PEID v0.95    OllyICE  
【破解平台】 Winxp SP3
【官方网址】 http://www.chinascsoft.com/
【编写语言】 Delphi
【保护方式】 重启认证,aspack 加壳
【软件价值】 未知
【破解声明】 本文只供技术交流,请勿用于商业用途,否则后果自负。软件版权归作者所有。
【破解过程】

软件我已经安装好了,我会给大家打包的。

首先,老规矩,先用PEID查壳,发现是  ASPack 2.12 -> Alexey Solodovnikov 的壳。

我们先脱壳,很简单的一个壳,用esp定律,直接搞定。我就不赘述了。大家自己动手吧,如果不会脱壳,可以用脱壳工具脱壳。但是我建议你

自己手动脱壳,这样能锻炼一下自己。

好了。脱过壳以后我们运行程序。发现程序不能运行,我们的第一反应时有自校验。或者壳没有脱好。但是一般的都是有自校验,因为这个壳

很简单。

好了既然知道是自校验,我们就有针对的做出处理吧。

我们下bp CreateFileA  bp CreateFileW
这两个断点。发现程序直接跑飞了,没有中断下来。

哎,看来我们只好手动跟踪了。

006FB230 >/$  55             push ebp                                 ;程序入口点
006FB231  |.  8BEC           mov ebp,esp
006FB233  |.  83C4 E8        add esp,-18
006FB236  |.  53             push ebx
006FB237  |.  56             push esi
006FB238  |.  33C0           xor eax,eax
006FB23A  |.  8945 EC        mov dword ptr ss:[ebp-14],eax
006FB23D  |.  8945 E8        mov dword ptr ss:[ebp-18],eax
006FB240  |.  B8 A8A96F00    mov eax,unapck.006FA9A8
006FB245  |.  E8 76C2D0FF    call unapck.004074C0
006FB24A  |.  8B35 94CE7000  mov esi,dword ptr ds:[70CE94]             ;  unapck.0070EC1C
006FB250  |.  33C0           xor eax,eax
006FB252  |.  55             push ebp
006FB253  |.  68 1EB36F00    push unapck.006FB31E
006FB258  |.  64:FF30        push dword ptr fs:[eax]
006FB25B  |.  64:8920        mov dword ptr fs:[eax],esp
006FB25E  |.  8B06           mov eax,dword ptr ds:[esi]
006FB260  |.  E8 4787DAFF    call unapck.004A39AC
006FB265  |.  A1 20CB7000    mov eax,dword ptr ds:[70CB20]
006FB26A  |.  C700 01000000  mov dword ptr ds:[eax],1
006FB270  |.  68 2CB36F00    push unapck.006FB32C                      ; /Title = "实创桌面助手"   ;这里是什么呢?呵呵!
006FB275  |.  6A 00          push 0                                    ; |Class = 0
006FB277  |.  E8 4CD1D0FF    call <jmp.&user32.FindWindowA>            ; \FindWindowA
006FB27C  |.  8BD8           mov ebx,eax
006FB27E  |.  85DB           test ebx,ebx
006FB280  |.  74 16          je short unapck.006FB298
006FB282  |.  6A 09          push 9                                    ; /ShowState = SW_RESTORE
006FB284  |.  53             push ebx                                  ; |hWnd
006FB285  |.  E8 BED5D0FF    call <jmp.&user32.ShowWindow>             ; \ShowWindow
006FB28A  |.  53             push ebx                                  ; /hWnd
006FB28B  |.  E8 00D5D0FF    call <jmp.&user32.SetFocus>               ; \SetFocus
006FB290  |.  53             push ebx                                  ; /hWnd
006FB291  |.  E8 02D5D0FF    call <jmp.&user32.SetForegroundWindow>    ; \SetForegroundWindow
006FB296  |.  EB 6B          jmp short unapck.006FB303

通过观察分析,我们知道“实创桌面助手”是一个文件夹的名称,因为软件安装后,安装到“实创桌面助手”这个文件夹,当你调试程序的时

候,这个文件夹一定是打开的。所以程序检测窗口名称,发现“实创桌面助手”这个窗口标题就让软件死掉。这样就达到反调试的目的,刚开

始我分析的时候也被搞糊涂了。后来一看,原来是这么回事。我豁然开朗有种柳暗花明的感觉。呵呵!(调试程序时,当你有所发现,你会有

一种特殊的快感。有种翻云覆雨的感觉。)

006FB270  |.  68 2CB36F00    push unapck.006FB32C                      ; /Title = "实创桌面助手"   ;这里是什么呢?呵呵!
006FB275  |.  6A 00          push 0                                    ; |Class = 0
006FB277  |.  E8 4CD1D0FF    call <jmp.&user32.FindWindowA>            ; \FindWindowA
006FB27C  |.  8BD8           mov ebx,eax
006FB27E  |.  85DB           test ebx,ebx
006FB280  |.  74 16          je short unapck.006FB298

好了,这个是第一处自校验。我们来搞定他吧。我们把程序所在的文件夹先改一个名字,等破解后,在改回去。或者把里面的程序都拷贝到一

个文件夹里面。

我们新建一个文件夹,把里面的东西都拷贝到这个文件夹里面。好了自校验搞定了。我心中暗喜。运行程序看看,就在此时,一件不幸的事情发生了。

也许这就是天意吧,因为我的一个不小心。造成了及其严重的后果。我的电脑被强制性的关机了。还好软件的作者还算有点良心,没有格式化我的硬盘,要不然,我死的心都有了。因为我电脑里面有很多有用的数据,很重要的哦!(比如:我在大学四年里面收集的音乐,美女图片,本人的疯狂自拍,哈哈!)

在电脑关机后。我重新开机,对这个软件我开始重新分析,因为我发现,我中了软件作者的奸计了。上有政策,下有对策。你不是关机吗!好,我就下关机断点 bp ExitWindowsEX

运行程序。我一路F9,终于,程序中断下来了。

在堆栈 窗口中,我发现

0060FF3A  /CALL 到 ExitWindowsEx 来自 unapck.0060FF35
0000000C  |Options = EWX_FORCE|EWX_POWEROFF
00000000  \Reserved = 0

这个就是关机的罪魁祸首了。

我们单机鼠标右键-在反汇编窗口中跟随,向上找到断首,下断点。然后重启程序

一路F8,发现这里是关键

006FB2B7  |.  3D 00002000    cmp eax,200000                            ;比较软件大小
006FB2BC  |.  7E 0C          jle 006FB2CA                                       ;这里改为jmp
006FB2BE  |.  B8 02000000    mov eax,2
006FB2C3  |.  E8 C84BF1FF    call unapck.0060FE90                      ;关机函数
006FB2CA  |> \8B06           mov eax,dword ptr ds:[esi]

根据经验分析,cmp eax,200000 这句是特征码(就是说,只要eax 和200000 比较,如果eax的值大于200000的时候,就执行关机函数)。

所以,我们  查找所有命令  "cmp eax,200000 " 找到所有的这个命令,把这个命令下面的比较语句就改为 jmp ……

这样,关机自校验级处理完毕了。

下面进行最后的阶段——破解。

软件是重启验证的,那么我们就应该知道。程序在启动的时候一定会就是否注册进行判读判断,我们找到这个判断的关键点,修改他的判断标志。

还有个点。因为软件是重启验证的,还有使用时间限制,所以我们就知道,大部分软件一定对注册表进行的数据的写入和读取。还有一小部分

人讲这些数据写入文件,但是,写入文件的数据很容易被人发现和修改。所以大部分人都喜欢写注册表。我们在注册表中发现scclock这个键值

下注册表断点。bp RegOpenKeyExA

一路F9,运行,在堆栈中发现,我们在反汇编窗口中跟随
0044A517  /CALL 到 RegOpenKeyExA 来自 去校验.0044A512
00000134  |hKey = 134
006111B0  |Subkey = "ScClock"
00000000  |Reserved = 0
000F003F  |Access = KEY_ALL_ACCESS
0012FD28  \pHandle = 0012FD28

来到程序领空

0044A502  |.  E8 41ABFBFF    call 去校验.00405048
0044A507  |.  50             push eax
0044A508  |.  8BD3           mov edx,ebx
0044A50A  |.  8BC6           mov eax,esi
0044A50C  |.  E8 93FEFFFF    call 去校验.0044A3A4
0044A511  |.  50             push eax                                  ; |hKey
0044A512  |.  E8 99D5FBFF    call <jmp.&advapi32.RegOpenKeyExA>        ; \RegOpenKeyExA
0044A517  |.  85C0           test eax,eax

一路F8,来到这里
006F85C5   .  A1 A8D17000    mov eax,dword ptr ds:[70D1A8]
006F85CA      8038 00        cmp byte ptr ds:[eax],0                      ;是否注册的标志,
006F85CD      75 05          jnz short 去校验.006F85D4                    ;要跳
006F85CF   .  E8 58C3F5FF    call 去校验.0065492C                         ;注册窗口
006F85D4   >  5B             pop ebx
006F85D5   .  C3             retn

破解方法:
006F85CA      8038 00        cmp byte ptr ds:[eax],0
006F85CD      75 05          jnz short 去校验.006F85D4                  

改为
006F85CA      C600 01        mov byte ptr ds:[eax],1
006F85CD      EB 05          jmp short 去校验.006F85D4  

好了,我们保存修改,运行程序,发现注册窗口不见了。大功告成。  

好了,破文就到这里吧,由于本人比较菜,失误之处在所难免,大家被仍砖头拍我呀。呵呵。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 191
活跃值: (335)
能力值: ( LV9,RANK:450 )
在线值:
发帖
回帖
粉丝
2
鼓励一下。期待你的进步
2009-6-13 11:42
0
雪    币: 347
活跃值: (25)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
3
很好的文章,学习了
2009-6-13 23:52
0
雪    币: 177
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
很不错的文章
O(∩_∩)O~
要是带壳调试的话,应该会好点
2009-6-14 10:58
0
雪    币: 104
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
以后就得格式化盘~O(∩_∩)O哈哈~
2009-6-14 22:24
0
游客
登录 | 注册 方可回帖
返回
//