看流星社区

 找回密码
 注册账号
查看: 2395|回复: 0

之前有位达人写的CALL(DELPHI)

[复制链接]

该用户从未签到

发表于 2011-3-27 11:40:50 | 显示全部楼层 |阅读模式
一直以来我都是在潜水,很感谢dxmqj1983的两篇原创,是他让我有动力去写这篇文章

现在网上很多人都问如何调用游戏中的CALL,这里我就演示一下如何调用一个简单的CALL,其实调用可以算是比较简单的一件事,主要就是堆栈平衡就可以了,最难的还是找CALL,这需要很强的反汇编能力,还有分析能力,我只是菜鸟一只,只能做下面这个简单的教程.
调用游戏中的CALL必须要注入才能调用,关于如何注入我就不多说了,网上很多,而且我也是刚接触DELPHI,只看了4天的《delphi7完美经典》,好像ccb也是用DELPHI的,我记得他说过^_^
好,下面我就开始正题
下面的代码包括两部分,一个是函数,一个是调用,大家应该理解的,很简单。
procedure number(num:integer);
var
sum:integer;
begin
sum:=num+485;
showMessage(inttostr(sum)); //显示结果用
form1.edit1.text:=inttostr(sum);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('aaaaaaaaaaaaaaaaaaa'); //调用函数前先showmessage,方便调试
number(45);
end;
生成程序后我们就可以接下去做了,调试当然是使用Ollydbg了,查找字符串“aaaaaaaaaaaaaaaaaaa”(上面在调用函数之前showmessage就是这个原因),下断点,运行程序,程序断下了
00453838  MOV EAX,Project1.00453858 ; ASCII "aaaaaaaaaaaaaaaaaaa" 断在这里
0045383D  CALL Project1.0042736C
00453842  MOV EAX,2D          ;2D的十进制是多少?
00453847  CALL Project1.004537C4
单步运行,到第一个CALL的时候弹出“aaaaaaaaaaaaaaaaaaa”对话框,说明下一步就是调用开始,到第二个CALL 的时候,弹出“530”对话框,说明已经调用了函数,这里第二个CALL就是关键,004537C4就是函数的入口,好了,Ollydbg就到此结束了,接着就到了实现的部分。

记住,调用CALL需要注入,我只写实现的部分。
procedure TTestForm.Button1Click(Sender: TObject);
var
Address:pointer;
begin
Address:=Pointer($004537C4);  //函数入口地址
asm
  pushad            //保存寄存器环境
  mov eax,47        //参考上面的反汇编
  call Address        //正式调用函数
  popad            //恢复寄存器环境
end;
end;

运行一下,结果出来了,是532,调用成功。

是不是很简单,VB是不行的了,所以就不要问VB的实现方法了,VC我不会,谁会的就写一下,方便一下大家。有什么不懂的,我可能不能解答了,还有一个星期就要考试了,需要奋力看书了。
PS:基础还是最重要的,如果什么都不懂,我算我给你源码,你也不会,所以尽量学好基础,熟练了,自然就很容易掌握其他语言,所以学VB的不要放弃,我之前也是学VB的,目的是做修改器-。-!我转DELPHI也是一两个星期前的事,主要是帮我的室友写武林外传的辅助。
文科一直以来都很差,所以表达不是很清楚,请多多包涵。
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-14 19:22

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表