首页
论坛
课程
招聘
[原创]HackShield 4.0.0.47版破解介绍
2007-9-9 23:12 24525

[原创]HackShield 4.0.0.47版破解介绍

2007-9-9 23:12
24525
我编写了一个游戏的外挂,这个游戏开始没有采用任何加密措施,后来开始采用HackShield来进行保护。
游戏最早采用的HS版本为4.0.0.47,后来升级到了4.2.0.7版本,但不知什么原因,在一个月后又回到了4.0.0.47版。前些天游戏又对HS进行了更新,目前最新版本为4.3.0.9。

4.0.0.47版与4.2.0.7版都采用的是ASProtect进行加密,而最新的4.3.0.9版则采用了Themida进行加密。

在这三个版本中我只对4.0.0.47版本进行了破解,采用的方法与大家通常采用的从驱动层进行破解的方式完全不同(我也不会...),而是从根本上停止了HS的运作。下面简单介绍一下4.0.0.47版的HS,以及我的破解方式。

4.0.0.47版EhSvc.dll函数功能表:
#1: Initialize
#2: StartService
#3: StopService
#4: UnInitialize
#8: PauseService
#9: ResumeService

#10:自校验,EAX为0表示通过
#12:获取内存、主执行文件和EhSvc.dll、EGRNAP.dll、EGRNAPX2.dll文件的HASH
#13:算法验证
#14:作用不明,EAX为0表示通过
#15:作用不明,似乎与14号函数成对运作

游戏主程序启动后会动态加载EhSvc.dll,然后调用1号函数初始化,之后调用10号函数对游戏主程序、EhSvc.dll、EGRNAP.dll及EGRNAPX2.dll等文件进行校验。检验成功后会调用2号函数启动HackShield服务,此时游戏进程进入保护状态。服务启动成功后,主程序调用14号函数,该函数的入口参数为一些主程序中的重要函数的地址。该函数的作用我没有搞清楚。
游戏运行过程中,服务器端会定时向客户端发送两条验证指令,游戏主程序在接收到这两条指令后会分别调用12号与13号函数对指令中夹带的数据进行算法处理,并由主程序将处理结果返回至服务器端,以达到验证客户端的目的。如果客户端不能在一段时间内返回数据或者返回了错误的数据,则服务器端会主动断开与客户端的连接。

由上面的分析可以看到,要想破解HS的保护,最关键的是要破解12号与13号函数的验证过程,无论对游戏主程序或HS本身做任何修改,都要保证这两个函数能返回正确的结果。

我首先对10号函数和2号函数进行了修改,使其始终返回执行成功,这样就可以使主程序运行在没有任何保护的状态下,可以对主程序进行调试分析。
经过逆向工程分析和调试分析,发现13号函数的功能非常简单,就是对由网络发来的数据进行算法处理,之后将处理结果返回服务器进行验证。这个函数与2号函数几乎没有任何交集,也就是说该函数的运作完全不依赖于HackShield服务。因此我很容易就破解了该函数,使其在不调用2号函数的前提下能够正常运作。
12号函数返回的也是算法处理的结果,但其结果中包含了内存与文件的HASH。其内存HASH所取的内存地址包含在网络包中,并且在一个包中包含有多个地址数据。文件HASH中则包含了对主程序和EhSvc.dll等文件的HASH处理。这个函数的运作也完全不依赖于HackShield服务。
为了解决内存HASH的问题,我采用了Hook方式,Hook了其内存访问函数,在Hook代码中对其要取数据的地址进行判断,如果位于主程序地址范围内,则伪造一片没有修改过的主程序内存映像,并将修改后的内存地址指针送入原内存访问函数,使HS获取伪造的内存数据。
对于文件HASH部分,则对主程序文件和EhSvc.dll文件分别处理。对于EhSvc.dll文件,由于HS访问该文件时都是采用文件名来指定文件,因此我保留的原始的EhSvc.dll文件,将修改后的文件命名为_EhSvc.dll然后修改主程序,使其加载修改后的文件,这样就解决了EhSvc.dll文件的HASH问题。HS在获取主程序的HASH时是通过GetModuleFileName函数获取的,因此我写了另一个Hook动态库,专门Hook该函数,使其返回结果指向原始的主程序文件。这样,12号函数也实现了脱离HackShield服务运行。

至此,12号与13号函数全部被破解,外挂与游戏均运行正常。

由以上破解过程可见,4.0.0.47版的EhSvc.dll在内部设计上存在严重缺陷,各函数与保护服务之间严重缺乏关联性,导致整个保护体系被轻易的破解。

4.2.0.7版与4.0.0.47版相比增加了一个验证函数,这个函数在计算HASH的过程中会与驱动程序进行通讯,因此上面的破解方法就不再适用了。

4.3.0.9版本更采用了Themida进行加密,函数个数也增加到了18个,以我的能力恐怕是搞不定了。

郁闷中......

【看雪培训】《Adroid高级研修班》2022年夏季班招生中!

收藏
点赞1
打赏
分享
最新回复 (17)
雪    币: 60
活跃值: 活跃值 (118)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
fly 活跃值 85 2007-9-10 09:31
2
0
转载一下,谢谢
雪    币: 211
活跃值: 活跃值 (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
十三少 活跃值 2 2007-9-10 10:10
3
0
好贴。
雪    币: 1037
活跃值: 活跃值 (9886)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 活跃值 8 2007-9-10 10:11
4
0
由于文章有些深度,将其从『新兵论坛』移到『软件调试论坛』。
期待dvbrain后续分析,本论坛这方面文章不多。
雪    币: 27
活跃值: 活跃值 (21)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
goodcode 活跃值 2 2007-9-10 11:56
5
0
厉害厉害
别被Themida吓着 继续分析它
雪    币: 206
活跃值: 活跃值 (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
鸡蛋壳 活跃值 2007-9-10 16:13
6
0
LZ是业内人士,请教一些高人,他们有通用的方法。
雪    币: 1298
活跃值: 活跃值 (63)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
yijun8354 活跃值 12 2007-9-10 16:49
7
0
感觉楼主有点牛啊~~
雪    币: 246
活跃值: 活跃值 (11)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
Isaiah 活跃值 10 2007-9-10 23:47
8
0
14:是管内存效验的
15:hookcheck。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xie 活跃值 2007-9-14 00:05
9
0
4.0.0.47版EhSvc.dll函数功能表:
#1: Initialize
#2: StartService
#3: StopService
#4: UnInitialize
#8: PauseService
#9: ResumeService

#10:自校验,EAX为0表示通过
#12:获取内存、主执行文件和EhSvc.dll、EGRNAP.dll、EGRNAPX2.dll文件的HASH
#13:算法验证
#14:作用不明,EAX为0表示通过
#15:作用不明,似乎与14号函数成对运作

请问达人,这些函数是怎么打开看到的,我想修改下函数?
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xie 活跃值 2007-9-14 00:09
10
0
1.修改EHSvc.dll的#10函数让其eax永远返回0.
2.修改EHSvc.dll的#2函数让其不加载驱动,并且eax返回0

我找到大概的方法,请问下这些方法是用什么工具修改的?
雪    币: 43812
活跃值: 活跃值 (164062)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
linhanshi 活跃值 2007-9-14 00:13
11
0
one:hold out.

two:The hope has more participation this question the discussion.

three:Thx dvbrain.
雪    币: 246
活跃值: 活跃值 (11)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
Isaiah 活跃值 10 2007-9-14 08:21
12
0
too old......
雪    币: 91
活跃值: 活跃值 (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
alxm 活跃值 2007-9-15 08:53
13
0
``支持一下``
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jinhuiqing 活跃值 2007-9-15 13:42
14
0
看不懂,但是要支持!
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wyangdh 活跃值 2007-9-17 09:27
15
0
高手就是高手,厉害啊!
雪    币: 195
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
aki 活跃值 2 2007-9-17 15:38
16
0
can u take a new one ? if can't,do not Ridicule anybody
雪    币: 200
活跃值: 活跃值 (13)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
shoooo 活跃值 16 2007-9-17 15:48
17
0
i think Isaiah can
雪    币: 195
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
aki 活跃值 2 2007-9-17 18:20
18
0
I mean share
游客
登录 | 注册 方可回帖
返回