首页
社区
课程
招聘
[求助]一个网络游戏,想写一个自动加血的小程序
发表于: 2009-4-16 21:24 8807

[求助]一个网络游戏,想写一个自动加血的小程序

2009-4-16 21:24
8807

我在玩一个网络游戏,想写一个自动加血的小程序,思路是这样的,先找到游戏里加血的代码,然后用一个DLL注入到游戏里,把加血的代码改成跳转到我的DLL模块,在我的DLL模块里实现自动加血后再跳转回去,我写的DLL文件代码如下:

.586
    .model flat, stdcall
    option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include    windows.inc
include    user32.inc
includelib  user32.lib
include    kernel32.inc
includelib  kernel32.lib

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.data
hModel  dd  ?      ;本模块入口地址
dwAddress  dd  ?    ;跳转回去的目标地址
dwProcAddr  dd  ?    ;_lanjie  的入口地址

szBuffer  db  20 dup (?)
szBuffer1  db  20 dup (?)
  .const
szText  db  '载入成功',0
szProc  db  '_lanjie',0
szModel  db  'joyce.dll',0
szStart db '%08x',0

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    .code

_lanjie  proc
  
这里准备加入加血代码

jmp [dwAddress]
retn

_lanjie endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

DllEntry  proc  _hInstance,_dwReason,_dwReserved

                mov     eax,_dwReason
                .if     eax ==  DLL_PROCESS_ATTACH
              
                        invoke  MessageBox,NULL,addr szText,addr szModel,MB_OK;为了调试方便加的
               
                invoke  GetModuleHandle,addr szModel  
                        mov hModel,eax                     
                     
                        invoke  wsprintf,addr szBuffer,addr szStart,hModel  ;为了调试方便加的
                invoke  MessageBox,NULL,offset szBuffer,addr szModel,MB_OK;为了调试方便加的
                     
                invoke  GetProcAddress,eax,addr szProc
                        mov dwProcAddr,eax
                        
                        invoke  wsprintf,addr szBuffer1,addr szStart,dwProcAddr ;为了调试方便加的
                invoke  MessageBox,NULL,offset szBuffer1,addr szProc,MB_OK ;为了调试方便加的
                     
                mov  edx,10001130h   
                        mov al,0e9h
                        mov byte ptr [edx],al
                        sub dwProcAddr,10001130h
                        sub dwProcAddr,5
                        mov eax,dwProcAddr
                        mov dword ptr [edx+1],eax                        
                        mov dwAddress,10001135h              
                     
               .endif
                ret

DllEntry  Endp

End     DllEntry

DLL注入之后发现问题,invoke  GetProcAddress,eax,addr szProc这句运行之后,EAX里的值全是000000000,本来这句运行完之后应该把;_lanjie的入口地址给EAX的,为什么得不到;_lanjie的入口地址呢???哪出了问题呢??请大家帮我看看,谢谢!!


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (24)
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
invoke  GetProcAddress,hModel,addr szProc

刚调用了MessageBox,就用eax,不出错才怪。
2009-4-16 21:34
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
改成hModel又试了下,还是不行,EAX里还全是0
2009-4-16 21:47
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
再发个帖子就可以传附件了,等我把截图传给大家看看
2009-4-16 21:48
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
就是这样的情况
上传的附件:
2009-4-16 21:50
0
雪    币: 92
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我的思路是,在注入的Dll里面直接调用加血的方法,不用跳到Dll执行完毕之后再跳回去……
2009-4-17 08:29
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢小花,但是我总在游戏里跟别人PK,呵呵,对加血要求很高,绝对不能卡,如果按照我的思路做的话,只要客户端不卡,加血就不卡,按照你的思路,卡的几率就会稍微大一些。

我的这段代码反复检查过,没发现哪有问题,而且编译也顺利通过,但是就是运行到GetProcAddress这里的时候,得不到我那个函数的入口地址,郁闷死了,全是0000000,快崩溃了,救命啊 !!!!!!!
2009-4-17 09:08
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这年头除了DNF,这样的加血,还有什么用处啊

加着好看而已
2009-4-17 09:12
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
invoke  MessageBox,NULL,addr szText,addr szModel,MB_OK;为了调试方便加的
                        
                 @@:  invoke  GetModuleHandle,addr szModel  
                                     or eax,eax
                                      je @B

                        mov hModel,eax                     
                       push eax
                        
                        invoke  wsprintf,addr szBuffer,addr szStart,hModel  ;为了调试方便加的

                        invoke  MessageBox,NULL,offset szBuffer,addr szModel,MB_OK;为了调试方便加的

                        
                        pop eax
                        invoke  GetProcAddress,eax,addr szProc
                        mov dwProcAddr,eax
2009-4-17 09:15
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢楼上,但仍然全是00000000,疯
2009-4-17 09:26
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
游戏有HOOK那些函数?
2009-4-17 09:29
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
应该没有,我注入记事本测试了,仍然全是0000000
2009-4-17 09:38
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
你记事本都没有那个DLL,那个函数,肯定得到是0
2009-4-17 09:42
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
晕了

_lanjie 是你自己定义的函数

不能那样获取地址

mov eax,offset _lanjie

这样
2009-4-17 09:45
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
我把这个DLL注入进记事本测试的
2009-4-17 09:47
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
我再试试,我再试试
2009-4-17 09:47
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
看 14楼 。。。。。。。。。。。。。。。。。。。。
2009-4-17 09:47
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
你是说通过 mov eax,offset _lanjie 获得  _lanjie 在DLL中的偏移,然后再加上DLL的hModel就得到他在游戏中的偏移了,你说的是这个意思不?
2009-4-17 09:56
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
你不是想 获取 _lanjie 的地址?

mov eax,offset _lanjie  EAX就是地址
2009-4-17 09:57
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
哇靠,成功了!!!你太有才了

非常感谢 fixfix !!!!!  我做鬼都不会忘记你的!

顺便把这个问题搞通彻一下,请问,什么情况下使用Getproaddress这个函数呢???
上传的附件:
  • 4.jpg (3.37kb,108次下载)
2009-4-17 10:05
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
Getproaddress

是微软给我们提供的获取另外一个DLL的导出函数的函数

比如

获取 user32.dll 的 MessageBoxA

invoke GetModuleHandle,offset user32.dll
invoke GetProcAddress,eax, offset MessageBoxA
2009-4-17 10:08
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
完全明白了

再次隆重感谢fixfix  !!!!

结贴
2009-4-17 10:12
0
雪    币: 144
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
GetModuleHandle可能会不成功,所以可能要先LoadLibrary一下~~在下拙见~飘过
2009-4-17 12:43
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
call 注入~
比起读内存再调用call来说方便多了
网上很少这种资料 .看了LZ的贴 学了东西.谢谢
可惜不是E或是D的
2009-4-17 16:15
0
雪    币: 103
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
学习一下楼主的过程.
2009-4-17 19:09
0
游客
登录 | 注册 方可回帖
返回
//