您的位置:逆风者 汇编技术 正文
原作者:www.upwinder.com 添加时间:2007-09-01 原文发表:2007-08-31 人气:36 来源:未知

本文章共2767字,分2页,当前第1页,快速翻页:
 
本打算直接公布 "幻想修改器 1.1" 源代码算了,但是由于它的大部分代码都是我第一次学 Masm32写的,注释又少,代码也不规范化,对于初学者来说极不方便,所以还不如直接把编写这种软件的思想写出来还好些,这也是对那些支持我的人的一个交待.
逆@风@者

时下,网络游戏横行江湖,单机版的游戏修改器已是昨日黄花,好像已无用武之地。但是我们了解了单机版的通用游戏修改器的编程原理后,再结合网络知识应该不难写出“外挂”来。

其实像 “金山游侠”,“FPE”,等等编写这些游戏修改器并不难,只不过是你不知道这些东西的思路罢了。也难怪网上关于制做通用游戏修改器的教程可以说是没有,可能是因为商业原因吧!大部分都是针对于某一个游戏的专用修改器而写的。(闲话少说!)

由于时间原因我不能一一细写,只能把那些关键部分写一写或描说。(终于开始了!)

一 、初始的准备工作。

   首先我们可以这样想一下,要改写游戏的数据值,必需要有能对这个游戏进程中的数据改写的所有权限。这样我们才可以随心所欲的改游戏中的生命值,能量,锁定金钱等等。由于 windows中是不允许进程之间直接相互读的,所以我们要按照 windows的要求来操作方可进行读写。步骤如下:
   要想能对某一个进程的数据进行读写,必需要获得这个进程的句柄,然后用Windows提供的ReadProcessMemory和WriteProcessMemory这两个API来读写游戏的内存。 
   获取进程句柄的方法很多,相信大家都应该知道吧!我还是提一下吧,第一种就是用CreateToolhelp32Snapshot,遍历系统中的所有进程,然后从中得到进程 ID后,再用 OpenProcess,打开,参数中一定要指明PROCESS_ALL_ACCESS,否则以后在写或查目标进程数据时会产生错误。第二种是用 Enuwindows(也就是递归法),或 Getwindow来得到所有窗体的句柄后用 GetWindowThreadProcessId,得到进程ID,再用 OpenProcess打开得到。需要说明的是,如果用第二种方法你还要过滤一下,因为有很多系统窗口是不可见的而且还要判断此窗口是不是父窗口,窗口标题是否为空。
所以还要加上 (IsWindowVisible,GetParent)这两个函数来判断,要不然展现在用户面前的是一大堆没用的信息。
一般的通游戏修改器都是采用的第二种方法都是以窗口标题来显示的用户只需点击相应的标题就可以了。
   由于时间原因 CreateToolhelp32snapshot 和 Enumwindows我就不介绍了,我是采用的第一种方法
   上面那两个许多资料上都有介绍。我就说一下如何用 Getwindow吧!

          invoke GetDesktopWindow  ;得到桌面窗口的句柄 
invoke GetWindow,eax,GW_CHILD ;寻找桌面窗口的第一个子窗口
invoke GetWindow,eax,GW_HWNDFIRST 
mov phwnd,eax       ;为这个子窗口寻找第一个兄弟窗口。
invoke GetParent,eax ;判断这个窗口是不是父窗口
  .if !eax ;如果这个窗口没有父窗口,则置标志
mov parent,1     
  .endif
mov eax,phwnd
.while eax
.if parent
mov parent,0 ;复位标志
invoke GetWindowText,phwnd,addr titl,sizeof titl ;得到窗口标题文字
.if eax  ;如果标题文字不为空则发到组合列表框。
invoke SendDlgItemMessage,hWinMain,combox1,CB_ADDSTRING,0,addr titl
.endif
.endif
invoke GetWindow,phwnd,GW_HWNDNEXT ;寻找这个窗口的下一个兄弟窗口
movphwnd,eax
invoke GetParent,eax
.if !eax
invoke IsWindowVisible,phwnd ;再判断这个窗口是否是可见的
.if eax
mov parent,1
.endif
.endif
mov eax,phwnd
.endw
invokeSendDlgItemMessage,hWnd,combox1,CB_SETCURSEL,0,0
   这样我们便实现了通用游戏修改器的目标进程选择功能。大家在写的过程中把符合条件的窗口句柄都保存在缓冲区中并把位置排列的和发到组合列表框中的窗口标题文字一一对应,这样可以通过选中的索引号去缓冲区中取相对
应的句柄。然后再去得到进程句柄。
 
本文章更多内容1 - 2 - 下一页>>
相关文章

8086/8088指令系统
伪操作
Kmdkit的下载和安装
创建简单的窗口
数据转换操作
汇编语言与C语言的接口技术
多文档界面(MDI)
窗口子类化
DeviceIoControl接口
Win32调试API 第三部分
虚拟设备驱动程序结构
汇编语言中‘子程序’的设计方法
IDE的选择与配置
输入/输出保护
分段管理机制
HELLO WORLD进阶汇编程序系列
汇编语言的艺术(组合语言的艺术)--基本认
汇编语言---程式设计 (2)
汇编语言---程式设计 (3)
汇编语言的艺术(组合语言的艺术)--基本认

相关评论


本文章所属分类:首页 汇编技术

  热门关键字:
进制数据输出的通用程序 2007-09-12
汇编源码--showmem 2007-08-31
汇编源码--CLEAN 2007-08-31
汇编源码--hdr 2007-08-31
汇编源码--basload 2007-08-31
汇编源码--CHAR 2007-08-31
汇编源码--fxn 2007-08-31
汇编源码--alarm 2007-08-31
汇编源码--getsect 2007-08-31
汇编源码--DEV 2007-08-31
汇编源码--getspace 2007-08-31
汇编源码--frespace 2007-08-31
CIH文件型病毒检测消除程序 2007-08-31
Mixer Volume Ctrler V1.0 2007-08-31
汇编源码--COMINT 2007-08-31
自己用汇编语言写的一个病毒(源码... 2007-08-31
汇编源码--col 2007-08-31
汇编源码--BURNOUT 2007-08-31