HanDs
管理员

[Delphi文章] call游戏函数 





学习中请遵循国家相关法律法规,黑客不作恶。没有网络安全就没有国家安全

本站需要登陆后才能查看

现在网上很多人都问如何调用游戏中的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也是一两个星期前的事,主要是帮我的室友写武林外传的外挂。
文科一直以来都很差,所以表达不是很清楚,请多多包涵。


学习中请遵守法律法规,本网站内容均来自于互联网,本网站不负担法律责任
call 游戏函数
#1楼
发帖时间:2016-7-9   |   查看数:0   |   回复数:0
游客组
快速回复