Diskussionen über Memorys

12/27/2008 23:22 Ganf#256
naja, der aktuelle pin kann sich schnell ändern! Je nachdem ob du deine Sleepzeiten Realtime berechenn willst, oder am amfang für alle!

MFG
Ganf
12/28/2008 12:33 jeyage#257
Theoretisch kann man sich ja auch selbst den durchschnittlichen Ping berechnen. Aber praktisch ist das Abfragen einfacher^^
12/28/2008 14:18 Ganf#258
Quote:
Originally Posted by jeyage View Post
Theoretisch kann man sich ja auch selbst den durchschnittlichen Ping berechnen. Aber praktisch ist das Abfragen einfacher^^
jep, aber des von mir war nur ein vorschlag. Ich sehe nur dadurch den eigentlichen sinn!
12/28/2008 14:38 Azunai#259
o0
warum so aufwendig o0

macht am anfang einfach nen ping an euren Guild Wars server

dann nach 1 sek nochmal

beide addieren /2 und fertig ist die latency funktion o0
12/30/2008 17:48 Jacob_G#260
So lass ich bei mir eine statische Adresse in der Section A finden. Doch fehlt mir da immernoch die Section D. Wie kann ich da denn was finden?

Code:
#include <NomadMemory.au3>
Global  $start_a , $end_a , $value , $hprocess


Func _Sec_A()
	$hprocess = _MemoryOpen(ProcessExists("Gw.exe"))
	$start_a = 0x00A00000
	
	Do
		$value = _MemoryRead($start_a, $hprocess)
		$start_a = $start_a + 1
	Until $value == 1697544007 ;// Gw.exe
$start_a = $end_a - 1
EndFunc
12/30/2008 17:52 blauwiggle#261
Quote:
Originally Posted by xninja View Post
So lass ich bei mir eine statische Adresse in der Section A finden. Doch fehlt mir da immernoch die Section D. Wie kann ich da denn was finden?

Code:
#include <NomadMemory.au3>
Global  $start_a , $end_a , $value , $hprocess


Func _Sec_A()
	$hprocess = _MemoryOpen(ProcessExists("Gw.exe"))
	$start_a = 0x00A00000
	
	Do
		$value = _MemoryRead($start_a, $hprocess)
		$start_a = $start_a + 1
	Until $value == 1697544007 ;// Gw.exe
$start_a = $end_a - 1
EndFunc
until .. stehe ich in dem bereich/spawnpunkt

PosX=0x00D28990
PosY=0x00D28994
12/30/2008 17:56 Jacob_G#262
Bei meiner Variante muss man sich halt nicht dahinstellen, allerdings habe ich das nur für Section A und nich auch für D, deswegen frage ich ja ob schon was für D gefunden wurde^^.
12/30/2008 18:30 __wadim#263
warum macht ihr das nicht so:
Code:
#include <NomadMemory.au3>

$ah_Handle = _MemoryOpen(ProcessExists ("gw.exe"))
$pattern="558BEC83 EC1056.. ........ ....8B08 890D.... ....8BCF 8B50.... ........ ......8B 400889.."

$timer=TimerInit()
$find=_MemoryScan($ah_Handle, $pattern, true)
$timer=TimerDiff($timer)
$N_SECTION_D_POSX = _MemoryRead($find, $ah_Handle)
$POSX = Round(_MemoryRead($N_SECTION_D_POSX, $ah_Handle, "float"), 0)
msgbox(0, "Found", "Found: " & $find & " in " & Round($timer,0) & "ms." & @LF & "Address: " & Hex($N_SECTION_D_POSX) & " Value: " & $POSX)

Func _MemoryScan($ah_Handle, $pattern, $after=false, $iv_addrStart=0x00400000, $iv_addrEnd=0X00FFFFFF, $step=51200)
	If Not IsArray($ah_Handle) Then
		SetError(1)
        Return -1
	EndIf
	$pattern=StringRegExpReplace($pattern, "[^0123456789ABCDEFabcdef.]", "")
	IF StringLen($pattern)=0 Then 
		SetError(2)
        Return -1
	EndIf
	For $addr=$iv_addrStart To $iv_addrEnd Step $step-(StringLen($pattern)/2)
		StringRegExp(_MemoryRead($addr, $ah_Handle, "byte[" & $step & "]"), $pattern, 1, 2)
		If Not @Error Then
			If $after Then
				return StringFormat("0x%.8X", $addr+((@Extended-2)/2))
			Else
				return StringFormat("0x%.8X", $addr+((@Extended-StringLen($pattern)-2)/2))
			EndIf
		EndIf
	Next
	Return -1
EndFunc
12/30/2008 20:20 Jacob_G#264
Quote:
Originally Posted by __wadim View Post
warum macht ihr das nicht so:
Naja ^^ schau dir mal die Codelänge an xD.
12/30/2008 21:35 Ganf#265
Imgrunde ist es für die SectionD ja das gleiche! Mein C#-Code:

Section A:
Code:
        /// <summary>
        /// SearchMemoryAdsSectionA() - Searches the MemoryAddresses of SectionA.
        /// </summary>
        private void SearchMemoryAdsSectionA()
        {
            do
            {
                lpBuffer = new byte[4];
                {
                    if (IntPtrSecAPositionX.ToInt32() == 0)
                    {
                        ReadProcessMemory(this.GWProcess, this.StartMemSecA, this.lpBuffer, this.nSize, out this.lpNumberOfBytesWritten);
                        tempVarINT = BitConverter.ToInt32(this.lpBuffer, 0);
                        if (tempVarINT == 1170800638 || tempVarINT == 1170800639 || tempVarINT == 1170800640)
                        {
                            IntPtrSecAPositionX = StartMemSecA;
                            Debug.WriteLine("SectionA - Position X: " + this.ConvertIntToHex(StartMemSecA.ToInt32(), 1));
                        }
                    }
                }
          }
     }
Und dementsprechend Section D:
Code:
       /// <summary>
        /// SearchMemoryAdsSectionD() - Searches the MemoryAddresses of SectionD.
        /// </summary>
        private void SearchMemoryAdsSectionD()
        {
            do
            {
                lpBuffer = new byte[4];
                {
                    if (IntPtrSecDPositionX.ToInt32() == 0)
                    {
                        ReadProcessMemory(this.GWProcess, this.StartMemSecD, this.lpBuffer, this.nSize, out this.lpNumberOfBytesWritten);
                        tempVarINT = BitConverter.ToInt32(this.lpBuffer, 0);
                        if (tempVarINT == 1170800640)
                        {
                            IntPtrSecDPositionX = StartMemSecD;
                            Debug.WriteLine("SectionD - Position X: " + this.ConvertIntToHex(StartMemSecD.ToInt32(), 1));
                        }
                    }
              }
       }
}
Also musst du eigentlich nur solange Suchen, bis du die Werte für die Char-Position in der SectionD gefunden hast!


MFG
Ganf
12/30/2008 22:05 Jacob_G#266
Ich frage mich nur wo Wadim das Muster her hat: "558BEC83 EC1056.. ........ ....8B08 890D.... ....8BCF 8B50.... ........ ......8B 400889.." . Das is ja nicht der Hexdump von der PosX.
12/30/2008 22:59 Gabba2#267
@ Wadim: Könntest du evtl. wieder Posx/PosY aus Section A und Das Kaufmanns Fenster einfügen? Klar, je weniger desto übersichtlicher ist es aber die 2 vermisse ich schmerzlich (ich denke mal andere auch) ; / Kaufmanns Fenster X ist atm 0xa026DC.
12/30/2008 23:39 __wadim#268
Quote:
Originally Posted by Gabba2 View Post
@ Wadim: Könntest du evtl. wieder Posx/PosY aus Section A und Das Kaufmanns Fenster einfügen? Klar, je weniger desto übersichtlicher ist es aber die 2 vermisse ich schmerzlich (ich denke mal andere auch) ; / Kaufmanns Fenster X ist atm 0xa026DC.

einfach nochmal runterladen ;)
12/30/2008 23:55 Jacob_G#269
Wadim kannst mir nommal verraten wie du das Muster im Speicher gefunden hast?
12/31/2008 00:09 __wadim#270
du hast zb eine statische adresse (D posx). jetzt musst du rausfinden in welcher funktion die adresse verwendet wird.
dann suchst du nach dieser funktion... dazu musst du irgendwelche offsets zur funktion berechnen, damit du dann nach ihren werten suchen kannst.

zb
D posx in 7a71d8

die funktion 7a71d8:
1 558BEC83 push ebp
2 EC1056
3 ...
4 8B08
5 890D
6 blabla
7 blabla

jetzt suchst du nach diesem muster im bereich von zb 7?????-7FFFFF.


hoffe das konnte weiterhelfen :)