记得采纳啊
你代码太乱了,根本没法看,手动整理了下,苦逼。
你找的地方根本不对,没法注入,这是其一。
其二就是,就算你的功能函数是对的,不给我OD,起码也给个IDA静态分析下吧。给这么一段,神仙也写不出注入代码来。
你这里的2个call,一个是ws2_32.send,一个是ws2_32.recv.分别是windows系统中的收包/发包函数。现在是在系统领空的,你在ws2_32.,dll里,这里根本就不在游戏的主线程中,不可能有打坐功能。自己进去send内部,在send头部下个断点,或者在command bar 里 bp send。这两个都是在send头部下断。
注意避免心跳包干扰,然后去游戏执行打坐功能。断下来后Ctrl+F9,执行到返回。一般次数要多一点,因为一开始2-3次还是在组包函数里,外面才是正常的游戏功能。不确定的话可以返回2层以后在每次返回后下断,不放心可以多下点。这个层数跟游戏有关系。一般从明文call出来,不会超过5层就能找到合适的调用接口。
断点下完了,F9游戏跑起来。看看是否马上会有断点断下。断了的删了,应该是层数返回的太多,跑到GUI上去了,肯定不是。然后执行些无关紧要的 *** 作,把断下来的断点删掉。
然后打坐,看看第一个断下的断点,那个call是什么形式。首先看看调用接口好不好,push参数多不多,push了几个,有没有ecx赋值,这个一般要进去看retn语句,反正自己细看下,找出参数个数。
然后找个代码注入器,写个汇编测试下,能用最好,崩溃了也很正常。看看push参数个数是否正确,多查找一下。
测试成功了,就要找参数来源了。这个是OD基本功,跟着反汇编层层返回,直到找到基址。
一般来说,当前断下的位置不一定是最合适的调用位置。找参数之前可以长个心眼,看看这个call的内层call的参数含义是否更明确。或者你找到了这个call,它的push参数,都是[esp+0xXXX]读取的,如果从堆栈看都是外层call的push参数,可以考虑是否调用外层call来的更方便。
总之就是要够鸡贼,怎么好弄怎么来。
都找到了,请用E,Delphi,VC等写出注入程序,用内联汇编嵌入你的代码,完成调用。
基本就是这样了,祝你成功,如果感觉我这些还够辛苦费,请采纳。
您好,按照传统的方法是首先找到要移动的目标地址,而这个地址由X,H,Y的坐标组成。而我们首先就 是要找到目标地址的X,H,Y的坐标吧,按照传统的方法我们首先看游戏地图上的坐标值,然后通过CE来定位,这样基本能找 到目标坐标!可是完美世界,我用这个方法找了很久,直接被无视了,居然找不到。这让我非常的郁闷,连续找了2 个小时,还是无法定位,这样我很郁闷! 这个时候我就在想,难道游戏界面上显示的坐标是经过转换了的,并非内存中真实的坐标值? 有了这样的想法,我就大胆的推测,如果我能找到真实坐标值,然后通过真实的坐标值用CE来定位,从而找到目标坐标值。那么现在关键的是如何找到关键的坐标 值呢?我就想到了以前学的东西,当前的坐标值基本上是和在人物的信息里面,这样就有了办法了, 首先在OD中来到人物基址,首先我们来到人物血量附近,然后我们看看偏移,看看那些数据最像坐标值!然后用浮点类型显示出来,然后找到自己觉得比较像的数 据!既然有了定位目标,好的 我们就来观察数据的变化,总所周知游戏人物在移动的时候,x,h,y坐标值会产生变化,我们回到游戏移动一下人物,然后在OD的数据窗口看下你关注的数 据,是否在变化(具体变化我就多解释了。。。。).ok 这样我们就找到了人物当前真实的坐标值,那就好办了,马上打开CE,添加3个指针 将X,H,Y的添加过来!添加之后,我们就更具下面添加的数据用传统的方法来找到目标的坐标值!呵呵,就用这种办法,皇天不负有心人啊。我终于定位到了目 标的坐标值了! 哈哈,有了目标的坐标值,我们就可以通过这个目标地址下断,找到人物走路的关键CALL了。然后就是分析CALL了! 呵呵。。。。到目前为止,我成功的把目标坐标,和走路CALL都找到了,写了代码测试,已经完全可以用了! 下面是完美世界2012走路CALL的代码! 哈哈。。。。。兴奋啊。。。。。Code:
procedure CallZL(x, h, y: Single)//三个参数, 就是目标的坐标!哈哈哈哈哈哈哈。。。。
var
C1, C2, C3, C4: DWORD
xhy, xhy1: array[1..3] of Single
base: Integer
begin
C1 := $0046DDF0
C2 := $00472200
C3 := $00472350
C4 := $0046E260
xhy[1] := x
xhy[2] := h
xhy[3] := y
xhy1[1] := 0.10
xhy1[2] := 0.20
xhy1[3] := 0.21
//dd [[[0AFF144]+1c]+34]
base := GetBase
asm
//Call 1
mov esi,base
mov ecx,[esi+$1050]
push 1
call C1
//Call2
mov edi,eax
LEA EAX,xhy
push eax
push 0
mov ecx,edi
CALL C2
//Call 3
LEA ECX,xhy1
LEA EDX,xhy
push ecx
push edx
mov ecx,edi
CALL C3
//Call 4
push 0
push 1
push edi
MOV ECX,[esi+$1050]
push 1
CALL C4
end
end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)