DNF任意消耗改人偶,三种方法HOOK

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DNF任意消耗改人偶,三种方法HOOK,够吧!

一直有人在那说消耗改人偶更新不了!不甚了解,于是上去看了一下,原来TX改了东西!也挺搞笑的,一个那么垃圾的东西也去和谐!还有那些说更新不了的论友,我只想说,何必要吊死在一棵树上?能HOOK的地方多了去了,自己随机应变下嘛!下面说三个方法,第一个方法是物品CALL外面HOOK,跟以前的一样;第二个是CALL内部,但是这里在HOOK里面加入了堆栈判断,跳转修改,比较复杂;方法三也是CALL内部HOOK,但是这是push retn 跳转后再修改!都不相同!

本帖隐藏的内容需要回复才可以浏览

方法_①:

1.004BC6B4 E8 F7BEFFFF call 004B85B0

2.004BC6B9 8B4D F0 mov ecx,dword ptr ss:[ebp-0x10]

3.004BC6BC 8B10 mov edx,dword ptr ds:[eax]

4.004BC6BE 51 push ecx

5.004BC6BF 8BC8 mov ecx,eax

6.004BC6C1 FF92 54050000 call dword ptr ds:[edx+0x554]

复制代码

004BC6B9 8B4D F0 mov ecx,dword ptr ss:[ebp-0x10]这里下断后,发现ecx是物品ID,mov ecx,dword ptr ss:[ebp-0x10]对ecx赋的值!

写法——

004BC6BC /E9 FF486C02 jmp 02B80FC0 '跳到空白内存!

02B80FC0 8B10 mov edx,dword ptr ds:[eax] ; 还原游戏

02B80FC2 68 131F0000 push 0x1F13 ; 格

斗人偶ID

02B80FC7 8BC8 mov ecx,eax ; 还原游戏

02B80FC9 ^ E9 F3B693FD jmp 004BC6C1 ; 跳回去

这是最简单的方法!!

方法_②:

004BC6C1 FF92 54050000 call dword ptr ds:[edx+0x554] 这里断下后,F7进去,一路F8到了

01D1C014 68 3B14D101 push 0x1D1143B

01D1C019 C3 retn

看到了push 0x1D1143B 入栈一个地址下面紧接着一个retn返回,呵呵有意思,先记下来,作为第三个方法!

继续F8——

01D11642 8DA424 FCFFFFFF lea esp,dword ptr ss:[esp-0x4] 01D11649 878424 04000000 xchg dword ptr ss:[esp+0x4],eax 01D11650 8DA424 08000000 lea esp,dword ptr ss:[esp+0x8] 01D11657 FF52 48 call dword ptr ds:[edx+0x48]

01D1165A E8 BC410200 call 01D3581B

从这里01D1165A E8 BC410200 call 01D3581B进入物品CALL 下一层!

而在之前有一个01D11657 FF52 48 call dword ptr ds:[edx+0x48] 进去看一下到了

00404BA0 81C1 C4000000 add ecx,0xC4

00404BA6 E9 05000000 jmp 00404BB0

00404BAB CC int3

记下他的堆栈esp=01D1165A 后面有用!现在我有点喜欢TX的JMP了!!

回到游戏对00404BA0处重新下断,发现还没吃药也会被断下来(后面发现,即使在仓库什么也不干也会被断下!),这说明了很多地方,包括游戏本身也会调用它,都会被断下!这里不好转移,但是还是有办法的,每个调用它的线程,有一点是不同的,就是堆栈的esp是不同的,于是可以通过比较esp的值来判断是否是物品CALL调用了他!

好了,思路出来了!!先在

01D11657 FF52 48 call dword ptr ds:[edx+0x48] 处下断,吃个药断下来后进去发现

堆栈的第六个值是物品ID,也就是esp+14 处存的物品ID!记下

esp=01D1165A

所以可以是00404BA6 E9 05000000 jmp 00404BB0 JMP 跳到空白内存,然后修改堆栈!

随便找一个吧:

02B80FD0 0000 add byte ptr ds:[eax],al

02B80FD2 0000 add byte ptr ds:[eax],al

02B80FD4 0000 add byte ptr ds:[eax],al

但是这里注意,一定不要是先直接修改jmp 00404BB0 跳过去后在来写代码,不然游戏直接崩溃的!!

我们要跳到 02B80FD0 ,那先在这里写好代码在回去修改jmp跳转!

cmp dword ptr ss:[esp],0x1D1165A'判断当前调用是否是物品CALL 的调用!

jnz 00404BB0'不相等就调回游戏原处,不做任何修改!相等就继续往下走!

mov dword ptr ss:[esp+0x14],0x1F13‘(1F13=7955格斗人偶,有兴趣的可以自定义!)

jmp 00404BB0’改完了就跳回去!

还原的话,把00404BA6 E9 05000000 jmp 00404BB0重新写一下就行!

相关文档
最新文档