首页
社区
课程
招聘
[原创]国内某个保护软件破解修复,大家注意蓝屏!
发表于: 2007-9-28 05:03 10588

[原创]国内某个保护软件破解修复,大家注意蓝屏!

2007-9-28 05:03
10588
【文章标题】: 国内某个保护软件破解修复,大家注意蓝屏!
【文章作者】: 笨笨学脱壳
【作者邮箱】: Phantomnet@126.com
【作者QQ号】: 932410
【软件名称】: 某种原因,不做说明.
【编写语言】: Microsoft Visual C++ 6.0
【使用工具】: OllyICE、LoadPE、ImportREC
【操作平台】: Windows XP
【软件介绍】: 某单机游戏.
【作者声明】: 我只是以探讨的方式说一下,具体的情况就不说明了.比较罗嗦但是按我说的没问题.关键是多练多学:)

        这里我就不说明是什么了,大家喜欢的就学一下,不喜欢的就看看捧个场,千万别再骂了,我被骂够了,去了一躺游侠网,被骂了...!
所以,今天想了想就发出来给大家学习一下!手段很平常也很简单,对于高手就看个乐呵!菜鸟我们一起研究撒.我这次就以旧版来做介绍.
给大家一个国庆节献礼!我在这里献丑了,我很笨很菜的.千万别笑我菜,要笑就回家乐去好吗?要不然我脸上会挂不住的.呵呵!

        不废话了,动工......

[一].准备:
/-------------------------------------------------------
1.耐心
2.电脑会蓝的,别怕撒!
3.设置OD忽略所有异常.
4.准备个窗口工具,什么样的都可以的,为什么要窗口工具了?因为游戏嘛都是全屏幕的嘛!为什么是全屏幕呢?这个叫独占模式,撤远了不说了.
  实在没有,自己挂个HOOK写个嘛!简单的很....
5.工具基本齐全,做好有个PE文件分析工具,如果没有exescope可以将凑!如果实在没有,自己写个.输入表,输出表可以用LoadPE,核对文件头最好
  有个仔细全面的工具,如果觉得不会写,也没有那么只有用WinHex了,这个没就别破了,对了UE也可以的嘛!要这个做什么用呢?当然是拿它做PE头
  修改.别说,这个不能修改哦!那我真的就晕厥了.

[二].破解方法一:
/--------------------------------------------------------
简单:
OD菜单->插件->获取RING0权限.
下断点Bp GetVersion
F9运行,断下来以后,CTRL+F9返回,往上看不就是OEP嘛!DUMP程序,修复....完成!结束走人.
        这个就完工了,当然如果你有这样的插件就这么简单的完工了,可是有吗?我们没有,我也懒的写那个破玩意.那就没办法了吗?有啊,怎么会
没有了,对付它办法多的是,看就是想用不想用.

[三].破解方法二:
/-------------------------------------------------------------
        我已经发过类似的蓝屏的原因,我就不做解释了.很笨的办法往往是最有效的.事物本身很难,但往往却能很简单解决!来看看吧!

一:运行游戏,使用窗口工具窗口化!我们好DUMP程序.
二:用LOADPE把程序DUMP出来.
三:"广告后回来!",不好意思,我一边做一边写,刚才蓝屏了,打的字都丢了.前面说的那里了?对了我们要修复dumpad.exe就是我们DUMP出的程序!
   怎么修复呢?很简单,直接用ImportRec修复.点自动查找IAT,获取输入表...很多朋友说:傻瓜都知道这个OEP不是正确的,我当然知道了.还没完呢!
四:这里要注意了...一定要注意了!!!!!,在OD之前必须把虚拟光驱里的东东拿出来,或者光盘里的游戏盘拿出来不然蓝了可就是和刚才的我一样了:)
   OD载入dumpad_.exe也就是ImportRec修复的程序.某保护软件的检测出现!我们做的是要证实有模块载入...
五:我们按步鄹慢慢来,先关闭OD,按如下步鄹:
   打开LoadPE->PE编辑器->选择我们修复的dumpad_.exe->目录(如图1)->输入表编辑(就是输入表后面的"...",如图2)->选择pal3a.dll->右键菜单->删除镜像导入描述符
图一:

图二:

   保存退出:)
六:OD重新载入dumpad_.exe,提示什么不是WIN32程序,不管它...很正常!到如下地方:
/------------------------------------------------------------------
0229A000 >  68 586FA772     push    72A76F58
0229A005  - FF25 14A12902   jmp     dword ptr [229A114]
/------------------------------------------------------------------
        很多朋友说,好眼熟的东西,也!难道,你看我写的某篇破文??
七:不管它是什么,直接点菜单->内存,到如图3的地方:

八:直接OD右键菜单->转到->表达式,填:00401000,通常代码段的地方.如果想知道我是怎么知道的,那就多翻翻资料哦!
   这个涉及到内存管理,我就不说了,我们这个文章主要说是让大家怎么破这个程序.发现如下:
/------------------------------------------------------------------------
00401000  /$  56            push    esi
00401001  |.  8BF1          mov     esi, ecx
00401003  |.  6A 08         push    8
00401005  |.  6A 01         push    1
00401007  |.  C706 30865500 mov     dword ptr [esi], 00558630
0040100D  |.  E8 46F31300   call    00540358
00401012  |.  8946 10       mov     dword ptr [esi+10], eax
00401015  |.  33C0          xor     eax, eax
00401017  |.  59            pop     ecx
00401018  |.  8946 04       mov     dword ptr [esi+4], eax
0040101B  |.  8946 08       mov     dword ptr [esi+8], eax
0040101E  |.  8946 0C       mov     dword ptr [esi+C], eax
00401021  |.  59            pop     ecx
00401022  |.  8BC6          mov     eax, esi
00401024  |.  5E            pop     esi
00401025  \.  C3            retn

/------------------------------------------------------------------------
        这个是说明了什么,它说明很简单就是代码已经解密了.
九:右键菜单->查找->所有模块间调用,哈哈如图4,如果不是,那就是操作失误:

十:最麻烦的一步,我要给大家一个惯例,写过VC的人都知道VC6模式程序的WinMain函数的入口特征.更应该知道一个我们很有用的东西哦!编译器编译的时候,程序入口也就是OEP一般都在下面,而代码都是在上面.这个没注意的人,也许太多了吧!
   我们现在就把OEP抓出来,看看我怎么抓:)将"找到的模块间的调用"窗口的滚动条划到最开始!查找CreateWindows函数(真希望那个朋友写个查找API的插件,我比较懒嘻嘻!还喜欢现成的!).如果没找到就好了呵呵:).可是我们找到了这个玩意!
   如图5:

十一:这个能说明什么?写过程序的一看就明白,多半消息处理函数都是在WinMain函数里的,找到它也就能找到我们的OEP了
     不信我们就验证一下!
/------------------------------------------------------------------------------------------
//消息函数在这里:
00525374  |> /53            push    ebx                              ; /RemoveMsg
00525375  |. |57            push    edi                              ; |MsgFilterMax
00525376  |. |57            push    edi                              ; |MsgFilterMin
00525377  |. |8D45 E0       lea     eax, dword ptr [ebp-20]          ; |
0052537A  |. |57            push    edi                              ; |hWnd
0052537B  |. |50            push    eax                              ; |pMsg
0052537C  |. |FF15 74815500 call    dword ptr [558174]               ; \PeekMessageA

//往上看,到函数入口处:
005252EA  /$  55            push    ebp
005252EB  |.  8BEC          mov     ebp, esp
005252ED  |.  83EC 20       sub     esp, 20
005252F0  |.  57            push    edi

//右键菜单->转到->CALL 来自 XXXXXXXX(我们随便点了第一个,保证有一个就能到OEP.).到下面:
00406C15  |.  6A 01         push    1                                ; /Arg1 = 00000001
00406C17  |.  8BCE          mov     ecx, esi                         ; |
00406C19  |.  E8 CCE61100   call    005252EA                         ; \dumped_.005252EA

//往上翻到函数入口:
0040674C  /$  B8 64E75400   mov     eax, 0054E764
00406751  |.  E8 0AA31300   call    00540A60

//同上的方法,我们到:
0052B9D8  |.  E8 6FADEDFF   call    0040674C
0052B9DD  |.  59            pop     ecx
0052B9DE  |.  FF15 08855500 call    dword ptr [558508]               ;  gbengine.gbUpdateCurTime

//往上看,发现插入CD4的提示!不是我们在程序初始化阶段吗?哈哈..离OEP不远了:
0052B971  |.  68 A8456000   push    006045A8                         ;  ASCII "Please Insert Disc4 to Dirver %c:"

//在看到如下代码,已经放心了,这里就是主程序,上一个调用就是WinMain也就是OEP,不相信就看看,这个是查找窗口的程序,意思就
是不要有两个游戏重复运行!!!:
0052B8B5  /$  55            push    ebp
0052B8B6  |.  8BEC          mov     ebp, esp
0052B8B8  |.  81EC 68020000 sub     esp, 268
0052B8BE  |.  53            push    ebx
0052B8BF  |.  56            push    esi
0052B8C0  |.  B8 A0525700   mov     eax, 005752A0                    ;  ASCII "PAL3A--SOFTSTAR.sh"
0052B8C5  |.  57            push    edi
0052B8C6  |.  50            push    eax                              ; /Title => "PAL3A--SOFTSTAR.sh"
0052B8C7  |.  50            push    eax                              ; |Class => "PAL3A--SOFTSTAR.sh"
0052B8C8  |.  FF15 48815500 call    dword ptr [558148]               ; \FindWindowA
0052B8CE  |.  8BF0          mov     esi, eax
0052B8D0  |.  56            push    esi
0052B8D1  |.  FF15 6C815500 call    dword ptr [55816C]
0052B8D7  |.  85C0          test    eax, eax
0052B8D9  |.  74 10         je      short 0052B8EB
0052B8DB  |.  6A 01         push    1                                ; /ShowState = SW_SHOWNORMAL
0052B8DD  |.  56            push    esi                              ; |hWnd
0052B8DE  |.  FF15 B0815500 call    dword ptr [5581B0]               ; \ShowWindow
0052B8E4  |>  33C0          xor     eax, eax
0052B8E6  |.  E9 C1010000   jmp     0052BAAC

//同上一下到了下面的地方,眼睛放亮了,再往上看看吧!我们的OEP不就是这里吗?呵呵!!!:
005431B9  |> \6A 0A         push    0A
005431BB  |.  58            pop     eax
005431BC  |>  50            push    eax                              ; /Arg4
005431BD  |.  FF75 9C       push    dword ptr [ebp-64]               ; |Arg3
005431C0  |.  56            push    esi                              ; |Arg2
005431C1  |.  56            push    esi                              ; |/pModule
005431C2  |.  FF15 3C805500 call    dword ptr [55803C]               ; |\GetModuleHandleA
005431C8  |.  50            push    eax                              ; |Arg1
005431C9  |.  E8 E786FEFF   call    0052B8B5                         ; \dumped_.0052B8B5

//把OEP抓下面:
00543100  /.  55            push    ebp
00543101  |.  8BEC          mov     ebp, esp
00543103  |.  6A FF         push    -1
00543105  |.  68 D0185600   push    005618D0
0054310A  |.  68 54385400   push    00543854                         ;  SE 处理程序安装
0054310F  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]
00543115  |.  50            push    eax
00543116  |.  64:8925 00000>mov     dword ptr fs:[0], esp
0054311D  |.  83EC 58       sub     esp, 58
00543120  |.  53            push    ebx
00543121  |.  56            push    esi
00543122  |.  57            push    edi
00543123  |.  8965 E8       mov     dword ptr [ebp-18], esp
00543126  |.  FF15 B4805500 call    dword ptr [5580B4]               ;  kernel32.GetVersion

睡了...夜深了..明天续.....!

天亮了起迟了,让大家久等了...!我们继续...!

/--------------------------------------------------------

十二:窗口化游戏,大家也许会问为什么!比较重要如果觉得不太重要那就手动修复了:)
     打开ImportRec,OEP处填:00543100-00400000=00143100
     看到RVA项为:00158000,大小060C.这个重要吗?当然了,我们会用的着的:),修复一下文件.提示IAT部分无效,需要手动修复
     不管它...!(需要说明的是这次修复是在前一次修复好的文件上再修复.这样才能让API比较全的修复,剩下的就是被替换的API)
十三:将修复完以后的文件,拿OD载入看看,现在已经在OEP了,基本上脱壳正确了,现在我们来处理一下这个文件.
     打开LOADPE->PE编辑器->目录,做如下图修改:
     
十四:看看我们的程序已经,是不报错了!也能看到区段都不混在一起了!现在正常了,可是个头这么大怎么办呢!

[四] 破解后的修复:
/-------------------------------------------------------
        这个工作是特别要有耐心的我先就不具体说了,只是把重要的地方说一下:

1.确定代码段的大小,如果这会没有exescope那么就拿Winhex就是了,需要注意的是这里打开的是原来的文件,也就是没破的,如图:

2.资源段的修复,可能因为重建PE啊!什么的突然发现,程序图标不见了,那就证明资源段部分出了问题,我们就拿Winhex打开文件
  往下看找到这里,在.rsrc里放的就是资源,如图标,窗口等:
/------------------------------------------------------------------------------
Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

00000260   2E 52 53 52 43 00 00 00  3C 13 00 00 00 40 E9 01   .RSRC...<....@?
00000270   3C 13 00 00 00 40 E9 01  00 00 00 00 00 00 00 00   <....@?........
00000280   00 00 00 00 40 00 00 C0                            ....@..
/--------------------------------------------------------------------------------
//我们把16进制整理如下,看一下就一目了然:
2E52535243000000 ;段名8个字节
3C130000         ;虚拟大小
0040E901         ;虚拟地址
3C130000         ;物理大小
0040E901         ;物理地址
00000000         ;指向重定位
00000000         ;指向行数
0000             ;重定位号
0000             ;行数号
400000C0         ;区段特征

//好我们就去,01e94000的地方看看资源段,然后往下翻到如图的地方.

        需要注意的是,如果发现这里的地址超出了文件大小,那还是修正一下吧!

3.我们对API的修复有两种方法:一就是DUMP区段,然后修复进去,二就是直接修复.方法我就不说了,大家试试看吧!这样可以说这个
  保护软件已经没什么作为了.不过新版的比这个要好DUMP程序,但是在修复上加了难度,我又不喜欢补区段的修复,只有自己重组
  文件,重新修复.替换掉的代码我是自己补进去的.旧版反而好搞许多,就是蓝屏吓坏了不少人:)
4.CALL调用和JE等跳转我已经说过了方法了,大家都学习哈!如果那天心情好再发了!

[五]结束语
/--------------------------------------------------------------------------------
        这个壳脱起来不难,就是麻烦,也许我还没找到更简单的方法!如果谁知道就告诉一下.我真的想了好几天,都是很罗嗦,而又
简单的办法,也许我比较笨点,呵呵!本来想说的详细点,没心情打字了,大家就多试试,希望那位高手指点一二.我感激....再感激!.....

                                                                  -By EasyStudy For PhantomNet
                                                                  2007   9.   28

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (27)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
??没有完?那明天继续啊..
2007-9-28 07:49
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
3
仙剑3 外传问情篇
2007-9-28 09:06
0
雪    币: 221
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
好长时间没来,相不到获取Ring0权限的插件也出来了!
2007-9-28 10:55
0
雪    币: 224
活跃值: (147)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
5
不知所以...
2007-9-28 11:16
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
"pal3a"暴露了痕迹
2007-9-28 12:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这个游戏玩了一下而已,迷宫好强。有完美nocd更好,什么时候放出来?
2007-9-28 12:43
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
8
starforce被楼主盯上了。
2007-9-28 12:44
0
雪    币: 257
活跃值: (56)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
9
强贴必留名!
2007-9-28 12:52
0
雪    币: 226
活跃值: (179)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
starforce 不错还是老版,值得学习,哈哈~
2007-9-28 12:54
0
雪    币: 740
活跃值: (952)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
11
应该+精,不错啊………………
SF的文章是越来越少了
连那个最近的“总览”也不发NO.2篇了
支持
2007-9-30 16:47
0
雪    币: 740
活跃值: (952)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
12
原来……
楼主……
   【原创】破解StarForce之一:StarForce分析总览篇 ( 1 2 3 4 5)  menting  

什么时候出破解StarForce之二
2007-9-30 16:53
0
雪    币: 1667
活跃值: (286)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
13
呵呵!
过段时间吧!我有心情吧!最近一直心烦,没再研究了..等我研究了再发了
2007-10-4 17:32
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
虽然不会~~看过贴还是要顶`
2007-10-4 18:46
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
一定把SF党干掉~~~~~~~~
2007-10-4 22:04
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
16
忽悠,太能忽悠了
2007-10-5 10:08
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
17
恍如一梦,我仿佛看到了很多,但是醒来好像什么也没有发生。
2007-10-6 13:27
0
雪    币: 1667
活跃值: (286)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
18
按我说的真的能扒掉的。。不信,可以试试的。。。
2007-10-8 05:07
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
哎哟,我说我常去那篇找下文,一直都没的goodnews,原来~~~~~

那么我还到这里来寻找~~~~~

不过因为本人是菜蛋(还没有凫出菜鸟来),所以,要尝试着弄出好结局出来是很困难的~~~~~,然后再举一反三,举三反四~~~~~~估计是难上 加难哦~~~~

先支持一下咯~~~~~,
2007-10-11 16:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
还是不错的,谢谢楼主了
2007-10-13 11:29
0
雪    币: 223
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
我试过了,真的可以脱掉的,但是不会修复,没有思路啊
2007-12-18 15:43
0
雪    币: 150
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
学习慢慢看!
2007-12-19 00:53
0
雪    币: 157
活跃值: (416)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
23
基本上是不懂.
2007-12-26 17:18
0
雪    币: 175
活跃值: (211)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
24
什么叫脱壳啊,不是DUMP出来把OEP/IAT改对了就算脱了,起码抓出来的程序要能正常跑起来才行
2007-12-27 12:51
0
雪    币: 309
活跃值: (15)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
25
获取RING0权限.

哪有???
2007-12-27 17:25
0
游客
登录 | 注册 方可回帖
返回
//