Code : Tout sélectionner
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.6.0
Author: poke123
Script Function:
include pour editer la memoire avec une version emulé de kernel32.dll
pour résoudre certain problème de vista (dont j'ai pu aire les frais).
commenaire:
le kernel32 émulé devras être present soit dans le dossier du programme
ou bien dans C:\windows\system32
information complementaire:
le kernel32 émulé peut aider à resoudre les problème de compatibilité des
fonctions avec apple MAIS il ne serait absolument pas sufisant car pour faire fonctionner
autoit c'est toute l'API de windows qu'il faudrait copier et émuler sur la machine
#ce ----------------------------------------------------------------------------
#include-once
#RequireAdmin
#include "StructureConstants.au3"
#include "StructureConstants.au3"
#include "FileConstants.au3"
#include "Security.au3"
$hToken = _Security__OpenThreadTokenEx(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
_Security__SetPrivilege($hToken, "SeDebugPrivilege", True)
#cs====================================================================================
première fonction: _memoryOpen
alors c'est con comme bonjours vous le metez au debut du code et a l'interieur
des parenthèse vous mettez (WinGetProcess("{nom de la fenètre}")) c'est le plus simple
syntaxe exact:
_MemoryOpen({le pid de lapplication})
syntaxe exact pour les nuls:
_MemoryOpen(WinGetProcess("{nom de la fenètre}"))
#ce====================================================================================
Func _MemoryOpen($IV_PID, $IV_DESIREDACCESS = 2035711, $IV_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", $IV_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
#cs====================================================================================
seconde fonction: _memoryread
assez simple sa sert juste a lire la mémoire
syntaxe exact:
_MemoryRead({offset memoire ou se trouve la valeur},{ce que vous retourne _memoryOpen},{type de valeur*})
syntaxe exact pour les nuls:
_MemoryRead({offset memoire ou se trouve la valeur},_MemoryOpen(WinGetProcess("{nom de la fenètre}")),{type de valeur*})
documentation:
une liste simple et bien expliqué des types de valeur se trouve ici:
http://www.commentcamarche.net/contents/cpp/cpptype.php3
mais n'oubliez pas que cette liste est incomplète on ne trouve pas les type tel que DWORD ou QWORD
par exemple
#ce====================================================================================
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
#cs====================================================================================
troisème fonction: _memorywrite
assez simple sa sert juste à écrire la memoire
(je l'ai aussi modifier pour que sa retourne la nouvelle valeur après modiication)
syntaxe exact:
_Memorywrite({offset memoire ou se trouve la valeur},{ce que vous retourne _memoryOpen},{valeur de substition},{type de valeur*})
syntaxe exact pour les nuls:
_Memorywrite({offset memoire ou se trouve la valeur},_MemoryOpen(WinGetProcess("{nom de la fenètre}")),{valeur de substitution},{type de valeur*})
documentation:
une liste simple et bien expliqué des types de valeur se trouve ici:
http://www.commentcamarche.net/contents/cpp/cpptype.php3
mais n'oubliez pas que cette liste est incomplète on ne trouve pas les type tel que DWORD ou QWORD
par exemple
#ce====================================================================================
Func _MemoryWrite($IV_ADDRESS, $AH_HANDLE, $V_DATA, $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
Else
DllStructSetData($V_BUFFER, 1, $V_DATA)
If @error Then
SetError(6)
Return 0
EndIf
EndIf
DllCall($AH_HANDLE[0], "int", "WriteProcessMemory", "int", $AH_HANDLE[1], "int", $IV_ADDRESS, "ptr", DllStructGetPtr($V_BUFFER), "int", DllStructGetSize($V_BUFFER), "int", "")
If Not @error Then
Return _MemoryRead($IV_ADDRESS, $AH_HANDLE, $SV_TYPE)
Else
SetError(7)
Return 0
EndIf
EndFunc ;==>_MemoryWrite
#cs====================================================================================
tdernière fonction _memoryclose
c'est encore plus con que le reste sa sert juste a refermer la memoire
(pour pas laisser trop de courant d'air lol)
sytaxe exact:
_MemoryClose({ce que retourne _memoryopen})
#ce====================================================================================
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