jericho0711 发表于 2016-3-25 11:34:17

ghost 時速度讀取?【已解决】

本帖最后由 jericho0711 于 2016-3-30 22:08 编辑

查了一下好像ghost本身也沒有指令可以輸出ghost時的數值,不知道有沒有辦法去讀取ghost時的speed數值?

http://i.imgur.com/szNkJ0y.jpg

afan 发表于 2016-3-25 12:00:23

那个值有什么用呢?本来应该就只是个大概的值。标题有进度可以直接读取,如果你需要的是进度的话。或者知道初始时间和文件大小也可以算出speed

skyfree 发表于 2016-3-25 13:19:38

本帖最后由 skyfree 于 2016-3-26 07:40 编辑

如果只是进度的话,GHOST11以上可以直接读标题栏

zch11230 发表于 2016-3-25 15:13:00

我有点蛋疼。

zch11230 发表于 2016-3-25 16:30:51

本帖最后由 zch11230 于 2016-3-25 16:32 编辑

凑合看看。获取模块基址用了大漠插件,求大神给个纯AU的方法。

guland 发表于 2016-3-25 19:39:49

回复 5# zch11230


    论坛搜索汇编会得到你想要的

jericho0711 发表于 2016-3-25 22:10:55

凑合看看。获取模块基址用了大漠插件,求大神给个纯AU的方法。
zch11230 发表于 2016-3-25 16:30 http://www.autoitx.com/images/common/back.gif

小弟要的就是這個效果,不過對au沒有這麼熟,這幾天找時間消化一下,先試玩看看用大漠插件的方式~~

jericho0711 发表于 2016-3-28 13:36:19

凑合看看。获取模块基址用了大漠插件,求大神给个纯AU的方法。
zch11230 发表于 2016-3-25 16:30 http://www.autoitx.com/images/common/back.gif

想請問一下,ghostce.au3裡面有一段
$ad2 = "0x" & Hex($ad1 + 0x331278)
其中0x331278是固定的嗎?因為小弟在自己的站台上執行,必須要修改成0x3c8140才可以執行。

zch11230 发表于 2016-3-28 16:08:41

回复 8# jericho0711


    在同一个软件下是固定的,这是11.0.2的基址,在11.5.1中是ghost32.exe+3D0BA0,其它版本不一样,用ce搜就可以了。

zch11230 发表于 2016-3-28 16:52:07

另外其实论坛已经有纯AU取基址的示例了,我居然没第一时间搜论坛。还是在百度搜到的论坛。。。。。。。

#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 100, 50, -1, -1)
$Label1 = GUICtrlCreateLabel("Label1", 10, 10, 90, 40)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$pid = WinGetProcess("", "")
$ad1 = _MemoryModuleGetBaseAddress($pid, "ghost32.exe")
$ad2 = $ad1 + 0x3D0BA0
$mem = _MemoryOpen($pid)
WinSetOnTop(HWnd($Form1), "", 1)
AdlibRegister("_getvalue")
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        _MemoryClose($mem)
                        Exit

        EndSwitch

WEnd

Func _getvalue()
        $value = _MemoryRead($ad2, $mem, "dword")
        GUICtrlSetData($Label1, $value)
EndFunc   ;==>_getvalue

Func _MemoryModuleGetBaseAddress($iPID, $sModule)
        If Not ProcessExists($iPID) Then Return SetError(1, 0, 0)

        If Not IsString($sModule) Then Return SetError(2, 0, 0)

        Local $PSAPI = DllOpen("psapi.dll")

        ;Get Process Handle
        Local $hProcess
        Local $PERMISSION = BitOR(0x0002, 0x0400, 0x0008, 0x0010, 0x0020) ; CREATE_THREAD, QUERY_INFORMATION, VM_OPERATION, VM_READ, VM_WRITE

        If $iPID > 0 Then
                Local $hProcess = DllCall("kernel32.dll", "ptr", "OpenProcess", "dword", $PERMISSION, "int", 0, "dword", $iPID)
                If $hProcess Then
                        $hProcess = $hProcess
                EndIf
        EndIf

        ;EnumProcessModules
        Local $Modules = DllStructCreate("ptr")
        Local $aCall = DllCall($PSAPI, "int", "EnumProcessModules", "ptr", $hProcess, "ptr", DllStructGetPtr($Modules), "dword", DllStructGetSize($Modules), "dword*", 0)
        If $aCall > 0 Then
                Local $iModnum = $aCall / 4
                Local $aTemp
                For $i = 1 To $iModnum
                        $aTemp = DllCall($PSAPI, "dword", "GetModuleBaseNameW", "ptr", $hProcess, "ptr", Ptr(DllStructGetData($Modules, 1, $i)), "wstr", "", "dword", 260)
                        If $aTemp = $sModule Then
                                DllClose($PSAPI)
                                Return Ptr(DllStructGetData($Modules, 1, $i))
                        EndIf
                Next
        EndIf

        DllClose($PSAPI)
        Return SetError(-1, 0, 0)

EndFunc   ;==>_MemoryModuleGetBaseAddress

Func _MemoryOpen($iv_Pid, $iv_DesiredAccess = 0x1F0FFF, $if_InheritHandle = 1)
        If Not ProcessExists($iv_Pid) Then
                SetError(1)
                Return 0
        EndIf
        Local $ah_Handle =
        If @error Then
                SetError(2)
                Return 0
        EndIf
        Local $av_OpenProcess = DllCall($ah_Handle, 'int', 'OpenProcess', 'int', $iv_DesiredAccess, 'int', $if_InheritHandle, 'int', $iv_Pid)
        If @error Then
                DllClose($ah_Handle)
                SetError(3)
                Return 0
        EndIf
        $ah_Handle = $av_OpenProcess
        Return $ah_Handle
EndFunc   ;==>_MemoryOpen

;=================================================================================================
Func _MemoryRead($iv_Address, $ah_Handle, $sv_Type = 'dword')
        If Not IsArray($ah_Handle) Then
                SetError(1)
                Return 0
        EndIf
        Local $v_Buffer = DllStructCreate($sv_Type)
        If @error Then
                SetError(@error + 1)
                Return 0
        EndIf
        DllCall($ah_Handle, 'int', 'ReadProcessMemory', 'int', $ah_Handle, 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
        If Not @error Then
                Local $v_Value = DllStructGetData($v_Buffer, 1)
                Return $v_Value
        Else
                SetError(6)
                Return 0
        EndIf
EndFunc   ;==>_MemoryRead
;=================================================================================================
Func _MemoryClose($ah_Handle)
        If Not IsArray($ah_Handle) Then
                SetError(1)
                Return 0
        EndIf
        DllCall($ah_Handle, 'int', 'CloseHandle', 'int', $ah_Handle)
        If Not @error Then
                DllClose($ah_Handle)
                Return 1
        Else
                DllClose($ah_Handle)
                SetError(2)
                Return 0
        EndIf
EndFunc   ;==>_MemoryClose

jericho0711 发表于 2016-3-28 22:46:55

回复jericho0711


    在同一个软件下是固定的,这是11.0.2的基址,在11.5.1中是ghost32.exe+3D0BA0 ...
zch11230 发表于 2016-3-28 16:08 http://www.autoitx.com/images/common/back.gif

原來如此,這樣小弟就了解了,那應該是我的ghost版本是11.5.x版...
純au取基址的例子,這幾天再找時間消化一下,好不容易這幾天才消化完大漠的方式...
不過有純au的方式,當然要學習一下純au的...

hanz_200 发表于 2016-5-12 14:55:17

想问下 ghost32.exe+3D0BA0 CE如何获取后面的基址,如何计算的?

cccaaa123 发表于 2016-5-18 23:52:28

这个有什么用处呢??{:face (303):}

xixin1314 发表于 2018-9-26 21:09:21

zch11230 发表于 2016-3-25 16:30
凑合看看。获取模块基址用了大漠插件,求大神给个纯AU的方法。

感谢分享,收藏
页: [1]
查看完整版本: ghost 時速度讀取?【已解决】