找回密码
 加入
搜索
查看: 3588|回复: 13

[AU3基础] ghost 時速度讀取?【已解决】

  [复制链接]
发表于 2016-3-25 11:34:17 | 显示全部楼层 |阅读模式
本帖最后由 jericho0711 于 2016-3-30 22:08 编辑

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

发表于 2016-3-25 12:00:23 | 显示全部楼层
那个值有什么用呢?本来应该就只是个大概的值。标题有进度可以直接读取,如果你需要的是进度的话。或者知道初始时间和文件大小也可以算出speed
发表于 2016-3-25 13:19:38 | 显示全部楼层
本帖最后由 skyfree 于 2016-3-26 07:40 编辑

如果只是进度的话,GHOST11以上可以直接读标题栏
发表于 2016-3-25 15:13:00 | 显示全部楼层
我有点蛋疼。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2016-3-25 16:30:51 | 显示全部楼层
本帖最后由 zch11230 于 2016-3-25 16:32 编辑

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2016-3-25 19:39:49 | 显示全部楼层
回复 5# zch11230


    论坛搜索  汇编  会得到你想要的
 楼主| 发表于 2016-3-25 22:10:55 | 显示全部楼层
凑合看看。获取模块基址用了大漠插件,求大神给个纯AU的方法。
zch11230 发表于 2016-3-25 16:30


小弟要的就是這個效果,不過對au沒有這麼熟,這幾天找時間消化一下,先試玩看看用大漠插件的方式~~
 楼主| 发表于 2016-3-28 13:36:19 | 显示全部楼层
凑合看看。获取模块基址用了大漠插件,求大神给个纯AU的方法。
zch11230 发表于 2016-3-25 16:30


想請問一下,ghostce.au3裡面有一段
$ad2 = "0x" & Hex($ad1 + 0x331278)
其中0x331278是固定的嗎?因為小弟在自己的站台上執行,必須要修改成0x3c8140才可以執行。
发表于 2016-3-28 16:08:41 | 显示全部楼层
回复 8# jericho0711


    在同一个软件下是固定的,这是11.0.2的基址,在11.5.1中是ghost32.exe+3D0BA0,其它版本不一样,用ce搜就可以了。
发表于 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("[CLASS:GhostScreen]", "")
$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[0] Then
                        $hProcess = $hProcess[0]
                EndIf
        EndIf

        ;EnumProcessModules
        Local $Modules = DllStructCreate("ptr[1024]")
        Local $aCall = DllCall($PSAPI, "int", "EnumProcessModules", "ptr", $hProcess, "ptr", DllStructGetPtr($Modules), "dword", DllStructGetSize($Modules), "dword*", 0)
        If $aCall[4] > 0 Then
                Local $iModnum = $aCall[4] / 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[3] = $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[2] = [DllOpen('kernel32.dll')]
        If @error Then
                SetError(2)
                Return 0
        EndIf
        Local $av_OpenProcess = DllCall($ah_Handle[0], 'int', 'OpenProcess', 'int', $iv_DesiredAccess, 'int', $if_InheritHandle, 'int', $iv_Pid)
        If @error Then
                DllClose($ah_Handle[0])
                SetError(3)
                Return 0
        EndIf
        $ah_Handle[1] = $av_OpenProcess[0]
        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[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], '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[0], 'int', 'CloseHandle', 'int', $ah_Handle[1])
        If Not @error Then
                DllClose($ah_Handle[0])
                Return 1
        Else
                DllClose($ah_Handle[0])
                SetError(2)
                Return 0
        EndIf
EndFunc   ;==>_MemoryClose

 楼主| 发表于 2016-3-28 22:46:55 | 显示全部楼层
回复  jericho0711


    在同一个软件下是固定的,这是11.0.2的基址,在11.5.1中是ghost32.exe+3D0BA0 ...
zch11230 发表于 2016-3-28 16:08


原來如此,這樣小弟就了解了,那應該是我的ghost版本是11.5.x版...
純au取基址的例子,這幾天再找時間消化一下,好不容易這幾天才消化完大漠的方式...
不過有純au的方式,當然要學習一下純au的...
发表于 2016-5-12 14:55:17 | 显示全部楼层
想问下 ghost32.exe+3D0BA0 CE如何获取后面的基址,如何计算的?
发表于 2016-5-18 23:52:28 | 显示全部楼层
这个有什么用处呢??
发表于 2018-9-26 21:09:21 | 显示全部楼层
zch11230 发表于 2016-3-25 16:30
凑合看看。获取模块基址用了大漠插件,求大神给个纯AU的方法。

感谢分享,收藏
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-20 06:51 , Processed in 0.086428 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表