AutoIt

07/16/2006 09:37 doomy#1
Wäre es mit AutoIt möglich den Speicher irgendwie auszulesen.Das einzige was ich gefunden habe, das evtl dabei helfen könnte wäre die Dll aufruf funktion.Aber evtl. hab ich ja was übersehen.
07/16/2006 13:08 4C1D^#2
ich meine sowas ist mit autoit nicht moeglich..
was willst du damit machen? XD bot schreiben? ^^
07/17/2006 10:36 peterwurst#3
klar mit extensions und
glaub die autoit beta hat sowas in der art auch schon drauf

man nehme sich ein beispiel an syndrome...
07/18/2006 17:24 doomy#4
Kannste das etwas genauer Ausführen.Mich würde Interessieren wie man z.b. die Hitpoints oder die Koordinaten auf denen man sich gerade befindet ausliest.
07/19/2006 12:56 Mizu#5
würde das im bezug auf die hitpoints mit PixelGetColor probieren.
bei den koordinaten wirds schwer wenn du nicht den speicher liest, was natürlich direkt von warden gescannt wird.
ausser du nimmst die standart map koordinaten, das sollte im bereich des möglichen liegen.
07/19/2006 14:07 doomy#6
Abe darum gehts mir ja.Ich will die dAten direkt u dem Speicher auslesen.Das ist viel genauer und die Möglichkeiten sind zahlreicher damit was anzufangen.Warden mag den Speicher scannen, aber ich schreibe ja nichts hinein, sondern lese nur was drin steht.Das bringt Warden garnix...
07/19/2006 21:18 projectlaurin#7
hmm also du kannst wenn dus dir selber programmierst auslesen
hab ich mal dick gemacht aber wirst du auch wirklich daraus schlau?!
hier mal nen beispiel

0000 00 50 18 28 1d e8 00 d0 68 01 00 6a 08 00 45 00 .P.(.... h..j..E.
0010 00 28 25 01 40 00 80 06 b3 4d c0 a8 7b 8d 50 ef .(%.@... .M..{.P.
0020 95 5c 04 1a 0e 8c 68 84 50 79 81 8c f5 54 50 10 .\....h. Py...TP.
0030 fe 20 22 9c 00 00 . "...

wenn man icq ausließt, dann erkennt man ja noch wenigstens den username/icqnr aber da bei wow bin cih überfordert, wenn jamnd ahnung hat wie man aus dem "gewirr" was rauslesen kann melden!!
mfg
07/19/2006 23:49 doomy#8
Und wie lese ich das mit Hilfe von AutoIt aus :) ? Wenn aus dem Gewirr schlau werden willst, brauchste halt ein Tool das den Speicher auf bestimmte Werte absucht.

z.B :

Deine aktuelle Rüstung ist 1000.Also suchte nach dem Wert 1000.Da wirste zig Treffer landen.Also ziehste was aus.Danach haste ne Rüstung von 800.Also wieder nach 800 suchen etc. pp.Irgendwann bleiben nurnoch wenige Werte übrig und du hast die Adresse.
07/20/2006 11:11 projectlaurin#9
:P wenns so einfach währe blizz übermittelt ja auch coordinaten und mobs und hp und was weiß cih noch alles
ach ja meine rüssie oder etwas ähnliches/hp anzeige usw. hab hic nie gefunden
hab mcih au gebufft/gegessen aber keine abnormalitäten entdeckt, was mir nur aufgefallen ist, wenn ich nix mach sendet er immer das gleiche
mfg
aber wenn du mehr weißt sags mir :P dann hilft mir der ganze auslesekram endlich was

hab grad rausgefunden, dass text in reiner form gesendet wird und wenn man nen raid joint bekommt man die ganzen namen :P
ob des chatten mit horde funktioniert probier ich nachher mal aber hat jemand ne idee wo hingehen damit nix beeinflusst wird?! ich hab mir ja überlegt nördliche pestländer oder so am besten mit nem char ohne gilde oder so
weil sonst bkeommt man ja den ganzen anderen kram au ncoh gesendet usw.
07/20/2006 21:51 doomy#10
Kannst dir mal die Sources von diversen Bots etc. ankucken.Dort stehen die Adressen der alten Koordinaten von Hp, armor etc. Das interessantere allerdings ist wie die Daten im Paket damals ausglesen wurden.Blizz hat diese nicht eins zu eins in den Speicher geschrieben.
07/23/2006 10:05 doomy#11
#include-once
#region _Mem()
;================================================= =====================
; AutoIt Version: 3.1.127 (beta)
; Language: English
; Platform: All Windows
; Author: Nomad
; Requirements:
; These functions will only work with beta. If you place this
; script in your include folder, you can use these functions
; just as any other function, as long as you put
; "#include <Memory.au3>" in your script (or w/e you name it).
;================================================= =====================
; Credits:
; wOuter:
; These functions are based on his original _Mem() functions.
; They are easier to use and comprehend, IMO. These functions
; are in no way a direct copy of his functions. His functions
; only provided a foundation from which these evolved. The
; biggest changes were made made to _MemRead() and _MemWrite().
; You also no longer need to use _MemCreate() before using
; _MemWrite().
;================================================= =====================
; Additional:
; I've never used _MemRev(), _MemAlloc(), _MemFree(), or _MemText()
; So I did not attempt to revise them in any way and they are not
; included in this script.
;
; Please remember to credit accordingly for any use of these UDF's.
;================================================= =====================


;================================================= =====================
; Function Name: _MemOpen()
;
; Description: Opens the process specified by the Process ID and
; returns the necessary Dll information for reading
; from it's memory.
;
; Parameters:
; &#036;Pid = The Process ID of the program you want to open.
;
; &#036;InheritHandle = [optional] If this value is TRUE, processes
; created by this process will inherit the
; handle. Otherwise, the processes do not
; inherit this handle. Most users will not
; need to alter this parameter.
;
; Returns:
; On Success: Returns an array containing the .dll and an open handle
; to the specified process.
; On Failure: Returns 0 and sets error to 1
;================================================= =====================
Func _MemOpen(&#036;Pid, &#036;InheritHandle = 0x1F0FFF)

Local &#036;Dll[2] = [DllOpen('kernel32.dll')]
Local &#036;OpenProcess = DllCall(&#036;Dll[0], 'int', 'OpenProcess', 'int', &#036;InheritHandle, 'int', 0, 'int', &#036;Pid)

If @Error Then
DllClose(&#036;Dll[0])
SetError(1)
Return 0
EndIf

&#036;Dll[1] = &#036;OpenProcess[0]

Return &#036;Dll

EndFunc

;================================================= =====================
; Function Name: _MemRead()
;
; Description: Reads the value located in the memory address
; specified by the &#036;Address parameter. You must open
; the process first with _MemOpen()
;
; Parameters:
; &#036;Address = The memory address you want to read from.
; It must be in hex format (0x00000000).
;
; &#036;Dll = The necessary Dll information which is an array returned
; from _MemOpen().
;
; &#036;Type = [optional] The "Type" of value you intend to read.
; This is set to 'dword'(32bit(4byte) signed integer)
; by default. See the help file for DllStructCreate
; for all types. For example, if you want to read a
; word that is 15 characters in length, you would use
; 'char[15]' since a 'char' is 8 bits (1 byte) in size.
;
; Additional:
; Values returned are in Decimal format, unless specified as a
; 'char' type, then they are returned in ASCII format.
;
; Returns:
; On Success: Returns the value located at the specified address
; On Failure: Returns 0 and sets error to 1
;================================================= =====================
Func _MemRead(&#036;Address, &#036;Dll, &#036;Type = 'dword')

If Not IsArray(&#036;Dll) Then
SetError(1)
Return 0
EndIf

Local &#036;LpBuffer = DllStructCreate(&#036;Type)

DllCall(&#036;Dll[0], 'int', 'ReadProcessMemory', 'int', &#036;Dll[1], 'int', &#036;Address, 'ptr', DllStructGetPtr(&#036;LpBuffer), 'int', DllStructGetSize(&#036;LpBuffer), 'int', '')

If Not @Error Then
&#036;Value = DllStructGetData(&#036;LpBuffer, 1)
Return &#036;Value
Else
SetError(1)
Return 0
EndIf

EndFunc

;================================================= =====================
; Function Name: _MemWrite()
;
; Description: Writes data to the specified memory address
;
; Parameters:
; &#036;Address = The memory address which you want to write to.
; Must be in hex format (0x00000000).
;
; &#036;Dll = The necessary Dll information which is an array returned
; from _MemOpen().
;
; &#036;Value = The information you want to write.
;
; &#036;Type = [optional] The "Type" of value you intend to write.
; This is set to 'dword'(32bit(4byte) signed integer)
; by default. See the help file for DllStructCreate
; for all types. If you want to write a 'char' type,
; you will use 'char[15]' if it's 15 characters in
; length.
;
; Returns:
; On Success: Returns 1
; On Failure: Returns 0 and sets error to 1
;================================================= =====================
Func _MemWrite(&#036;Address, &#036;Dll, &#036;Value, &#036;Type = 'dword')

If Not IsArray(&#036;Dll) Then
SetError(1)
Return 0
EndIf

Local &#036;LpBuffer = DllStructCreate(&#036;Type)
DllStructSetData(&#036;LpBuffer, 1, &#036;Value, 1)

DllCall(&#036;Dll[0], 'int', 'WriteProcessMemory', 'int', &#036;Dll[1], 'int', &#036;Address, 'ptr', DllStructGetPtr(&#036;LpBuffer), 'int', DllStructGetSize(&#036;LpBuffer), 'int', '')

If Not @Error Then
Return 1
Else
SetError(1)
Return 0
EndIf

EndFunc

;================================================= =====================
; Function Name: _MemClose()
;
; Description: Closes the process which was opened using _MemOpen().
;
; Parameters:
; &#036;Dll = The necessary Dll information which is an array returned
; from _MemOpen().
;
; Returns:
; On Success: Returns 1
; On Failure: Returns 0 and sets error to 1
;================================================= =====================
Func _MemClose(&#036;Dll)

If Not IsArray(&#036;Dll) Then
SetError(1)
Return 0
EndIf

DllCall(&#036;Dll[0], 'int', 'CloseHandle', 'int', &#036;Dll[1])
If Not @Error Then
DllClose(&#036;Dll[0])
Return 1
Else
DllClose(&#036;Dll[0])
SetError(1)
Return 0
EndIf

EndFunc
#endregion