首页
社区
课程
招聘
International CueClub主程序脱壳(Softwrap壳)
发表于: 2004-9-12 08:37 8988

International CueClub主程序脱壳(Softwrap壳)

2004-9-12 08:37
8988

下载地址:  ftp://195.23.131.73/.disk1/gamin ... nationalCueClub.exe
软件大小:  20.4 M
是Softwrap壳,只能试用3次

International CueClub.exe的代码基本没有被破坏,只是iat表的和跳转表被Softwrap壳修改到壳中解密。
这个壳的难度是壳的解密代码是壳运行时的申请空间里的,好在这个地址是由几个固定的段中组成的。
现在的问题是怎么把这些代码放的程序的运行时可见段中来运行,因为到入口处dump下的文件中没有了
申请的临时段,这时如果把临时段的代码复制到运行时可见段中也不能正确运行,因为解密的代码是根据
申请段的地址偏移量来计算的,如果简单的复制地址偏移量不正确就无法解密出来正确的iat跳转地址。
   如何在程序的可见段中得到完全正确的解密代码就是脱壳的方向,下面就沿着这个思路来解决这个问题:
    跟踪程序发现几个解密段分别是01050000、01060000、01070000、01080000、和01090000五个段,并且
发现前四个段是在壳的第一部分中完成的,最后一段是在壳的第二部分完成的。这个中间是壳的sdk方式连接的
anti_debug dll(Softwrap.dll),这个dll会检测调试器和跟踪工具,以及完成crc效验等。
在OD中计算这五个段的长度是1000+1000+6000+1000+1000=A000k,在程序的可见段中始终没有找到适合存放
这些代码的地方(我第一个脱的程序把他们放到了程序的data段中的后面发现程序运行时会修改data段是所有数据
程序无法运行),最后只好在壳的程序段后面用LordPE增加一个A000k的段,为了这个增加的段会增加许多的效验问题
需要逐步的解决。
   下面具体来看看:
用OD加载International CueClub.exe主程序,在异常窗口中选择忽略 单步中断 、整数被零除异常。Alt+E打开模块
窗口,选择kernel32 (system)这个dll,Ctrl+N打开kernel32 (system)dll中的所以函数名称窗口,在这个窗口中
查找VirtualAlloc这个函数,双击来到这个函数的入口:

77E5AC72 >PUSH EBP
77E5AC73  MOV EBP,ESP
77E5AC75  PUSH DWORD PTR SS:[EBP+14]
77E5AC78  PUSH DWORD PTR SS:[EBP+10]
77E5AC7B  PUSH DWORD PTR SS:[EBP+C]
77E5AC7E  PUSH DWORD PTR SS:[EBP+8]
77E5AC81  PUSH -1
77E5AC83  CALL kernel32.VirtualAllocEx
77E5AC88  POP EBP
77E5AC89  RETN 10
009D2ABF  MOV AL,BYTE PTR DS:[EAX]
009D2AC1  ADD AL,0F
009D2AC3  JE SHORT Internat.009D2AD6
009D2AC5  NEG AL
009D2AC7  SUB AL,23
009D2AC9  JE SHORT Internat.009D2AD6
009D2ACB  DEC AL
009D2ACD  JE SHORT Internat.009D2AD6
009D2ACF  DEC AL
009D2AD1  JE SHORT Internat.009D2AD6
009D2AD3  CLC
009D2AD4  JMP SHORT Internat.009D2AF7
77E5AC72 >PUSH EBP                                 ; Internat.009D1688
77E5AC73  MOV EBP,ESP
77E5AC75  PUSH DWORD PTR SS:[EBP+14]
77E5AC78  PUSH DWORD PTR SS:[EBP+10]
77E5AC7B  PUSH DWORD PTR SS:[EBP+C]
77E5AC7E  PUSH DWORD PTR SS:[EBP+8]
77E5AC81  PUSH -1
77E5AC83  CALL kernel32.VirtualAllocEx
77E5AC88  POP EBP
77E5AC89  RETN 10
009D2ABF  MOV AL,BYTE PTR DS:[EAX]
009D2AC1  ADD AL,0F
009D2AC3  JE SHORT Internat.009D2AD6
009D2AC5  NEG AL
009D2AC7  SUB AL,23
009D2AC9  JE SHORT Internat.009D2AD6
009D2ACB  DEC AL
009D2ACD  JE SHORT Internat.009D2AD6
009D2ACF  DEC AL
009D2AD1  JE SHORT Internat.009D2AD6
009D2AD3  CLC
009D2AD4  JMP SHORT Internat.009D2AF7
009D30FA  MOV AL,BYTE PTR DS:[ECX]
009D30FC  INC ECX
009D30FD  OR EDX,DWORD PTR DS:[ESI+EAX*4]
009D3100  TEST DL,8
009D3103  JNZ SHORT Internat.009D30F7
009D3105  CMP AL,0F6
009D3107  JE SHORT Internat.009D313F
009D3109  CMP AL,0F7
009D310B  JE SHORT Internat.009D313F
009D310D  CMP AL,0CD
009D310F  JE SHORT Internat.009D314C
009D3111  CMP AL,0F
009D3113  JE SHORT Internat.009D3159
009D3115  TEST DH,80
009D3118  JNZ SHORT Internat.009D316C
009D311A  TEST DH,40
009D311D  JNZ SHORT Internat.009D3192
009D311F  TEST DL,20
009D3122  JNZ SHORT Internat.009D3178
009D3124  TEST DH,20
009D3127  JNZ SHORT Internat.009D3185
009D3129  MOV EAX,ECX
009D312B  SUB EAX,DWORD PTR SS:[ESP+28]
009D312F  AND EDX,707
009D3135  ADD AL,DL
009D3137  ADD AL,DH
009D3139  MOV DWORD PTR SS:[ESP+1C],EAX
009D313D  POPAD
009D313E  RETN
009D2CBF  PUSH EBP
009D2CC0  MOV EBP,ESP
009D2CC2  ADD ESP,-11C
009D2CC8  PUSHAD
009D2CC9  MOV EAX,DWORD PTR SS:[EBP+10]
009D2CCC  MOV DWORD PTR SS:[EBP-8],EAX
009D2CCF  MOV EAX,DWORD PTR SS:[EBP+C]
009D2CD2  MOV DWORD PTR SS:[EBP-C],EAX
009D2CD5  SUB EAX,EAX
009D2CD7  LEA EDI,DWORD PTR SS:[EBP-11C]
009D2CDD  MOV ECX,40
009D2CE2  REP STOS DWORD PTR ES:[EDI]
009D2CE4  LEA EDI,DWORD PTR SS:[EBP-18]
009D2CE7  STOS DWORD PTR ES:[EDI]
009D2CE8  LEA EDI,DWORD PTR SS:[EBP-1C]
009D2CEB  STOS DWORD PTR ES:[EDI]
009D2CEC  LEA EDI,DWORD PTR SS:[EBP-10]
009D2CEF  STOS DWORD PTR ES:[EDI]
009D2CF0  XCHG EAX,EBX
009D2CF1  CMP DWORD PTR SS:[EBP+14],0
009D2CF5  JE Internat.009D2DBD
009D2CFB  DEC DWORD PTR SS:[EBP+14]
009D2CFE  PUSH DWORD PTR SS:[EBP-8]
009D2D01  PUSH DWORD PTR SS:[EBP+8]
009D2D04  CALL Internat.009D30EA
009D2D09  ADD ESP,8
009D2D0C  CMP EAX,-1
009D2D0F  ADD DWORD PTR SS:[EBP-1C],EAX
009D2D12  MOV DWORD PTR SS:[EBP-4],EAX
009D2D15  SUB EBX,EBX
009D2D17  MOV ESI,DWORD PTR SS:[EBP-8]
009D2D1A  LODS WORD PTR DS:[ESI]
009D2D1C  CMP AL,0E2
009D2D1E  JE Internat.009D2DDD
009D2D24  CMP AL,0E1
009D2D26  JE Internat.009D2DDD
009D2D2C  CMP AL,0E0
009D2D2E  JE Internat.009D2DDD
009D2D34  CMP AL,0CC
009D2D36  CMP AL,0E8
009D2D38  JE Internat.009D2F40
009D2D3E  CMP AL,0C3
009D2D40  JE Internat.009D2F25
009D2D46  CMP AL,0C2
009D2D48  JE Internat.009D2F25
009D2D4E  CMP AX,15FF
009D2D52  JE Internat.009D2EE5
009D2D58  CMP AL,0E9
009D2D5A  JE Internat.009D2ECF
009D2D60  CMP AX,25FF
009D2D64  JE Internat.009D2EB4
009D2D6A  CMP AL,0EB
009D2D6C  JE Internat.009D2E9D
009D2D72  CMP AL,0E3
009D2D74  JE Internat.009D2E01
009D2D7A  MOV BX,AX
009D2D7D  SHR BL,4
009D2D80  CMP BL,7
009D2D83  JE SHORT Internat.009D2E01
009D2D85  MOV BX,AX
009D2D88  CMP BL,0F
009D2D8B  JNZ SHORT Internat.009D2D99
009D2D8D  SHR EBX,0C
009D2D90  CMP BL,8
009D2D93  JE Internat.009D2E76
009D2D99  MOV EDI,DWORD PTR SS:[EBP-C]
009D2D9C  MOV ESI,DWORD PTR SS:[EBP-8]
009D2D9F  MOV ECX,DWORD PTR SS:[EBP-4]
009D2DA2  REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
009D2DA4  CMP DWORD PTR SS:[EBP-10],0E
009D2DA8  JA SHORT Internat.009D2DAA
009D2DAA  MOV EAX,DWORD PTR SS:[EBP-4]
009D2DAD  SUB DWORD PTR SS:[EBP-10],EAX
009D2DB0  ADD DWORD PTR SS:[EBP-8],EAX
009D2DB3  ADD EAX,ECX
009D2DB5  ADD DWORD PTR SS:[EBP-C],EAX
009D2DB8  JMP Internat.009D2CF1
009D2DBD  MOV EDX,DWORD PTR SS:[EBP-8]
009D2DC0  MOV EBX,DWORD PTR SS:[EBP-C]
009D2DC3  SUB EDX,5
009D2DC6  SUB EDX,EBX
009D2DC8  MOV BYTE PTR DS:[EBX],0E9
009D2DCB  MOV DWORD PTR DS:[EBX+1],EDX
009D2DCE  MOV EAX,DWORD PTR SS:[EBP-C]
009D2DD1  ADD EAX,5
009D2DD4  MOV DWORD PTR SS:[ESP+1C],EAX
009D2DD8  POPAD
009D2DD9  LEAVE
009D2DDA  RETN 10
009D33B9  MOV DWORD PTR SS:[EBP+1B6A],EAX                     ; Internat.009D8A96
009D33BF  POP EAX
009D33C0  MOV EBX,DWORD PTR SS:[EBP+28D8]
009D33C6  LEA EDX,DWORD PTR DS:[ESI-8]
009D33C9  SUB EDX,DWORD PTR SS:[EBP+28EC]
009D33CF  SHR EDX,1
009D33D1  ADD EBX,4
009D33D4  XOR EAX,186177C9
009D33D9  MOV DWORD PTR DS:[EBX+EDX],EAX
009D33DC  JMP Internat.009D3334
009D3334  CMP ESI,DWORD PTR SS:[EBP+28BC]                     ; Internat.009D4FB0
009D333A  JA Internat.009D33E1
009D3340  LODS DWORD PTR DS:[ESI]
009D3341  MOV EBX,EAX
009D3343  LODS DWORD PTR DS:[ESI]
009D3344  MOV DWORD PTR DS:[ESI-4],0
009D334B  MOV DWORD PTR DS:[ESI-8],0
009D3352  TEST EAX,EAX
009D3354  JE Internat.009D33E1
009D335A  TEST BL,1
009D335D  JNZ SHORT Internat.009D337F
009D335F  PUSH EAX
009D3360  PUSH DWORD PTR SS:[EBP+28A0]
009D3366  CALL Internat.009D2B71
009D336B  XLAT BYTE PTR DS:[EBX+AL]
009D336C  XOR CH,BYTE PTR DS:[ECX]
009D336E  PUSH CS
009D336F  IMUL ECX,EBP,736F14D7
009D3375  TEST EAX,EAX
009D3377  JE Internat.009D341A
009D337D  JMP SHORT Internat.009D339A
009D333A  JA Internat.009D33E1 回车
009D33E1  INC ECX
009D33E2  JMP Internat.009D327D <--这里回车
009D327D  CMP ECX,DWORD PTR SS:[EBP+28C4]
009D3283  JE Internat.009D33E7             //修改这个跳转,到009D33E7
009D3289  MOV EDI,DWORD PTR SS:[EBP+28F0]
009D328F  MOV EAX,DWORD PTR SS:[EBP+28F8]
009D3295  LEA EAX,DWORD PTR DS:[EAX+ECX*4]
009D3298  ADD EDI,DWORD PTR DS:[EAX]
009D329A  PUSHAD
009D329B  PUSH EDI
009D329C  MOV EAX,ECX
009D329E  SHL EAX,2
009D32A1  PUSH EAX
009D32A2  CALL Internat.009D2C39

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (11)
雪    币: 255
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
好贴,怎么没精?:)
2004-9-12 08:52
0
雪    币: 218
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
:D
2004-9-12 08:53
0
雪    币: 203
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不错!:)
这个壳我在LiveBilliardsDeluxe(也是一个桌球游戏)上碰到过,他们在壳的使用上基本一样。
在处理CRC的时候,我采用了一个取巧的方式:先跟踪程序到计算CRC完成的地方,记录下实际的CRC值,然后修改这里的代码,直接把这个CRC值赋出来。这样以后不管有多少处判断都不用理他了。:D
另外,Softwrap.dll负责anti-debug和注册,是通过LoadLib...和GetProcAddress来加载的,直接修改这一段代码(此段代码由主程序解码而来,如果爆破,这里需要反算一下就OK了)即可跳过老多麻烦:D
通过上两个地方的修改,该文件被爆破,直接使用即可。脱壳的话可以基于这个爆破版本做,省力气了。:p 剩下的工作搂主说得很明白了!
2004-9-12 13:20
0
雪    币: 392
活跃值: (909)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
5
赞……
又有好文了
2004-9-12 13:31
0
雪    币: 3685
活跃值: (4237)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
6
最初由 acacia 发布
不错!:)
这个壳我在LiveBilliardsDeluxe(也是一个桌球游戏)上碰到过,他们在壳的使用上基本一样。
在处理CRC的时候,我采用了一个取巧的方式:先跟踪程序到计算CRC完成的地方,记录下实际的CRC值,然后修改这里的代码,直接把这个CRC值赋出来。这样以后不管有多少处判断都不用理他了。:D
另外,Softwrap.dll负责anti-debug和注册,是通过LoadLib...和GetProcAddress来加载的,直接修改这一段代码(此段代码由主程序解码而来,如果爆破,这里需要反算一下就OK了)即可跳过老多麻烦:D
通过上两个地方的修改,该文件被爆破,直接使用即可。脱壳的话可以基于这个爆破版本做,省力气了。:p 剩下的工作搂主说得很明白了!


提供一下爆破的文件,偶喜欢这游戏
2004-9-12 14:51
0
雪    币: 251
活跃值: (260)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
7
good,最近也在看这个壳,不过是个dll加的壳
这东东需要重建个iat可真够麻烦的
2004-9-12 20:47
0
雪    币: 161
活跃值: (231)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
好啊。好啊。象楼主这样具有大公无私,我为人人的精神真是太少了。教程写的真是清楚直白、文笔流畅,实奶我等菜鸟之福音啊!
2004-9-13 08:35
0
雪    币: 203
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
最初由 china 发布



提供一下爆破的文件,偶喜欢这游戏


提供一下你的 email  :D
2004-9-13 09:21
0
雪    币: 243
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢楼主的精彩文章,学习! 论坛文章怎么无法保存了!
2004-9-13 10:10
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
11
精彩!
2004-9-17 22:35
0
雪    币: 367
活跃值: (20)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
12
Fractal PC 一个资源管理器,比较漂亮,有同学喜欢用,只是这壳太麻烦,搞不定....

用破解版Softwrap.dll替换就可以吗?
2005-6-7 15:31
0
游客
登录 | 注册 方可回帖
返回
//