au3 读取内存求助

Discussion in 'General Topics on Software and Data' started by dstoc135, Jul 17, 2013.

  1. 想用au3借助winapi读取某个程序某个基址的数值,为什么总是出来数值为 0 ?
    代码如下,对windows编程不熟悉。寻求知情者解答,谢谢。

    -----------------------------------------------------
    #include "WinAPI.au3"

    local $pro = "***.exe"
    local $pid = ProcessExists($pro)

    Local $addr = 0x00F0E610 ; 通过Cheat Engine找出某个数值的内存基址00F0E610,前面已经加上 0x
    Local $pBaseAddress = hex($addr) ; 转换成16进制
    local $pBuffer = hex(16) ;偏移 = 数据缓冲尺寸
    $iSize = 160 ;160自己填的,这个怎么知道是多少呢?
    $iRead = 0 ; 这是什么?
    $a = _WinAPI_ReadProcessMemory($pid, $pBaseAddress, $pBuffer, $iSize, $iRead)

    MsgBox(0,"aa",$pid & " " & $addr & " " & $pBaseAddress & " | "& $a)

    MsgBox(0,0,@error)
     
  2. 你是64位还是32位的操作系统?
     
  3. 32位 xp系统
     
  4. 假如我要将CheatEngine自带的帮助程序 Tutorial-i386.exe 中step2的数值从内存中读取出来,
    内存地址已经用 CE查到为 000B0474

    修改了网上一个博友的脚本,发现读出的数值为1,显然不对。

    因为对于win的内存不熟悉,不知道原因何在?

    代码如下:
    ----------------------------------------------------------

    #include <WinAPI.au3>
    local $pro = "Tutorial-i386.exe"
    Global $adress_Hint = "0x000B0474" ;修改地址,用金山游侠确定 ^_^

    $vBuffer = DllStructCreate("byte var2") ;新建数据
    DllStructSetData($vBuffer, "var2", 199) ;赋值为 99
    $p_Buffer = DllStructGetPtr($vBuffer) ;返回地址指针
    $i_Size = DllStructGetSize($vBuffer) ;返回数据大小

    $i_Pid = ProcessExists($pro) ;寻找主程序,取得句柄以便操作
    If $i_Pid <> 0 Then
    $open = _WinAPI_OpenProcess("0x1F0FFF", False, $i_Pid) ;打开进程,"0x1F0FFF"为常数

    _WinAPI_WriteProcessMemory($open, $adress_Hint, $p_Buffer, $i_Size, 11111) ;修改内存

    If @error Then
    MsgBox(1, "Error1", "writeerror")
    EndIf
    $kk = _WinAPI_ReadProcessMemory($open, $adress_Hint, $p_Buffer, $i_Size, 0) ;

    If @error Then
    MsgBox(1, "Error2", "readerror")
    EndIf

    ProcessClose($open) ;关闭修改进程
    If @error Then
    MsgBox(1, "Error3", "processerror")
    EndIf
    Else
    MsgBox(0, "Tip", "请先运行程序")
    EndIf
    MsgBox(1, "内存值:", $kk)
     
  5. 跨进程有权限问题,CheatEngine能读的,你未必能读。应当用调试软件看该内存属性。另外假如是win7,运行你的程序必须用管理员权限