本人想做一个魔兽世界获得其 血的值 的软件。
可是因为游戏使用了动态内存,每次读地址血就会变。
我按照论坛里动态内存转静态的方法把内存保存到一个固定地址里可是不成功
具体操作步骤如下。请高手帮忙
我先用金山游侠搜索到血的地址然后用Softice的pbm 地址 w命令,在地址上设置了断点。于是当我掉血的时候游戏遍中断了:
005F5150 55 push ebp
005F5151 8BEC mov ebp,esp
005F5153 8B4108 mov eax,dword ptr[ecx+08]
005F5156 8B4D0C mov ecx,dword ptr[ebp+0C]
005F5159 8B5508 mov edx,dword ptr[ebp+08]
005F515C 890C90 mov dword ptr[eax+4*edx],ecx
005F515F B801000000 mov eax,00000001;程序在这里中断了,我看到寄存器ecx就是我想要血的值
005F5164 5D pop ebp
005F5165 C20800 ret 0008
于是我按照论坛里动态内存转静态的方法把上面代码修改为:
005F5150 55 push ebp
005F5151 8BEC mov ebp,esp
005F5153 8B4108 mov eax,dword ptr[ecx+08]
005F5156 8B4D0C mov ecx,dword ptr[ebp+0C]
005F5159 8B5508 mov edx,dword ptr[ebp+08]
005F515C 890C90 mov dword ptr[eax+4*edx],ecx
005F515F E94AF01B00 jmp 007B41AE;读到这里跳到007B41AE(魔兽游戏的空白处)
005F5164 5D pop ebp
005F5165 C20800 ret 0008
//////////////////////////////////////////////////////
007B41AE 890DF89EFB0C mov dword ptr[0CFB9EF8],ecx;把ecx保存到地址:0CFB9EF8(这个地址为魔兽.data地址减100得来的)
007B41B4 B801000000 mov eax,00000001
007B41B9 E9A60FE4FF jmp 005F5164;然后跳回程序
于是我读0CFB9EF8这个地址。。里面的值竟然是0气死我了。。根本不是我想要的。。那位大哥能告诉我怎么办。。。。救救我吧
[课程]Android-CTF解题方法汇总!