首页
社区
课程
招聘
[原创]对韩国原装X游戏的服务器端及客户端加固
发表于: 2010-2-1 03:26 32435

[原创]对韩国原装X游戏的服务器端及客户端加固

2010-2-1 03:26
32435
收藏
免费 7
支持
分享
最新回复 (72)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
51
这代码的风格真是值得学习研究的
2010-2-3 20:58
0
雪    币: 517
活跃值: (84)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
52
其实,做外挂的人应该最知道服务器应该如何做才能防止他们。
不知如何被破,怎知如何防破嘛。
从这点出发,应该比较省时省力。 当然,也比较取巧,还是无法太彻底解决未能爆出的隐藏问题。
2010-2-3 21:31
0
雪    币: 258
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
53
是的。所以,我对bin文件的patch,不但在调试的时候,需要1天几十次地、反反复复地修改,运行。而且即使在发布后,针对恶意外挂(不鄙视外挂,只是需要和恶意外挂做斗争)也要反复地改进,所以,写个工具来自动优化函数、调整函数空间、省出多余空间、patch多个点,是很有必要的。
如果是添加Section,反倒没必要。因为目标bin的函数优化后,空间已经足够。
2010-2-4 00:30
0
雪    币: 258
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
54
[QUOTE=nbw;756555]给PE文件增加大小,网上很多工具,我5年前用汇编写过一个,你需要的话我给你翻翻老文件。

大体思路就是首先用 SetEndOfFile 函数在文件最后面添加需要的空字节数,然后根据添加的字节内容,修改相应的PE节区。修改节区的时候,可以新增一个节区信息,也可以修改以前节区属性。

不过这都是传统思路,对你这种讲究效率的高手来说,用你的UE打开文件,进入16进制编辑模式,转到文件最后,手工输入00,想输多少输多少,然后保存,关闭,搞定!

linux下的文件没研究过,不过原理应该差不多。虽然说server有np保护,但考虑到你都任意在文件里进行优化了,我也就不说np下修改文件的问题了。 [/QUOTE]

不得不承认,nbw就是幽默。先是在14楼说“你说你用工具改改几下就行了,是不是有点夸大其辞了?”,把我说得那么轻巧,接着在45楼说“用你的UE打开文件,进入16进制编辑模式,转到文件最后,手工输入00,想输多少输多少”,又把我说成了苦力。您真幽默。

呵呵,和你开个玩笑,别介意。
2010-2-4 00:39
0
雪    币: 258
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
55
在第1楼后面部分,我举了个例子,说明优化函数,省出空间,添加我们patch的必要性。请大家去看看。
2010-2-4 02:59
0
雪    币: 258
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
56
是的,相对优化移动代码及修正jmp/call/内存引用来说,创建新Section容易多了。
我在1楼的末尾增了1个例子,能说明在这种情况下优化代码插入patch的必要性,在我的例子中,只增Section不移动代码,是不行的。
2010-2-4 03:07
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
57
看明白你的意思了。就是说有时候你不想对原代码进行跳转了,直接修改原来的汇编码,可能空间不够,你需要把代码上下挪动下腾出来些空间。对我来说碰到这种情况会直接把那段代码jmp到其他的位置,然后修补完再跳回来。不过对你来说,有你那个自动化工具,你这种方式很适合自身情况的。 谢谢!
2010-2-4 08:53
0
雪    币: 208
活跃值: (51)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
58
为啥我觉得楼主除了不停的说他的工具多么牛x之后啥也没说呢
帖子里提出了一堆问题,解决思路都不说一下,就一句"然后我做了个工具进行自动修改"xxx就完了?
2010-2-4 10:36
0
雪    币: 258
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
59
思路在第1张图的后面。
修正Offset很简单,就是目标地址-本指令执行完后的下一条指令地址。
2010-2-4 12:25
0
雪    币: 258
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
60
假如你需要搬到别处的部分代码,也是个相对jmp/call/内存引用呢?你还是需要修正。
2010-2-4 12:28
0
雪    币: 357
活跃值: (3133)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
61
.text:00401071 6A 30                    push 30h
.text:00401073 E8 88 FF FF FF           call Test1

可以
00401071 nop
00401072 nop
00401073 jmp xxxx

xxx:
       push 90h
       call  Test1
       jmp 00401062

是不是比你的简单?

还有一个c版本的

0040106B jmp Patch_ASM

__declspec(naked) void Patch_ASM()
{
        __asm
        {
                cmp dword ptr[ebp-4],5
                jga Leb1
                push 0x90
                mov eax,Test1
                call eax
                push 0x401062
                ret
Leb1:
                push 0x40107A
                ret
        }
}
2010-2-4 15:01
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
62
对不起,我不需要修正,因为我不做这么高深的工作。谢谢!
2010-2-4 18:07
0
雪    币: 446
活跃值: (723)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
63
楼主干的好,做项目时就行简单的问题复杂话,不然那来的钱?
2010-2-4 18:15
0
雪    币: 1050
活跃值: (1213)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
64
我只是不明白,像楼主这么大规模改了BIN,那以后原公司要更新服务端怎么办……你把代码全部CUT了优化了……空隙塞满了……还断断续续的……难道今后他们更新服务端以后都把BIN发给你修改?还是说你要写一个通用的程序修改?如果只是加个DLL就没那么麻烦或者区段就没那么麻烦……
2010-2-4 18:50
0
雪    币: 271
活跃值: (16)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
65
是不是希望OL啊?刚百度到希望Online : 代理金500万美元 《希望OL》将宣布终身免费。这游戏可够老的,估计韩国不怎么更新了,偶尔更新一次特征码查找就可以了,才明白LZ的意思,LZ真是简单问题复杂化了,改动二进制代码的时候目标代码改的越少越好,避免不必要的麻烦。就像上面KooJiSung说的。LZ该看看外挂怎么做的,有些外挂不就是patch客户端功能吗?呵呵
2010-2-4 20:19
0
雪    币: 258
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
66
inline hook, deep hook。用detour做,或者自己jmp copy前N指令,再jump回去,这些应该算是基本功吧,坛子里应该很多兄弟都懂,我也不例外。

我之所以选择大段汇编代码优化移动,有我的道理。
2010-2-4 22:18
0
雪    币: 258
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
67
知道。也做过。
我做过增Section,和Loader Start-Debug-Process/Attach-Debug-Running-Process/Remote-Inject-Process/Replace-Dll 等方案,也做过从驱动下手的方案。
在做这个方案的时候,经过慎重考虑,选择了精简目标程序的指令并移动汇编、HardCoding Patch的这个方案。这种方案跨平台(Windows/Linux)能力比较强,而且干脆利落,不拖泥带水。但是难点在于前期开发,后期维护相对容易,使得我可以将注意力放在程序的逻辑上,并且能作到反反复复地调试,不用放在具体的细节或框架上。

坛子里有些同学可能以为我走了条弯路,把简单问题复杂化了,其实我走的不是弯路,是一条相对不太好走的直路。

大段地修改汇编,并不一定会让bin文件执行错乱,像VMP/TMD,对被保护的函数,也是将函数Body移动得到处都是,一块一块地散乱放着,并且用一大堆的跳来连接,有真跳,有变形跳。
2010-2-4 22:42
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
68
问个初级问题,内存对齐是编译器做出的优化,加快寻址速度的,你现在全删掉的,会不会影响速度?? 不知道楼主经过实际运营了没有.....
2010-2-24 17:20
0
雪    币: 367
活跃值: (20)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
69
用那个连接器级的牛叉工具处理后,服务端还能运行么?
2010-6-15 21:44
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
70
关键点:代码复用
2010-6-15 23:55
0
雪    币: 243
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
71
不太明白楼主想表达什么思想。
2010-6-16 01:16
0
雪    币: 14
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
72
个人表示很多疑惑
1.这样处理之后, 那么是否意味着这个程序将不再有任何功能的修改或者从高级语言的角度去修正BUG
2.还是说LZ与客户约定, 后续更新程序出来后再交给LZ来调整之后成为最终程序? 如果是这样的话, LZ真是接了
个很好的活, 如果真是这样我对LZ就没什么疑问了, 反倒是对做出这样决定的开发商表示费解。
3.站在开发商的角度来说, 应该更倾向于在汇编层来定位问题, 而不是修正问题,  定位问题之后再在高级语言的开发环境上来修正, 我看不出这样的服务端程序有什么必要一定要在汇编代码上较劲。
2010-6-16 01:38
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
73
非常不明白楼主修改bin的做法??新的程序发布了那不是还要改!!!
2010-6-16 20:16
0
游客
登录 | 注册 方可回帖
返回
//