我个人对外挂是非常感兴趣的,学习编程也有一段时间了,所以更加好奇外挂是怎么写的?
外挂的基本概念:
一般是指在电脑运行中,一个程序通过某种事件触发而得以挂接到另外一个程序的空间里(常用的触发事件有键盘触发,鼠标触发,消息触发等),挂接的目的通常是想改变被挂接程序的运行方式。
我们都知道游戏分为单机游戏和网络游戏。单机游戏的外挂只是修改一些游戏数值,而网络游戏的外挂则涉及到网络数据的拆包与封包。
一、先说一下写一个外挂需要什么条件
1、熟练的C语言知识,目前的外挂大部分都是用BC或者是vc写的,拥有熟练的C语言知识是写外挂的基本条件。
2、具有很强的汇编基础。一般游戏都不可能有原代码的,必须靠反汇编或者跟踪的办法来探索其中的机理 ,所以有强的汇编基础也是必不可少的条件。
3、熟练掌握跟踪和调试的工具。有了上面2个条件后,掌握一些工具也是很有必要的跟踪的工具,softice当然是不二之选,至于反汇编的工具,我推荐用IDA PRO这个工具反汇编出来的代码结构清晰,非常好读如果你不具有上面的条件,还是先把基础打好,再来写外挂吧,一分耕耘,一分收获,天下没有白掉的馅饼的。
二、写外挂面临的基本技术问题
1、修改进程的执行代码。要修改进程的执行代码,要先取得进程的ID,如果是由外挂程序启动,返回值里就有进程ID,如果不是的话,需要用findwindow找到窗口句柄,再用GetWindowProcessID取得进程ID,取得进程ID以后,就可以用writeprocessmemory来修改进程的执行代码了,使程序按照我们的意愿来执行,石器外挂里的不遇敌、寸步遇敌就是用这样的方法来实现的。
2、截获外挂发送和接收的封包。除了通过修改代码来实现的功能以外,很多的功能都是通过修改封包来实现的,要修改封包,首先要能截获它。 第一步是要跟踪出发和收的位置,至于怎么跟踪,我以后会提到,找到位置以后,有2个办法,一是在那个位置加一个jmp语句,跳到你的处理函数位置,处理完后,再跳回来,这种方法要求比较高,需要处理好很多事情,另一种办法是往那个位置写条能造成例外的指令,比如int 3,然后用DebugActiveProcess调试游戏进程,这样每当游戏执行到那个位置的时候,就会停下来,到外挂程序里面去,等外挂程序处理完以后,用ContinueDebugEvent 继续运行程序。