OD 汇编 找CALL
附OD代码:
007B4095 |. C3 |retn
007B4096 |> \6A 00 |push 0x0 ; /Flags = 0007B4098 |. 57 |push edi ; |DataSize007B4099 |. 53 |push ebx ; |Data007B409A |. 56 |push esi ; |Socket007B409B |. FF15 60588A00 |call dword ptr ds:[<&WS2_32.#19>] ; \send 这里是么?007B40A1 |. EB 16 |jmp Xgame.007B40B9007B40A3 |> E8 88FEFFFF |call game.007B3F30007B40A8 |. 85C0 |test eax,eax007B40AA |. 74 4D |je Xgame.007B40F9007B40AC |.^ 7C D4 |jl Xgame.007B4082007B40AE |. 6A 00 |push 0x0 ; /Flags = 0007B40B0 |. 57 |push edi ; |BufSize007B40B1 |. 53 |push ebx ; |Buffer007B40B2 |. 56 |push esi ; |Socket007B40B3 |. FF15 64588A00 |call dword ptr ds:[<&WS2_32.#16>] ; \recv 展开
你代码太乱了,根本没法看,手动整理了下,苦逼。
你找的地方根本不对,没法注入,这是其一。
其二就是,就算你的功能函数是对的,不给我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等写出注入程序,用内联汇编嵌入你的代码,完成调用。
基本就是这样了,祝你成功,如果感觉我这些还够辛苦费,请采纳。
2024-09-19 广告