外挂技术汇总及书籍推荐

本节介绍游戏安全领域一些入门必备书籍,包含开发、逆向和游戏安全基础。读者可以根据自身情况选择性阅读。

1.开发基础

游戏安全领域逆向是核心技能,但在学习逆向技术之前,必须拥有牢固的开发基础。因为编写外挂需要一定的开发基础;再来只有有一定开发基础,并对程序架构,运行原理了解,才能在逆向领域走的更深入。

对于没有开发基础的读者,这里推荐《C语言程序设计》入门,作者是C语言和UNIX系统的发明人,书比较薄,但却不失为经典。游戏安全领域主流开发语言为C/C++,在有一定C语言基础后,可以尝试阅读下《C++ Primer》。此书内容比较全面,读不完没关系  ,可以作为C++的字典书籍,有疑问时随时查阅。不过首先需要重点阅读12~15章,了解面向对象的思想;弄清楚继承、多态、虚函数的原理,由于大部分游戏核心算法都使用C++开发,这样在逆向游戏时会很有用,在逆向基础部分还会重点介绍。有了语言基础之后,就可以开始我们的安全编程之旅。

进程与线程,为游戏安全编程的基础知识,推荐读者阅读《Windows编程循序渐进》第12章,很简洁形象的对进程线程进行了描述。在此基础上可以拓展阅读下第14和15章,掌握进程间通信和线程同步的原理,尤其进程间通信在编写外挂时用的较多。若读者想深挖可继续阅读《Windows核心编程》第4和6章,此书会对进程线程就行更加详细的介绍。 

网络通信(TCP/IP通信),在分析游戏时网络通信是需要重点关注的部分。推荐读者阅读《Windows编程循序渐进》第7章,同样很形象的介绍了TCP、UDP通信并且有很好的测试用例,相信会很好的提升读者套接字编程的水平。

PE文件,不论是游戏还是外挂都是PE文件,无论是开发还是逆向PE文件格式都是核心基础知识。推荐读者阅读《加密解密(第三版)》第10章PE文件格式,此书对PE文件中的输入表、重定位等都有详细介绍,方便后续对PE文件加壳和脱壳的学习;而且用一个完整的PE文件分析工具作为实例,相信对读者PE文件的认识和Windows开发能力都会有提高。

注入,一般情况,外挂展现功能的第一步就是需要将自身完美注入到游戏进程中。注入的方式有很多,如:消息钩子、注册表、dll劫持、远程线程、APC等等,后续文章会进行详细介绍。这里推荐读者阅读《Windows核心编程》第19~22章,了解DLL注入的详细原理。

HOOK,是外挂实现功能的基本手段之一,HOOK的方式也多种多样,如:IAT HOOK,Inline HOOK,虚表HOOK,SSDT HOOK等。推荐读者阅读《Windows编程循序渐进》第19章钩子部分,学习HOOK的最基本原理,在后续实例文章中可以灵活运用。

Windows安全编程中还有很多技术需要在外挂编写过程用到,这里就不一一列举,有兴趣的读者可以参考(http://bbs.pediy.com/showpost.php?p=514651&postcount=2),了解句柄、模块加载流程等技术。

到此为止,基本以覆盖了外挂技术中的大部分内容。但是大部分游戏都从系统底层做了很多的防护,感兴趣的读者可以深入Windows内核体验游戏安全攻防的乐趣。驱动开发入门推荐读者阅读《Windows驱动开发技术详解》,此书比较基础,能够让读者了解驱动开发测试的基本流程。进阶可以阅读《寒江独钓——Windows内核安全编程》,里面包含大量侧重安全的驱动实例可以调试学习。若对底层非常感兴趣的读者还想继续深挖,推荐阅读《Windows内核情景分析》,基本上从源码上介绍Windows操作系统,有时间的读者可以按章序阅读,若感觉书中内容过多,可以针对前面介绍的安全技术对应的章节阅读。

2.逆向基础

有了一定开发基础后,让我们来接触逆向分析技术。大师级的游戏安全工程师对软件的逆向分析技术的理解都很深入,据说他们在编写高级语言代码的同时,心里会浮现对应的汇编代码。

若读者无法读懂基本的汇编语言,笔者推荐《汇编语言(第2版)》第2~6章,了解基本的汇编语言指令,在有C语言学习经验后,相信读者可以快速掌握汇编的基础知识。

笔者在开发基础中说过,大部分游戏的核心算法都使用C++开发,现在在掌握了C++和汇编后,是否就马上可以相结合呢?答案是否定的。从C++到汇编的转换首先就是要掌握C++反汇编的一些基本原理,然后就是读者的大量逆向实践了,来积累逆向经验。推荐读者阅读《C++反汇编与逆向分析技术揭秘》第2~13章,此书将C++的基本数据类型、启动函数、各种C++表达式、流程控制、数组指针、结构体、类、虚函数等在内存中怎样以汇编形式存在进行了详细的介绍,相信读者阅读后,再经过一定的实践可以达到看C++心中有汇编或看汇编心中有C++的境界。

动态调试,首先得熟练使用Olldbg和Windbg两个调试工具。对于Olldbg,首先推荐读者阅读《加密解密(第三版)》第2章,了解Olldbg的基本使用方法,深入进阶可以参考(http://bbs.pediy.com/showpost.php?p=514664&postcount=2),理解Olldbg一些功能的原理和插件的编写。对于Windbg,读者可以参考(http://bbs.pediy.com/showpost.php?p=514666&postcount=4)了解Windbg基本的调试技术。在熟悉了基本的调试工具后,便可以通过大量的调试实践来积累分析经验,推荐读者阅读《加密解密(第三版)》第5和13章,里面的每一小节均有一个调试用例,阅读的同时可以亲自调试一下加深印象,最后一节对常用断点设置技巧也总结的很精辟;13章讲解调试过程中基本的脱壳技术,如今外挂和游戏都加有各种壳,通过阅读此章了解常见的壳和基本原理很有必要。若读者觉得调试用例太少,可以参考(http://bbs.pediy.com/showthread.php?t=73634),里面对脱壳技术、破解技术和软件保护进行了分类,拥有更多的分析实例满足读者的需求。现在的外挂为了生存,基本都会加高强度的壳来保护自身不被游戏安全工程师或同行竞争者攻破,对这方面有深厚兴趣的读者可以参考(http://bbs.pediy.com/showthread.php?t=66575),这是看雪论坛上的一个壳技术的一个专题,值得仔细研究。

静态分析,首先得熟练使用IDA静态分析工具。IDA相对与Olldbg操作复杂一些,推荐读者阅读《IDA权威指南》第4~9章,了解使用IDA的基本操作和IDA的特性。在使用IDA分析游戏时,可能需要很多重复性操作,阅读《IDA权威指南》第15章掌握基于IDA的脚本编写是个不错的选择。

逆向分析技术具有很强的综合性和实践性,掌握这项技术需要耐心和毅力。还有许多特定逆向分析方法不能一一介绍,读者可以参考(http://bbs.pediy.com/showpost.php?p=514669&postcount=6),了解不同语言对应的分析方法。

至此读者已经可以掌握调试的基本技术,若有读者想深入探索基于系统的调试技术,《软件调试》是一个很好的选择。由于游戏本身非常复杂,漏洞是无法避免的,有些外挂就有可能基于游戏的漏洞,因此,对于想深入研究漏洞的读者这里推荐《0day安全 软件漏洞分析技术(第二版)》,了解漏洞的基本原理和shellcode的编写方法。

3.游戏安全基础

如果只有开发和逆向基础还不能完全算进入游戏安全领域,在基本技术之上,读者还需要对游戏的黑色产业链有一定了解。推荐读者阅读《网络游戏安全揭密》第1~4章,熟悉整个游戏生态中存在哪些角色,这些角色之间的关系;有哪些利益点,利益的转换方式等。

相信在学习了推荐的这些书籍后,读者不论是对游戏安全的了解,还是开发逆向的基础能力都会有不少提升;对后续游戏安全相关文章的学习会更游刃有余。

 

*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

posted @ 2018-03-07 13:03  NoThx  阅读(3596)  评论(0编辑  收藏  举报