注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

风雨夜归人

专业收集资料,个人爱好!

 
 
 

日志

 
 

CALL技术入门  

2009-07-09 20:14:12|  分类: 外挂学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

平时我们自已在编程时,常常会把要实现某个功能的代码,做在一个子程序里,这样可以重复使用.

同样的游戏中也有很多的功能,也都是写成各个子程序.供游戏中的其它代码调.假如我们能找到,某个能实现某功能的关键子程序代码入口所在的内存地址,调用它来帮我来完成某种功能.我们称这种调用方式为CALL.

本文先讲解通过两种途径进行简单的CALL调用.

第一种,通过在目标进程里创建一个线程来执行那段汇编子程序段,由于其跨进程的特性,我们称之为远程CALL.

第二种,注入DLL到目标进程中,由于DLL已处于目标进程空间,可以在DLL中直接内嵌汇编CALL指令,进行调用,称为本地CALL.

注意,第二种方式由于易语言不支持直接的内嵌汇编,所以不能像C,delphi这些编程语言那么容易写了.不过不要担心.本章教程会教你轻松的搞定一切.

下面先贴上本文中,用来测试的程序代码

CALL技术入门 - 白云飘飘 - Louis333风雨夜归人

 

这个测试用的程序很简单,定义四个子程序,把这些子程序的汇编代码入口内存地址显示出来.其中 子程序3 与 子程序4 都是有返回值的.

有个编辑框会显示这四个子程序被调用时的状态提示..

下面介绍一下如何进行跨进程的 远程CALL调用.

要想跨进程进行远程CALL,就得先打开那个进程,得到其进程句柄,然后再创建远线程,并且设置该线程的启动入口地址为要CALL的汇编子程序入口内存地址.

CALL技术入门 - 白云飘飘 - Louis333风雨夜归人 

使用创建远线程()与调用函数 进行 跨进程调用

CALL技术入门 - 白云飘飘 - Louis333风雨夜归人

远程CALL示例.exe 运行效果.

这个远程CALL的例子里,对于 CALL 子程序1 与 子程序2 都是用 创建远线程() 进行调用的.

每次 CALL 子程序1 时都会发现线程ID是会变的中,如会提示 子程序1被调用.线程ID=3024

由于多线程最多只能传一个整数型参数,所以 子程序3 改用了 调用函数() 支持无限个参数,并且能获取调用后的返回值. 子程序3.返回=8888

子程序4这个比较特殊,是一个文本型参数,对于非4字节的数值参数时,例如文本型,双精度小数型,及数组或一些自定义数据类型,都需要先把这些数据写到某内存里,然后传参数时传该内存地址.

而且子程序4返回值也是文本型的数据,而调用函数的返回值统一是整数型,所以若非4字节的数值返回值,一切都该看作为内存地址.上面的例子,对于CALL 子程序4 之后,再采用 内存_读文本型() 读取其返回的文本型数据.

下面再看一下 本地CALL 的例子,本地CALL 需要注入DLL到目标进程里.

下面贴上DLL的代码.

CALL技术入门 - 白云飘飘 - Louis333风雨夜归人

采用安装线程DLL的mydll.e接口代码.Home键呼出窗口1

上面是DLL注入的接口代码,设置了按键盘上的 HOME 键来呼出 窗口1

下面是窗口1里的代码

CALL技术入门 - 白云飘飘 - Louis333风雨夜归人

mydll.e的窗口1代码.无参数的CALL可以用 调用入口() 有参数的可以用 调用函数() CALL() 调用机器码() 等

CALL技术入门 - 白云飘飘 - Louis333风雨夜归人采用注入的方式,因为DLL处于目标进程中,可以发现,按上面的调用子程序1与按本地调用子程序1的显示的线程ID是一样的,不会变的,因为同一个线程里.而且参数一的进程句柄直接使用-1即可.

除此之外就是在本地调用 子程序4 时,要传的文本型参数不用再进行写内存了,可以直接使用我们自已的文本型变量,只要取该变量指针来用即可,包括要取文本型的返回值,可以直接使用 指针到文本() 读取,不过我不推荐使用 指针到文本(),以免出现内存访问违规而进程崩溃掉..

那么对于这两种,远程CALL与本地CALL.应该采用哪个比较好呢?我认为,如果操作不多的话又不想注入那么麻烦,选远程CALL还是比较好的,但若你想要做的事情很多,涉及的东西不少,比如还要频繁读一些内存等,而且要调用的CALL也多时,最好是注入DLL.因为注入DLL后就与目标进程在同一个空间里.不管要操作啥都会很方便.

  评论这张
 
阅读(2455)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017