2010-04-03 2 views
2
require "alien" 

--the address im trying to edit in the Mahjong game on Win7 
local SCOREREF = 0x0744D554 
--this should give me full access to the process 
local ACCESS = 0x001F0FFF 
--this is my process ID for my open window of Mahjong 
local PID = 1136 

--function to open proc 
local op = alien.Kernel32.OpenProcess 
op:types{ ret = "pointer", abi = "stdcall"; "int", "int", "int"} 

--function to write to proc mem 
local wm = alien.Kernel32.WriteProcessMemory 
wm:types{ ret = "long", abi = "stdcall"; "pointer", "pointer", "pointer", "long", "pointer" } 


local pRef = op(ACCESS, true, PID) 
local buf = alien.buffer("99") 

--   ptr,uint32,byte arr (no idea what to make this),int, ptr 
print(wm(pRef, SCOREREF, buf, 4, nil)) 
--prints 1 if success, 0 if failed 

C'est donc mon code. Je ne suis même pas sûr si j'ai les types définis correctement.Module Lua Alien - Problème lors de l'utilisation de la fonction WriteProcessMemory, incertain sur les types (unit32)

Je suis complètement perdu et j'ai besoin de conseils. J'aurais vraiment aimé qu'il y ait plus d'aide/documentation en ligne pour les extraterrestres, cela confond mon pauvre cerveau. Ce qui m'étonne tout à fait, c'est que WriteProcessMemory se terminera parfois avec succès (même s'il ne fait rien du tout, à ma connaissance) et échouera parfois aussi avec succès. Comme je l'ai dit, j'ai mal au cerveau.

Toute aide appréciée.

Répondre

0

Il semble que votre tampon ne contienne que 2 octets ("99"), mais vous spécifiez 4 octets dans l'appel à WriteProcessMemory.

Si votre intention était d'écrire la valeur 32 bits 99 en mémoire (comme un numéro, pas une chaîne ASCII), vous pouvez utiliser:

alien.buffer("\99\0\0\0") 

Vous pouvez convertir des nombres entiers arbitraires à des représentations de chaîne en utilisant alien.struct.pack :

require "alien.struct" 
s = alien.struct.pack('i', 99) 
buf = alien.buffer(s) 
+0

Cela ne semble pas changer le comportement du programme. Merci pour la réponse si! Plus d'informations; la fonction OpenProcess renvoie 'userdata: 00000048'. Est-ce un exemple correct de ce qu'il devrait retourner? – user308355

+0

Je suppose que l'OpenProcess ne fonctionne pas, j'essaie de le faire fonctionner en ce moment même. – user308355

+0

@jefferysanders: OpenProcess renvoyant un résultat différent de zéro signifie qu'il a réussi. Si WriteProcessMemory échoue, vous pouvez appeler GetLastError pour voir pourquoi. Peut-être avez-vous besoin d'appeler VirtualProtectEx pour vous accorder l'autorisation d'écriture en premier. – interjay

Questions connexes