2014-03-19 249 views
0

首先,我有這樣的記憶寫模塊:生成一個隨機值

Module Lul 

#Region "Declarations" 

     Private Declare Function OpenProcess Lib "kernel32" Alias "OpenProcess" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer 
     Private Declare Function WriteProcessMemory Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer 
     Private Declare Function WriteFloatMemory Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Single, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer 
     Private Declare Function ReadFloat Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr, ByRef buffer As Single, ByVal size As Int32, ByRef lpNumberOfBytesRead As Int32) As Boolean 
     Private Declare Function ReadProcessMemory Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer 
     Private Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Integer) As Integer 

     Private string1 As Long 
     Private string2 As Integer 
     Private RBuff1 As Long 
     Private RBuff2 As Single 
     Private RBuff3 As Integer 

#End Region 

     Public Function IsProcessOpen(ByVal name As String) As Boolean 

      For Each clsProcess As Process In Process.GetProcesses 

       If clsProcess.ProcessName.Contains(name) Then 


        Return True 

       End If 
      Next 
      ' Do nothing 
      Return False 
     End Function 

#Region "Hacks" 

     'WriteMemory 
     Private Function WriteMemory(ByVal Address As Integer, ByVal Value As Long, ByVal Bytes As Integer) 
      Dim ACRSPLookUp As Process() = Process.GetProcessesByName("S4Client") 
      If ACRSPLookUp.Length = 0 Then 
       End 
      End If 
      Dim processHandle As IntPtr = OpenProcess(&H1F0FFF, 0, ACRSPLookUp(0).Id) 
      WriteProcessMemory(processHandle, Address, Value, Bytes, Nothing) 
      CloseHandle(processHandle) 

      Return Nothing 
     End Function 

     'WriteFloat 
     Private Function WriteFloat(ByVal Address As Integer, ByVal Value As Single) 
      Dim ACRSPLookUp As Process() = Process.GetProcessesByName("S4Client") 
      If ACRSPLookUp.Length = 0 Then 
       End 
      End If 
      Dim processHandle As IntPtr = OpenProcess(&H1F0FFF, 0, ACRSPLookUp(0).Id) 
      WriteFloatMemory(processHandle, Address, Value, 4, Nothing) 
      CloseHandle(processHandle) 

      Return Nothing 
     End Function 

     'NOP 
     Private Function NOP(ByVal Address As Integer, ByVal value As Integer) 
      Dim ACRSPLookUp As Process() = Process.GetProcessesByName("S4Client") 
      If ACRSPLookUp.Length = 0 Then 
       End 
      End If 
      Dim processHandle As IntPtr = OpenProcess(&H1F0FFF, 0, ACRSPLookUp(0).Id) 
      WriteProcessMemory(processHandle, Address, value, 1, Nothing) 
      CloseHandle(processHandle) 

      Return Nothing 
     End Function 

#End Region 

#Region "Functions" 

     Public Function memoryh4x(ByVal address As String, ByVal value As Long, ByVal bytes As Byte) 
      If IsProcessOpen("S4Client") Then 
       string2 = "&H" & Hex(string1 + address) 
       WriteMemory(string2, value, bytes) 
      End If 
      Return Nothing 
     End Function 

     Public Function floath4x(ByVal address As String, ByVal value As Long) 
      If IsProcessOpen("S4Client") Then 
       string2 = "&H" & Hex(string1 + address) 
       WriteFloat(string2, value) 
      End If 
      Return Nothing 
     End Function 

     Public Function noph4x(ByVal address As String, ByVal value As Long) 
      If IsProcessOpen("S4Client") Then 
       string2 = "&H" & Hex(string1 + address) 
       NOP(string2, value) 


      End If 
      Return Nothing 
     End Function 

#End Region 
    End Module 

而且我寫的過程的記憶是這樣的:

memoryh4x(&H482719, 8, 4) 

我希望它把一個隨機當每次檢查複選框而不是8時爲值。 我該怎麼做?謝謝。

+0

您使用的關鍵字'End'被濫用。這不是正確的方式來結束一個功能 - 它會結束你的應用程序 - 而不是以正確的方式! – OneFineDay

+0

我想你錯了。我只是想讓它產生一個隨機值來寫。 – user3423677

+0

不,我想告訴你,這是一個不好的事情來打電話,不應該被使用。讓我知道你的軟件的名字是什麼,所以我可以避免它 - 謝謝 – OneFineDay

回答

3

您可以使用.NET隨機數生成器生成一個隨機值:

' You should only declare and initialize this once for your class 
' otherwise the values you'll get won't be very random 
Dim rGenerator As System.Random = New System.Random() 


Dim val As Integer = 0   

val = rGenerator.Next(1, 8)   ' generate a random integer between 1 and 8 

memoryh4x(&H482719, val, 4) 
+0

謝謝,它的工作。 :) – user3423677

+0

@ user3423677 - 很高興幫助..正如答案中所述,確保只初始化一次隨機數發生器,而不是每次打電話時。下一個! –

+0

只是一點點挑剔:行'val = rGenerator.Next(1,8)'會產生一個從1到7的隨機數。它不包含8。 –

0

如果你關心絲毫如果數字是隨機的,不使用System.Random()

我驚訝於創建隨機數字有多可怕!

見我發帖Here