AutoIt Script mit nomadMemory geht nicht. Und HWID Frage

01/14/2012 11:45 Cr41s3'#1
Hallo Lute,

Ich habe eine Frage ich will für mich einen Hack erstellen,

aber leider verändert er die Values wohl nicht, da nix passiert.

Hier das Script:

Code:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WindowsConstants.au3>
#include <NomadMemory.au3>
#include <EditConstants.au3>
#include <String.au3>
#include "GetHWID.au3"
#include <WinAPI.au3>
#include <Memory.au3>
#include <GDIPlus.au3>
#RequireAdmin
Global Const $RT_BITMAP = 2
Global Const $RT_RCDATA = 10


$hGui = GUICreate("Form1", 700, 349, 272, 167)
$Group1 = GUICtrlCreateGroup("Player", 8, 120, 145, 225)
$SPR = GUICtrlCreateCheckbox("SP Refill", 24, 176, 97, 17)
$SP = GUICtrlCreateCheckbox("Inf. SP", 24, 203, 97, 17)
$GOD = GUICtrlCreateCheckbox("Godmode", 24, 150, 97, 17)
$AMMO = GUICtrlCreateCheckbox("Inf. Ammo", 24, 130, 97, 17)
;$Pic = GUICtrlCreatePic("", 70, 0, 500, 500)
;_SetImagefromResource($Pic, "jcm", @ScriptDir & "\jcm.dll", 2)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Group2", 160, 120, 169, 225)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup("Group3", 336, 120, 153, 225)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group4 = GUICtrlCreateGroup("Credits", 496, 128, 113, 41)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#cs
Do
	$Msg = GUIGetMsg()
	If $Msg == $Pic Then ShellExecute("s4.de.alaplaya.net")
	Sleep(50)
Until $Msg == -3
#ce
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case -3
			Exit
			If ProcessExists("S4Client.exe") <> 0 Then
				_Werte_Aendern()
			EndIf
	EndSwitch
WEnd

Func _Werte_Aendern()
	$PID = ProcessExists("S4Client.exe")
	$Open = _MemoryOpen($PID)
	If GUICtrlRead($SPR) = 1 Then
		_MemoryWrite(0x********, $Open, "4", "Byte")
	EndIf
; Hier habe ich alles lieber rausgenomen.
	_MemoryClose($Open)
	Exit
EndFunc   ;==>_Werte_Aendern

Func _SetImageFromResource($CtrlID, $Resname, $Resfile = -1, $ResType = 10)
	;Diese Funktion basiert auf der UDF von [Only registered and activated users can see links. Click Here To Register...] und Code von [Only registered and activated users can see links. Click Here To Register...]
	Local Const $IMAGE_BITMAP = 0
	Local Const $STM_SETIMAGE = 0x0172
	Local $hmod, $hwnd, $InfoBlock, $ResSize, $Mem, $pMem, $dll, $dll2, $hData, $pData, $pStream, $ret, $hBitmap, $pBitmap
	If $Resfile = -1 Then
		$hmod = _WinAPI_GetModuleHandle("")
	Else
		$hmod = _WinAPI_LoadLibrary($Resfile)
	EndIf
	If $ResType = $RT_BITMAP Then
		$hBitmap = _WinAPI_LoadImage($hmod, $Resname, $IMAGE_BITMAP, 0, 0, 0)
		If @error Then Return SetError(1, 0, 0)
		$hwnd = GUICtrlGetHandle($CtrlID)
		If $hwnd = 0 Then Return SetError(2, 0, 0)
		DllCall("user32.dll", "hwnd", "SendMessage", "hwnd", $hwnd, "int", $STM_SETIMAGE, "int", $IMAGE_BITMAP, "int", $hBitmap)
		If @error Then Return SetError(3, 0, 0)
	Else
		$InfoBlock = DllCall("kernel32.dll", "int", "FindResourceA", "int", $hmod, "str", $Resname, "long", $ResType)
		If @error Then Return SetError(4, 0, 0)
		$InfoBlock = $InfoBlock[0]
		If $InfoBlock = 0 Then Return SetError(5, 0, 0)
		$ResSize = DllCall("kernel32.dll", "dword", "SizeofResource", "int", $hmod, "int", $InfoBlock)
		If @error Then Return SetError(6, 0, 0)
		$ResSize = $ResSize[0]
		If $ResSize = 0 Then Return SetError(7, 0, 0)
		$Mem = DllCall("kernel32.dll", "int", "LoadResource", "int", $hmod, "int", $InfoBlock)
		If @error Then Return SetError(8, 0, 0)
		$Mem = $Mem[0]
		If $Mem = 0 Then Return SetError(9, 0, 0)
		$pMem = DllCall("kernel32.dll", "int", "LockResource", "int", $Mem)
		If @error Then Return SetError(8, 0, 0)
		$pMem = $pMem[0]
		If $pMem = 0 Then Return SetError(10, 0, 0)
		If $Resfile <> -1 Then DllCall("Kernel32.dll", "int", "FreeLibrary", "str", $hmod)
		$hData = _MemGlobalAlloc($ResSize, 2)
		$pData = _MemGlobalLock($hData)
		_MemMoveMemory($pMem, $pData, $ResSize)
		_MemGlobalUnlock($hData)
		$ret = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "int", $hData, "long", 1, "Int*", 0)
		$pStream = $ret[3]
		_GDIPlus_Startup()
		$pBitmap = DllCall($ghGDIPDll, "int", "GdipCreateBitmapFromStream", "ptr", $pStream, "int*", 0)
		$pBitmap = $pBitmap[2]
		$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pBitmap)
		$hwnd = GUICtrlGetHandle($CtrlID)
		If $hwnd = 0 Then Return SetError(11, 0, 0)
		DllCall("user32.dll", "hwnd", "SendMessage", "hwnd", $hwnd, "int", $STM_SETIMAGE, "int", $IMAGE_BITMAP, "int", $hBitmap)
		If @error Then Return SetError(12, 0, 0)
		_GDIPlus_BitmapDispose($pBitmap)
		_GDIPlus_Shutdown()
		$dll = DllStructCreate("Uint", $pStream)
		$dll2 = DllStructCreate("uInt", DllStructGetData($dll, 1) + 8)
		DllCall("", "UInt", DllStructGetData($dll2, 1), "UInt", $pStream)
		_WinAPI_DeleteObject($pStream)
		$pStream = 0
		_MemGlobalFree($hData)
	EndIf
EndFunc   ;==>_SetImageFromResource


Danke Slyzze
01/14/2012 16:28 KDeluxe#2
So etwas sieht man immer gerne. Hilfe wollen und dann die Möglichkeit ausschließen anderen zu helfen, indem relevantes gelöscht oder zensiert wird.

Fängt schon damit an, dass du zu viele unnötige Includes in deinem Script hast. Dein wirkliches Problem lässt sich aber einfach erklären: Um die Werte zu ändern muss die Funktion "_Werte_Aendern()" aufgerufen werden. Diese Funktion wird aber nie aufgerufen, da sich der einzige Funktionsaufruf unter dem "Exit" beim schließen des Fensters befindet. Das "Exit" am Ende der Funktion hat dort auch nicht wirklich etwas verloren.

Richtig wäre und besser wäre es z. B. so:
PHP Code:
While Sleep(50)
    
$nMsg GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
    EndSwitch

    
$ProcessId ProcessExists("S4Client.exe")
    If 
$ProcessId 0 Then _Werte_Aendern($ProcessId)
WEnd

Func _Werte_Aendern
($ProcessId)
    
$Handle _MemoryOpen($ProcessId)
    If 
Not @error Then
        
If BitAND(GUICtrlRead($SPR), $GUI_CHECKEDThen
            
;_MemoryWrite()
        EndIf

        If 
BitAND(GUICtrlRead($SP), $GUI_CHECKEDThen
            
;_MemoryWrite()
        EndIf

        If 
BitAND(GUICtrlRead($GOD), $GUI_CHECKEDThen
            
;_MemoryWrite()
        EndIf

        If 
BitAND(GUICtrlRead($AMMO), $GUI_CHECKEDThen
            
;_MemoryWrite()
        EndIf

        
_MemoryClose($Handle)
    Else
        ;
Fehlermeldung
    
EndIf
EndFunc 
Allerdings habe ich starke Zweifel daran, dass das ohne Pointer mit _MemoryWrite() funktioniert. Falls du also die Frage hast, wieso es immer noch nicht funktioniert → such die Pointer. Und wenn es dann immer noch nicht funktioniert, würde ich es mal auf XTrap, HackShield oder was auch immer S4 verwendet schieben. Mehr kann ich dazu nicht sagen.



Zu guter Letzt deine Frage bezüglich des HWID Systems. Aber erst möchte ich etwas anmerken. Du schreibst, dass du den Hack für dich machen möchtest, sollte das der Wahrheit entsprechen, wäre das HWID System nur lästig und unnötig. Realistischer ist es, dass du dich an einem Hack probieren möchtest um diesen am Ende auch zu releasen.
Falls du dir die Frage stellst, warum ich es schreibe, obwohl du diese Frage bereits durch das editieren deines Beitrags gelöscht hast: Du musst nicht unnötigerweise einen neuen Thread öffnen.

Zu lösen ist es ganz einfach, benutze einfach meine UDF:
[Only registered and activated users can see links. Click Here To Register...]

PHP Code:
#include <GetHWID.au3>

$Info _GetHWIDData()
If 
Not @error Then
    
If $Info[3] > 99 And $Info[4] > 49 Then ;If posts 99 And thanks 49 Then
        
;...
    EndIf
EndIf 
01/14/2012 16:33 Cr41s3'#3
Danke,

sorry ich habe das rausgenommen weil sont jeder die Values hat und jemand hat mir die Anvertraut.
Ich versuchs mal.

Das mit dem HWID hat sich schon erledigt.

Also muss ich unter MemoryWrite die ADressen packen?
Ich checks gerade nicht ganz.

Mein Fehler hab's in Ruhe durchgelesen.
Teste alles gleichmal.

Wofür ist de Variable $GUI_CHECKED?
01/14/2012 16:44 KDeluxe#4
Zum überprüfen, ob die Checkbox ausgewählt wurde.

In deinem Script hast du doch selbst _MemoryWrite() verwendet, was verstehst du daran nicht? Du hast die Informationen gelöscht oder zensiert, also habe ich einen Kommentar hinzugefügt, dass dort deine _MemoryWrite() Befehle hingehören.
01/14/2012 16:49 Cr41s3'#5
Ja,

ich weiß ich habe zu schnell gelsen :facepalm:

Noch eine Frage erstmal.
Wie kann ich das machen, dass man ein Thanks bei dem Release geben muss.
Also kein Thanks = Kein Programm ( falls ich es Release )
01/14/2012 17:01 KDeluxe#6
Das ist zwar ganz einfach, aber ich werde dir dafür kein Script geben. Jeder der selbst etwas vernünftiges releasen kann, kann auch so eine einfache Überprüfung durchführen.

Die benötigten Funktionen kann ich dir sagen:
_GetHWIDData()
InetRead()
_StringBetween()
StringInStr()
01/14/2012 17:12 Cr41s3'#7
Hm,

ALso MemoryWrite habe ich die Adresse die ist richtig und will die Value Byte in 1 ändern das klappt aber nicht -.-"

Oke voon Strings habe ich noch keine AHnung aber egal.
01/15/2012 17:24 Cr41s3'#8
BUMP.

Hilfe
01/15/2012 21:31 Diablo_#9
1. Warum sind dir Thanks so wichtig? Einen Hack gegen Thanks releasen habe ich noch nie gesehen und halte es auch für schwachsinnig. Thanks bringen dich nicht weiter. Dann nimm lieber Geld.

2. Ich bin kein AutoIt Profi aber es gibt die HTTP Webrequest Methode, mit der man soetwas (Thanks) abfragen kann. In VisualBasic.Net würde ich das schnell hinkriegen, die Befehle dafür in AutoIt kenne ich nicht.

Sonst suche mal nach den Befehlen, die KillerDeluxe dir gegeben hat im Internet, vieleicht verstehst du es dann. Mit Strings kann man gut arbeiten und es ist eigentlich ziemlich leicht.

3. Dein Script kann garnicht so funktionieren, wie du es gerne hättest. KillerDeluxe hat es schon richtig geschrieben, du brauchst die Pointer (Bzw. Offsets) für S4League. Die Adresse die du da jetzt hast ist schon lange nicht mehr gültig. Die gilt nur für das eine Mal, wenn du S4 startest. Nach Neustart ist die Adresse für die HP Beispielsweise wieder anders.

Da kommen die Pointer und Offsets in's Spiel. Die zu suchen ist schon kniffliger.

Grüße
01/16/2012 14:56 Cr41s3'#10
Nur ist das egal Ich will nur wissen wieso das mit memorywrite nicht geht Oo
01/16/2012 16:30 lolkop#11
wenn du über winapis den speicher modifizieren möchtest, musst du zunächst schauen, ob dein zielprozess eventuell geschützt wird. davon abgesehen sind für den zugriff auf den speicher anderer programme adminrechte notwendig.

wenn du dir ganz sicher bist, das der prozess nicht geschützt ist, und die notwendigen rechte vorliegen, und der wert wird dennoch nicht gesetzt, kannst du anfangen die rückgabewerte der winapis zu analysieren.
  • wurde openprocess mit den benötigten rechten ausgeführt?
  • was gibt openprocess aus?
  • handelt es sich wirklich um ein handle?
  • setzt ReadProcessMemory irgendwelche fehlerflags?
  • wenn ja welche, und warum?
01/16/2012 17:26 Diablo_#12
Quote:
Originally Posted by .Downkalypse View Post
Nur ist das egal Ich will nur wissen wieso das mit memorywrite nicht geht Oo
Hast du meinen Beitrag überhaupt vollständig gelesen? Es kann so nicht funktionieren. Die Adresse die du da hast funktioniert nicht.

Damit dein Trainer auch in Zukunft bis zum nächsten Patch funktioniert, brauchst du Pointer und Offsets.
01/18/2012 18:31 Cr41s3'#13
Echt.

Nur leider gehen sie :facepalm:

Es geht nun alles Danke an RealFreak.
#clsrq
01/18/2012 18:51 Diablo_#14
Quote:
Originally Posted by .Downkalypse View Post
Echt.

Nur leider gehen sie :facepalm:

Es geht nun alles Danke an RealFreak.
#clsrq
Du hast die Sachen nicht selber zusammengesucht, hast einen Code von irgendwo kopiert und weißt dann nichtmal wie man das benutzt. Dann will ich dir erklären, dass es so nicht funktioniert und du zeigst mir eine Facepalm?

Entweder werden bei S4 die Adressen nicht geändert (was ich aber nicht glaube) oder es stand etwas Relevantes in deinem zensierten Code, was ich natürlich dann nicht lesen kann.

Adressen alleine reichen halt nicht.