Advertisement
Guest User

AutoHotkeyMemoryLib.ahk

a guest
Jan 10th, 2014
515
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. if (A_PtrSize != 4)
  2. {
  3.     MsgBox, You are not running 32-bit version of Autohotkey L, reinstall correct version. Script will now terminate.
  4.     ExitApp
  5. }
  6. GetModuleInfo(ModuleName, PID, byRef mBase="", byRef mSize="")
  7. {
  8.     TH32CS_SNAPMODULE := 0x00000008
  9.     INVALID_HANDLE_VALUE = -1
  10.     VarSetCapacity(me32, 548, 0)
  11.     NumPut(548, me32)
  12.    
  13.     snapMod := DllCall("CreateToolhelp32Snapshot", "Uint", TH32CS_SNAPMODULE, "Uint", PID)
  14.    
  15.     If (snapMod = INVALID_HANDLE_VALUE) {
  16.         Return 0
  17.     }
  18.    
  19.     If (DllCall("Module32First", "Uint", snapMod, "Uint", &me32)){
  20.        
  21.         If StrGet(&me32 + 32, "cp0")=ModuleName
  22.         {
  23.                 mBase:=NumGet(&me32 + 20)
  24.                 mSize:=NumGet(&me32 + 24)
  25.                 DllCall("CloseHandle", "UInt", snapMod)
  26.                 Return
  27.  
  28.         }
  29.                
  30.         while(DllCall("Module32Next", "Uint", snapMod, "UInt", &me32))
  31.         {
  32.             If StrGet(&me32 + 32, "cp0")=ModuleName
  33.             {
  34.                 mBase:=NumGet(&me32 + 20)
  35.                 mSize:=NumGet(&me32 + 24)
  36.                 DllCall("CloseHandle", "UInt", snapMod)
  37.                 Return
  38.             }
  39.         }
  40.     }
  41.    
  42.     DllCall("CloseHandle", "Uint", snapMod)
  43. }
  44.  
  45. GetProcessHandle(pid)
  46. {
  47.     return DllCall("OpenProcess", "UInt", 0x8|0x10|0x20, "UInt", 0, "UInt", pid, "UInt")
  48. }
  49.  
  50. ReadMemFloat(ProcessHandle, MADDRESS)
  51. {
  52.     if DllCall("ReadProcessMemory","UInt",ProcessHandle,"UInt",MADDRESS,"Float*",MVALUE,"UInt",4,"UInt*",0)!=0
  53.     {
  54.         return MVALUE
  55.     }  
  56. }
  57.  
  58. ReadMemUInt(ProcessHandle, MADDRESS)
  59. {
  60.     if DllCall("ReadProcessMemory","UInt",ProcessHandle,"UInt",MADDRESS,"UInt*",MVALUE,"UInt",4,"UInt*",0)!=0
  61.     {
  62.         return MVALUE
  63.     }  
  64. }
  65.  
  66. ReadMemSInt(ProcessHandle, MADDRESS)
  67. {
  68.     if DllCall("ReadProcessMemory","UInt",ProcessHandle,"UInt",MADDRESS,"Int*",MVALUE,"UInt",4,"UInt*",0)!=0
  69.     {
  70.         return MVALUE
  71.     }  
  72. }
  73.  
  74. WriteMemUInt(ProcessHandle, MADDRESS, val)
  75. {
  76.     DllCall("WriteProcessMemory","UInt",ProcessHandle,"UInt",MADDRESS,"UInt*",val,"UInt",4,"UInt*",0)!=0
  77. }
  78.  
  79. WriteMemSInt(ProcessHandle, MADDRESS, val)
  80. {
  81.     DllCall("WriteProcessMemory","UInt",ProcessHandle,"UInt",MADDRESS,"Int*",val,"UInt",4,"UInt*",0)!=0
  82. }
  83.  
  84. WriteMemFloat(ProcessHandle, MADDRESS, val)
  85. {
  86.     DllCall("WriteProcessMemory","UInt",ProcessHandle,"UInt",MADDRESS,"Float*",val,"UInt",4,"UInt*",0)!=0
  87. }
  88.  
  89. ReadMemStr(ProcessHandle, MADDRESS, maxlen=255, cp="cp0")
  90. {
  91.    
  92.     VarSetCapacity(MVALUE,maxlen)
  93.    
  94.     if DllCall("ReadProcessMemory","UInt",ProcessHandle,"UInt",MADDRESS,"PTR",&MVALUE,"UInt",maxlen,"UInt*",bytesread)!=0
  95.     {
  96.         Str:=StrGet(&MVALUE,cp)
  97.         VarSetCapacity(MVALUE,0)
  98.         return Str
  99.     }
  100.    
  101.     VarSetCapacity(MVALUE,0)   
  102. }
  103.  
  104. GetMultilevelPointer(ProcessHandle, PARRAY)
  105. {      
  106.     if PARRAY._MaxIndex()<2
  107.         return
  108.    
  109.     if (DllCall("ReadProcessMemory","UInt",ProcessHandle,"UInt",PARRAY[1],"UInt*",currOffset,"UInt",4,"UInt*",0)!=0)   
  110.     {
  111.  
  112.         i:=2
  113.         while (i<=PARRAY._MaxIndex() && DllCall("ReadProcessMemory","UInt",ProcessHandle,"UInt",currOffset+PARRAY[i],"UInt*",currOffset,"UInt",4,"UInt*",0)!=0)
  114.         {
  115.             i:=i+1
  116.         }
  117.        
  118.         if (i>PARRAY._MaxIndex())
  119.         {
  120.             return currOffset
  121.         }
  122.     }
  123. }
  124.  
  125. AobScan(ProcessHandle,mBase,mSize, ByRef patternArray)
  126. {
  127.     if (patternArray._MaxIndex()>mSize)
  128.     {
  129.         MsgBox, aobscan fail : pattern array is larger than module size
  130.         return
  131.     }
  132.  
  133.     VarSetCapacity(ClientCodeSegment,mSize)
  134.    
  135.     if (DllCall("ReadProcessMemory","UInt",ProcessHandle,"UInt",mBase,"PTR",&ClientCodeSegment,"UInt",mSize,"UInt*",bytesread)!=0)
  136.     {
  137.        
  138.         pLen:=patternArray._MaxIndex()     
  139.         if (bytesread<>mSize)
  140.         {
  141.             VarSetCapacity(ClientCodeSegment,0)
  142.             MsgBox, aobscan fail : mSize=%mSize%  bytesread=%bytesread%
  143.             return
  144.         }      
  145.         i:=0
  146.        
  147.         while (i<=mSize-pLen-1)
  148.         {
  149.             j:=1
  150.             while (j<=pLen)
  151.             {
  152.                 if (patternArray[j]="?" || NumGet(ClientCodeSegment, i+j-1, "UChar")=patternArray[j])
  153.                 {
  154.                     j:=j+1
  155.                 }
  156.                 else
  157.                 {
  158.                     break
  159.                 }
  160.             }
  161.            
  162.             if (j>pLen)
  163.             {
  164.                 VarSetCapacity(ClientCodeSegment,0)
  165.                 return i
  166.             }
  167.             i:=i+1         
  168.         }  
  169.     }
  170.     MsgBox, aobscan fail : pattern not found
  171.     VarSetCapacity(ClientCodeSegment,0)
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement