本章介绍一下做手游外挂需要的了解和掌握的技术并推荐相关的书籍, 方便读者对自己的学习路线做规划。

  1. Arm汇编
    现在全部ios设备和绝大多数android设备都使用的是arm架构的cpu, 做外挂经常需要分析和修改汇编指令,所以对arm汇编指令的了解是必不可少的部分。arm汇编只需要了解常用的赋值,跳转,算数运算,移位运算, 堆栈操作,内存读写指令和函数调用约定即可, 在分析时如果发现不认识的指令再查手册(《ARM Architecture Reference Manual》)。

这一部分的介绍可以参考《Android软件安全与逆向分析》的第六章。

  1. C/C++语言
    虽然android平台主要使用java语言, ios平台主要使用Object C语言来编写应用,但是考虑到跨平台性,游戏引擎的主逻辑往往会使用C/C++编写,通过OpenGl来绘制界面。 而且目前流行的cocos2dx引擎也是需要使用C++来编写游戏的主要逻辑(lua等脚本编写逻辑的游戏会在后面介绍),而且我们在制作外挂时大多数情况下都是使用C/C++来编写。所以C/C++是极重要的技术基础。

读者在学习C/C++需要重点关注其中指针的概念和使用, C++虚函数调用方法。

这一部分介绍可以参考《C程序设计语言》 (Brian W. Kernighan, Denis M. Ritchie, TCPL)和《C++程序设计语言》(Bjarne Stroustrup)。

  1. Android开发
    做android平台上游戏的外挂最终也是要运行在android平台上的, 所以android编程当然也得了解。无论是android平台的游戏还是我们制作外挂,主要逻辑代码还是会在native层实现, 所以android开发的最低要求是只需要了解程序的生命周期,native开发即可。笔者推荐《Android C++高级编程—使用NDK》(Onur Cinar)中的第一章环境搭建和第二章NDK编译运行, 第三章JNI编程。能够实现通过jni 使java与native层代码交互即可。

  2. IOS开发
    和android平台一样, 要逆向分析ios平台的游戏也需要了解ios平台的应用的生命周期、Object C语言的特性和xcode的使用。

笔者推荐《ios 7 Programming Fundamentals》这本书的第三章,第四章,第五章对Object C的基础特性介绍, 还有第六章,第七章对xcode的使用介绍。

另外在IOS上面做外挂又与正常的IOS应用开发不太一样,我们的插件一般是注入到目标应用中改变目标应用的行为, 并且需要在越狱设备上运行。所以需要了解基于MobileSubstrate的越狱开发。

笔者推荐Theos这个越狱开发框架。

  1. 了解常用游戏引擎
    不同游戏引擎用来编写游戏主逻辑的语言、编译器可能不同,需要的逆向方法和工具也不一样。例如:Unity3D游戏大多使用C#开发,游戏主逻辑大多打包在Assembly-Csharp.dll中, 而cocos2dx游戏一般采用了C++或者lua语言开发。如果了解了各种游戏引擎的特性,就能在拿到一个游戏时快速识别出游戏主逻辑模块,并且采用合适的逆向工具。

另外深入了解游戏引擎也能帮我们快速定位所关心的游戏逻辑, 并实现相关的外挂功能。 例如:如果我们知道游戏引擎实现碰撞检测的逻辑实现, 就能轻松实现穿透类、 吸金类和全屏攻击类外挂。

笔者推荐《cocos2d-x游戏开发技术精解》的第三章, 理解摄像机、导演、场景、精灵的概念。还有第五章, 了解用户操作事件的传递机制。 第七章, 了解碰撞检测机制。Unity3d的基础可以参考《unity 4.x 从入门到精通》的第四章和第七章,另外了解Unity3d的AssetBundle机制, 参考第十八章。

  1. 静态分析(ida使用)
    制作外挂无非是获取游戏的关键信息和更改游戏的关键逻辑,所以对游戏本身的了解就是第一步了。我们制作外挂的绝大部分时间都是花在分析游戏逻辑中,静态分析技术是分析游戏逻辑中最常用的手段之一了。如果游戏逻辑使用了C/C++、Object C,我们一般使用ida来做静态分析。

IDA的基本使用方法可以参考《IDA Pro权威指南(第2版)》的第四章到第九章。另外有时候IDA的基本功能不能满足分析的要求时需要我们自己来定制一些功能, 所以还需要了解IDC脚本的编写和使用一些现有的实用插件, 可以参考《IDA Pro权威指南(第2版)》的第十五章和第二十三章。

另外在android下,unity3d游戏会把他的主逻辑模块打包在Assembly-Csharp.dll中,我们需要使用ILSpy来反编译它,从而分析游戏逻辑。ILSpy的使用可以参考 这个展示视频。

  1. 动态分析(android、ios调试)
    我们如果遇到主逻辑加了反静态分析的技巧, 纯靠静态分析将会非常困难, 而且也没有必要强行做方案对抗。这个时候就需要使用动态调试了, android下我们一般使用IDA来动态调试(虽然也可以用gdb,但是目前该方法还不成熟, 使用起来很不方便)。

IDA动态调试功能可以参考《Android软件安全与逆向分析》的第八章。

IOS下的动态调试可以使用gdb或者lldb+debugserver, gdb的优势是不需要mac机器也能调试, 但是它只支持32位的游戏, 需要先把32位指令集剥离出来才行。 而lldb+debugserver是IOS下动态调试的完美解决方案, 不过这个调试方式需要使用mac下的lldb工具。读者可以参考这篇译文。

另外在动态分析时也可能会遇到游戏做了反调试功能, 这个时候就需要通过静态分析找到反调试代码, 并且去掉该限制。 所以静态分析与动态分析是相辅相成的。

  1. 其它一些需要稍微了解的语言
    我们逆向中主要需要掌握的是arm汇编、C、C++、Object C。 但是除此之外还是会遇到其它一些语言, 对于这些语言我们只需要遇到他们的时候能够读懂基本逻辑, 能够做小幅度改动即可。比如android软件的经常使用的java, 以及反汇编出来的smali代码, Unity3d主逻辑使用的C#语言,以及反汇编得到的IL代码, 某些游戏会使用lua脚本或者python脚本来编写主逻辑。

笔者推荐《Android软件安全与逆向分析》中的第三章, 《加密与解密(第三版)》中的第九章。

  1. 静态修改
    在通过逆向分析了解了游戏, 并且找到了所关心的关键逻辑代码之后,就开始外挂的制作了。既然已经知道了游戏逻辑代码的位置, 那么最简单粗暴的方法就是直接修改了。

但是针对不同语言编写的逻辑会有不同的修改方法。比如用C/C++, Object C编写的逻辑,我们有时候会使用IDA来直接修改二进制文件,这种操作可以参考《IDA Pro权威指南(第2版)》的第十四章。

针对java代码,一般我们会用apktool反编译后, 直接修改smali代码, 然后用apktool重新打包、签名。笔者推荐参考《Android软件安全与逆向分析》的第二章。

针对C#编写的逻辑,我们会用ildasm反编译后, 修改IL指令,然后通过ilasm编译成dll, 替换原安装包中的对应dll。可以参考这篇文章。

  1. 动态修改
    静态修改方法虽然简单粗暴,但也有一些局限性,有些游戏会针对静态文件做完整性校验或者签名校验, 我们也没有必要直接做方案对抗。这个时候就可以通过动态修改的方法来达到目的。

动态修改实际是修改进程中的内存值、代码或者通过call函数的方式影响游戏逻辑。而要实现这些功能一般都需要先将外挂模块注入到目标进程(在android上可以利用系统的机制来达到不需要注入模块就能修改数据段,这个后面的文章会有介绍), 之后再通过直接写进程空间的方式修改数据, 可以通过patch代码或者动态hook的方式修改游戏逻辑。

Android上的模块注入可以参考这份代码。动态hook一般活使用substrate框架, 具体使用方法可以参考这篇文章。

IOS上的模块注入和hook都有一套非常方便的框架MobileSubstrate,而且开发插件也有好用的开发框架theos, 可以参考这篇文档了解其使用方法。

  1. 综述
    由于外挂与反外挂处于持续对抗中, 所以新的技术和方法都在以极快的速度发展,读者具备这些基本能力之后也需要持续关注新的技术并且了解行业内其他人的工作成果。

手游端游辅助需要掌握那些语言相关推荐

  1. 游戏绑定计算机绑定什么用,lol手游端游绑定有什么用

    LOL手机游戏与最终游戏有什么区别? 它适合训练吗? 培训绝对合适,是否没有减少太多,应该与最终游戏没有什么不同,但是应该比最终游客要好很多,现在使用手机玩游戏和计算机都非常方便 太麻烦了 如何绑定手 ...

  2. LOL手游锤石上线吓坏玩家?英雄设计被吐槽,玩家:还我端游锤石

    自从LOL手游上线后,国内的玩家一直期待国服的到来,虽然B轮测试也要结束了,但据说正式服上线还需要一段时间.不过,国际服更新的脚步从来没有停止过,像是近期就上线了锤石这个英雄,但英雄的设计让大家觉得很 ...

  3. 情怀java手机网游_经典端游移植手游 “情怀”赋予老IP全新活力

    原标题:经典端游移植手游 "情怀"赋予老IP全新活力 腾讯旗下<天涯明月刀>手游在近日开始了封测,这款经典的国产网游也正式加入了手游的大家庭中,事实上很多知名的网络游戏 ...

  4. LOL手游2.3版皮肤大更新,端游玩家:新春级和珍稀级会返场吗

    有一直关注LOL手游动向的玩家都清楚,自从国服内测版上线之后,热度持续上涨,近日最火的一个话题莫过于2.3版本,里面的内容赶上一次大规模更新的节奏,东西实在是太多了,不仅有日常的各大英雄的调整,最可怕 ...

  5. CF双端总决赛还是LGD总决赛?端游战队挺进决赛,手游已拿三连冠

    今年的CF双端总决赛依旧看点十足,CFPL在昨天下午总决赛资格对决中,R.LGD最终以3:0击败BS挺进总决赛.虽然两队相遇总有一支要晋级,但没有想到BS战队居然被LGD零封.当天晚上BS俱乐部老板白 ...

  6. html 完全复制div中的内容_LOL手游现在远非完全体,未来还有哪些端游内容会加入手游中?...

    LOL手游上线已经有一段时间了,虽然绝大多数情况下LOL端游的内容被继承到了手游当中,但是仍然有一部分端游的内容尚未出现在手游之内.今天小编就带领大家来盘点一下,那些未来可能出现在手游当中的端游内容. ...

  7. dnf最新地图编号2020_2020手游崛起端游没落?网易新端游好玩刺激能搬砖,网友:妙...

    2020真的是手游界丰收的一年,先是有以休闲养生吸引到无数用户喜欢爆火的<江南百景图>和<阴阳师:妖怪屋>,又有硬核武侠手游<天涯明月刀>以及即将要终测的东方幻想题 ...

  8. 中国网吧 20 年往事,端游式微、手游主宰

    作者 | 单一 本文经授权转载自锌财经(ID:xincaijing) 从今年3月底开始,被封禁了一年多的游戏版号又开始陆续发放.漫长的游戏寒冬,终于看到了春天的影子. 但在同属泛游戏的网吧产业里,却依 ...

  9. [知乎] 端游、手游服务端架构演变

    本文版权归 知乎 韦易笑 所有,此处为转载+收藏,如有再转,请于作者处获得授权并于文章篇头处标明原创作者及出处,以示尊重! 作者:韦易笑 链接:https://www.zhihu.com/questi ...

最新文章

  1. mysql通用分页_MySQL海量数据的通用存储过程分页代码
  2. Linux文件查看命令图解
  3. VS2012调试ReactOS源码环境搭建4 - 生成ReactOS镜像和VS解决方案成功
  4. ajax 下拉刷新 上拉加载更多,局部刷新iscroll控件的具体使用(下拉刷新,上拉加载更多)...
  5. php集合与数组的区别,java集合与数组的区别
  6. mysql中基本的DML语句
  7. Ubuntu 下安装 输入法
  8. python excel插件_django使用插件下载excel的方法
  9. JSP + AjaxAnywhere页面开发规范
  10. 软件实施工程师到底是干什么的?全方位介绍实施工程师的职责要求和发展前景
  11. IPA-蛋白质组、代谢组、转录组分析利器
  12. 考研计算机考点精讲课程笔记新东方,新东方词汇笔记非常完整版
  13. C#代码实现 - 扑克牌排序
  14. 乾隆皇帝大年夜都吃啥?
  15. 让你的linux fedora 超过mac帅
  16. java矢量图_java – 矢量图形在iText PDF
  17. 路灯远程无线监控系统
  18. 联想拯救者y7000键盘有几个按键失灵_联想 拯救者Y7000P 键盘失灵怎么办?
  19. 【Python-基础】第五章 转圈圈(杨淑娟)
  20. 【工具篇】01. 下载与安装 ❀ 数据包分析工具 Wireshark

热门文章

  1. 艾永亮超级产品:企业做竞品分析的三大方向
  2. 逻辑回归对信用卡欺诈进行分析
  3. Meteor安装方法
  4. Fighting 2019!
  5. python实现字符串反转(如abcde反转为edcba)
  6. 电信诈骗导致临沂多名学生走进天堂
  7. [附源码]计算机毕业设计springboot防疫物资捐赠
  8. 使用ffmpeg播放视频文件的过程
  9. oracle数据库 生成awr报告、ash报告详细步骤
  10. python 爬虫抓取心得分享