[Closed Beta] Generic Metin2 Multihack

09/30/2011 15:11 SandMann016#631
Nunja da bin ich überfragt da du die Abfragen so wie ich machst / noch besser also vondem-her kann sich kein Objekt / Kein Mob einschleichen...
Ich würde sagen das es an Vb.net liegt anderst kann ich es mir nicht vorstellen du führst ja auch nur die Assembler befehle aus mit deinem CreatRemoteThread... :/
09/30/2011 16:09 Mi4uric3#632
Am CreateRemoteThread kanns nicht liegen, da es ja meistens funktioniert und der Fehler nur manchmal kommt..

So mache ich das:
(PSEUDO-CODE! Aus vb.net und ASM, umgesetzt ist das ganze in Wirklichkeit in ASM, das heißt ich calle nur 1x CreateRemoteThread)
Code:
	Dim MobCounter As Integer = 0

Start:
	Mobcounter += 4

	Dim VID = GetVID(MobCounter)
	If VID = 0 Then GoTo NextMob

	Dim IsMob = GetInstance(MobCounter)
	If IsMob <> 0 Then GoTo NextMob

	Dim IsAlive = IsAlive(MobCounter)
	If IsAlive <> 1 Then GoTo NextMob

	__ASM
	{
		MOV ECX,[KlassenPointer]
		Push VID
		Push 00
		Call SendBattleAttackPacket
	}

	Goto NextMob

NextMob:
	If MobCounter = 113 * 4 Then
		Exit Sub
	Else
		Goto Start
	End If
Ich hab von Musicinstructor's Code gelernt, dass man maximal 113 Mobs pullen kann "da das Paket sonst zu lang ist", was auch immer das bedeuten soll.. Deswegen jedenfalls die Überprüfung mit 113. Und "* 4" natürlich wegen des Arrays.
09/30/2011 17:10 SandMann016#633
Tut mir leid ich mache es zu 80% gleich ... naja man kann sagen vom inhalt 100% auser das 113 oder * 4 ich weiß echt nicht was das soll ;) und man kann mit sicherheit mehr als 113 mobs pullen... ich habe im dt alle 238mobs angelockt....

Nunja was soll ich dazu noch sagen... wir machen das selbe aber irgentwie stürzt es bei dir auf Pservern ab :(.
10/01/2011 15:11 Mi4uric3#634
Wann hört er denn bei dir mit der Schleife auf? Bei 1000 Mobs?

VID: 0x678
Instance: 0x518
IsAlive: 0x560

Korrekt?
10/01/2011 15:59 SandMann016#635
Quote:
Originally Posted by Mi4uric3 View Post
Wann hört er denn bei dir mit der Schleife auf? Bei 1000 Mobs?

VID: 0x678
Instance: 0x518
IsAlive: 0x560

Korrekt?
Offsets stimmen 100%
__________________
nein bei i = 500 aber ich habe dazu programmiert wenn 150 erfolgreich angelockt sind das i = 500 also das es nicht zu viel pullt...das würde ja sicher kicks geben... besonderst im dt...
10/01/2011 16:32 Mi4uric3#636
Quote:
Originally Posted by SandMann016 View Post
Offsets stimmen 100%
__________________
nein bei i = 500 aber ich habe dazu programmiert wenn 150 erfolgreich angelockt sind das i = 500 also das es nicht zu viel pullt...das würde ja sicher kicks geben... besonderst im dt...
Ich glaube, ich weiß jetzt, woran das liegt.
Mir ist mal aufgefallen, dass manchmal eine Taste nicht mehr losgelassen wird (inGame) obwohl ich sie auf der Tastatur loslasse.
Das heißt es könnte sein, dass der P-Knopf dann immer wieder gedrückt wird und somit immer wieder die Routine aufgerufen wird.
Das führt natürlich zu Abstürzen.
Das könnte am "SuspendProcess" liegen, dass der Prozess das Loslassen der Taste nicht registriert.
Muss ich mal gucken, wie ich das löse..
10/01/2011 16:36 Computerfreek#637
Quote:
Originally Posted by Mi4uric3 View Post
Ich glaube, ich weiß jetzt, woran das liegt.
Mir ist mal aufgefallen, dass manchmal eine Taste nicht mehr losgelassen wird (inGame) obwohl ich sie auf der Tastatur loslasse.
Das heißt es könnte sein, dass der P-Knopf dann immer wieder gedrückt wird und somit immer wieder die Routine aufgerufen wird.
Das führt natürlich zu Abstürzen.
Das könnte am "SuspendProcess" liegen, dass der Prozess das Loslassen der Taste nicht registriert.
Muss ich mal gucken, wie ich das löse..
Lager das doch einfach in einen Thread aus den du vom Rest abgeschlossen anhalten kannst.
Weiß nicht wie du den Rest vom Hack aufgebaut hast, aber wäre eine Möglichkeit wenn ich das richtig sehe..
10/01/2011 16:36 Mi4uric3#638
P.S.: Ich hab das mit dem IsAlive() vorhin mal ausprobiert..
Kein einziges Mob wird angezogen.. :o

Quote:
Originally Posted by Computerfreek View Post
Lager das doch einfach in einen Thread aus den du vom Rest abgeschlossen anhalten kannst.
Weiß nicht wie du den Rest vom Hack aufgebaut hast, aber wäre eine Möglichkeit wenn ich das richtig sehe..
Hotkeys haben recht wenig mit einem Thread zu tun
10/01/2011 16:44 dertim96#639
wann wird der häck public??
10/01/2011 16:53 Mi4uric3#640
Quote:
Originally Posted by dertim96 View Post
wann wird der häck public??
Wenns klingelt
10/01/2011 16:54 Computerfreek#641
Quote:
Originally Posted by Mi4uric3 View Post
Hotkeys haben recht wenig mit einem Thread zu tun
Du sagst du machst SuspendProcess, dann frage ich mich: Wozu?
Was da suspendet werden soll lässt sich doch sicher auch in einen Thread auslagern, oder?
Wie gesagt, kenne den Aufbau des Hacks nicht, daher sind das nur Vermutungen.
10/01/2011 16:58 Mi4uric3#642
Quote:
Originally Posted by Computerfreek View Post
Du sagst du machst SuspendProcess, dann frage ich mich: Wozu?
Was da suspendet werden soll lässt sich doch sicher auch in einen Thread auslagern, oder?
Wie gesagt, kenne den Aufbau des Hacks nicht, daher sind das nur Vermutungen.
Achso :)
Nein nein, der Spieleprozess wird suspendiert, wenn ich im ASM-Bereich der Metin2 Engine schreibe.
Da die Bytes einzeln geschrieben werden (Ein Array kann aber auch mal 10 Bytes lang sein) und das Spiel just in diesem Moment an dieser Codestelle ist, dann entsteht ein komischer Befehl, da nur teilweise die Bytes verändert wurden, und dann stürzt das Spiel ab.
Damit das nicht passiert, wird der Prozess solange ich schreibe suspendiert, und danach läuft er wieder weiter.

Interessant ist jedoch, dass ich in der Callback Funktion des Hotkeys mal ein "Threading.Thread.Sleep(2000)" eingebaut habe (um zu testen ob dann der Knopf nicht andauernd gedrückt wird) und dann nimmt der PC für 2 Sekunden erstmal garkeine Tastaturanschläge an :D
Interessante Sache für nerv-Malware-Software :D
10/01/2011 17:54 SandMann016#643
Quote:
Originally Posted by Mi4uric3 View Post
P.S.: Ich hab das mit dem IsAlive() vorhin mal ausprobiert..
Kein einziges Mob wird angezogen.. :o
Code:
for (int i = 1; i < 500; i++)
{
      int live = *(int*)(*(DWORD*)(*(DWORD*)BasePointer + 0x4*index) + 0x560)
      int inst = *(int*)(*(DWORD*)(*(DWORD*)BasePointer + 0x4*index) + 0x518)
      if(live == 0 && inst == 0) //Lebel = 0, Tot = 1; Monster Instance = 0;
      {
            Mobber(GetVID(index));
      }
}
sicher das du es so machst?
0 = er lebt, 1 = er ist tot
10/01/2011 17:57 Mi4uric3#644
Das ist dann ja IsDead :<
Ich dachte das wäre die IsAlive Variable :/

Das Problem dabei ist einfach die Ungenauigkeit..
IsAlive ist besser als IsDead, da IsAlive auf 1 sein muss.. 0 kann häufig vorkommen, z.B. wenn in der Memory-Region garkein Mob ist..
Deshalb wär ein IsAlive besser..

Update

Code:
[URL="http://mi4uric3.de.vu/Generic Multihack/"]v1.5[/URL]
	- Added "Pick Up Close Items"
	- Bugfix "Pull Mobs with Hotkey 'P' "
	- Don't load old Cheat Tables ( Create a new one..! )
10/02/2011 00:44 UnlogischesBrot#645
Ich kann iwie garnichts mehr machen, kein neues Projekt starten ( kommt immer zugriff verweigert bei Dumping Game..) nichtmal mit der CE kann ich in metin2client.bin injecten
auf keinem Server .. wtf?