OD如何找call

OD如何找call,第1张

用OD打开进程以后登录人物跑到一个空地,确保一切正常以后回OD下断(bp send)测试了一下就算什么都不 *** 作,OD也会每隔几秒断到一次send乘这个基本固定时间中断的一次结束以后在聊天窗口里打句话发送,OD成功断下断在007682A6(WS2_32.send)上面(打bp send当然是断在send上面啦,然后层层退出去找我们要的)敲一次ctrl+F9,地址转到了0058446E00584459 |. 8B0D ACCB9000 mov ecx, dword ptr [90CBAC]0058445F |. 6A 00 push 0 /Flags = 000584461 |. 6A 01 push 1 |DataSize = 100584463 |. 68 E8399000 push 009039E8 |Data = elementc.009039E800584468 |. 51 push ecx |Socket =>FC00584469 |. E8 383E1E00 call \send0058446E |. EB 07 jmp short 00584477 第一次跳出来的地方,上面一行就是send的调用4个参数OD都帮我们注释清楚了,还不明白可以找windows socket相关的文章来看看send的调用再敲一次ctrl+F9,回到再上层调用地址0057C6C5再按ctrl+F9退一层,就到了004BF82A,而这行的上三行,就是最终找到的喊话call的调用004BF823 |. 56 push esi /Arg2004BF824 |. 50 push eax |Arg1004BF825 |. E8 A6F60B00 call 0057EED0 \elementc.0057EED0004BF82A |. 8D8D D0FAFFFF lea ecx, dword ptr [ebp-530]怎么确定的? 部分是猜测,部分是参考了 http://www.ghoffice.com/bbs/read.php?tid-37847-fpage-0-toread--page-2.html 这个帖子里奇才贴的代码,事先知道了喊话call是2个参数的,省了不少麻烦。地址换版本变了,不过还是找出来了。取消send的断点,然后在004BF825上按F2下断,验证一下.聊天窗口里喊1234567,成功断在004BF825此时寄存器里数据为:EAX 00924100 elementc.00924100ECX 033B1C68EDX 0C3C6BFC UNICODE "123567"EBX 066CF6E0ESP 0012E6DCEBP 0012F420ESI 0C3C6BFC UNICODE "123567"EDI 00000002EIP 004BF825 elementc.004BF825注意这2个ESI 0C3C6BFC UNICODE "123567"EAX 00924100 elementc.00924100一切尽在不言中了。

记得采纳啊

你代码太乱了,根本没法看,手动整理了下,苦逼。

你找的地方根本不对,没法注入,这是其一。

其二就是,就算你的功能函数是对的,不给我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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8090624.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存