===================首先申明:只是学习技术,不是想开发外挂=====================
关键是想不痛,那些外挂到底是怎么做到的??为什么我写字就是不行??????
首先用GDI写字是肯定不行的,绝对不停的闪,要调用游戏自己的写字符的函数!现在大部分外挂也是这么做的!
主要是想不通游戏自己写字不闪是因为游戏自己的主循环在不断的调用写字函数一直在写!
我用传奇2私服来学习,反汇编找到写字的函数以后,注射了一个DLL进去显示一个对话框,在DLL中用内联汇编的形式PUSH 把参数压入,然后CALL函数地址,字到是写上去了,但是一下就不见了!估计是被游戏刷新了!
尝试了用定时器不段循环调用,但是定时器的时间设置超过20就要闪烁了,设置到20不闪烁了就把游戏拖死了!郁闷……
单独看一个线程也把游戏拖死了!
现在大部分外挂都的数字显示功能都是调用的游戏自己的写字的函数把。但是他们怎么保证游戏不断的刷新中,不会把他写上去的字符刷掉呢??往传奇聊天框添加字符的函数地址和显示字符的地址不一样,添加字符也没问题!但是哪个不会被游戏刷新函数影响!所以可以直接添加字符到显示聊天消息的框中。
想不痛,那些外挂比如赤月外挂是怎么实现数字显示的??他怎么能写上去??我反汇编看他的DLL也调用了我找到哪个函数地址???
顶时器,不行,线程不行!他是怎么做的?????我实在是想不痛了,请教各位大大了!
====================================以下是代码===================================
调用以后字符闪了一下就不见了,字符按一下出来一下我试了一下用计时器settimer(1,20,NULL)调用,字是不闪了,但是游戏也让我拖死了………哭!单独开一个线程也不行!
估计因为我这段代码一直在调用0x004a1494;这个函数导致游戏一直卡死在执行这个函数写字符上,所以就游戏就被卡死了!
下面是代码:
DWORD a1a=0x004a1494;
__asm{
mov eax, 00e0a5ach
call p1
call p2
push 1
push eax
call p3
push 00ffffffh
push 00000000h
push 0046bb78h
xor ecx,ecx
xor edx,edx
mov eax,00e0a5ach
call a1a
}
EAX:是自己找出来的,机器重启动一次改变一次!这个问题以后在解决了,现在还是没解决写字符不闪的问题!
以上代码,能调用游戏字符函数写字,但是用SETTIMER间隔为20豪秒的话,程序就会反复去执行call a1a,所以游戏会卡死!
大侠们难的给我代码就给我点思路把,感激不尽!
----------------------------------------------------------
既然来了就多问一个问题,上面代码中mov eax,00e0a5ach本来的代码是
mov eax,dword ptr [ebp-08],这种地址直接这样调用会出错的,如何才能准确在自己的程序中找到当时EAX中的值呢?小弟菜鸟一个,不懂的问题太多了!跪请各路英雄赐教!
====================================================================================
以上CALL的也就是传奇游戏右下角显示地图名字和人物坐标的函数地址!因为用的是一个私服的MIR.dat被他修改过,找到的地址可能和你不一样!以上代码可以调用游戏中显示字符的函数也能显示出来,但是一闪就不见了!我总不能让游戏循环刷新函数调用我的DLL中的函数把??那就要动态修改游戏代码了?我觉得那些外挂不是这么做的把??附带找到的几个地址,人物状态基地址:0x4F7EF8,HP=4F7EF8+3c,,MAXHP=4F7EF8+40其他的在我家里机器上我现在记不下了,还有写其他实现功能的CALL但是都和数字显示没什么相关就没记下了反正又不是做外挂,只是想看看到底是怎么让游戏主循环不把我门写的字刷掉呢?
本来是用自己用HOHO游戏引擎写的五子奇在调用,但是怕各位不好帮我,就又花了几天用传2的私服来调试了!
请各位大大多提意见,讲讲原理把!到底要怎么写字才不闪呢?那些外挂也是用这个方法的,那么他们又是怎么做的呢?
分不够另外开贴在加!

解决方案 »

  1.   

    老大,你是个高手
    CSDN里能回答你的问题的人可不多!你可能会失望的!
      

  2.   

    我的看法是,把游戏拖死的原因是你的hook和游戏程序都同时在向画面上写字.
    建议解决办法是:既然知道了游戏要调用的函数的地址,完全可以拦截它的调用,让这个地址指向你自己的函数啊!
    纸上谈兵,只是我的一点见解!
      

  3.   

    晕,那天我玩传2私服的时候聊QQ很不方便,突发奇想,想把QQ消息显示到游戏中!我开始还以为好做也?那些外挂不是也有数字显示的功能吗。结果一做……问题一大堆!我只是个菜鸟,现在才发现那些写外挂的技术才牛……佩服他们!他们写一个游戏外挂不是把游戏都分析透了?????恐怖……
      

  4.   

    我的看法是,把游戏拖死的原因是你的hook和游戏程序都同时在向画面上写字.
    建议解决办法是:既然知道了游戏要调用的函数的地址,完全可以拦截它的调用,让这个地址指向你自己的函数啊!
    纸上谈兵,只是我的一点见解!
    ====================================================================================
    我估计把游戏拖死的原因是调用CALL后游戏就去执行写字符了,不段的调用,时间间隔太短的话就会导致游戏一直去执行这个CALL(他里面还有很多CALL,和JMP)游戏有不能在做其他事所以游戏被拖死了
    ========================================================================
    ,完全可以拦截它的调用,让这个地址指向你自己的函数啊! ///我是用DLL注射进去的那不是就设计到动态修改游戏代码和DLL函数定位的问题,我不过是想实现把QQ消息真正显示到游戏窗口中,不要采用这么复杂的办法把,那些外挂也不是这么做的呀
      

  5.   

    欢迎各位牛人来留下你宝贵的看法和意见来讨论!要是太注重问题分值的话,小弟这里还有1500可用分!都贡献给牛人也无所谓了!只是我等级太低开不了那么多分只有开贴在加分了!我确实是想不通,用SETTIMER和线程都会把游戏拖死?那外挂牛人门用的什么方法????????
    也可能是我太笨了没想到把!
      

  6.   

    这种方法不很复杂啊!你怎么知道外挂不是用这种方法实现的呢?
    况且这也算是一种有效方法啊,就算是没有人用过,为什么你就不能用一下呢?===================================================================================
    ,完全可以拦截它的调用,让这个地址指向你自己的函数啊! ///我是用DLL注射进去的那不是就设计到动态修改游戏代码和DLL函数定位的问题,我不过是想实现把QQ消息真正显示到游戏窗口中,不要采用这么复杂的办法把,那些外挂也不是这么做的呀
      

  7.   

    感谢 code8238(二进制动物), 我太笨了实在想不出除了你说方法以外更好的方法了,用你的方法调试成功了!不过代码没写完一边用Ollydbg调试一边写的!这几天的调试还是学了不少东西,真高兴!
    好了马上结帖给你分!
    但是还是想知道那些外挂是不是也是我这样做的??或者他们有更妙的方法?
    下面附调试完成后的图一张:
    http://hack.gameres.com/upload/sf_200533123011.bmp