Register for your free account! | Forgot your password?

Go Back   elitepvpers > World of Warcraft > WoW Bots
You last visited: Today at 11:16

  • Please register to post and access all features, it's quick, easy and FREE!

 

Problem mit IDA Reversing (Wow Funktionen)

Reply
 
Old   #1
 
elite*gold: 104
Join Date: Oct 2012
Posts: 2,720
Received Thanks: 592
Problem mit IDA Reversing (Wow Funktionen)

Hey,
Ich wollte nun ein kleines Tool schreiben was Spielinterne Funktionen von WoW aufruft (Mini Bot). Um die Offsets rauszufinden ist IDA Pro ja eigendlich ganz schnieke, aber irgendwie scheinen die Offsets / Adressen die mir IDA Pro rauslässt falsch zu sein. Ich mach um die Addresse der jeweiligen Funktion zu bekommen normalerweise BASEADDY-FUNKTIONSADDY um dann das Offset rauszubekommen. Anschließend lass ich meine Dll GetModuleHandle(0)+offset machen und versuche die Funktion zu callen. Dabei crasht entweder Wow, oder es tut sich garnichts.

Nun habe ich mir gedacht "das kanns doch nicht sein, du machst doch normal nichts falsch Codetechnisch" und ich habs mit Cheatengine versucht.
Hatte die Minimap:SetZoom() reversed und getestet das Zoomlevel der Minimap damit zu verändern mit meiner Dll, funktionierte alles einwandfrei.. Demnach muss es an IDA Pro liegen, ich weiß aber nicht was genau ich falsch mache oder woran es liegen könnte.. Hätte ja die Funktionen die ich brauch ebenfalls mit CheatEngine rausgesucht aber das funktioniert nicht mal eben so (beim Setzoom konntest das zoomlevel suchen..).

Kann mir jemand helfen? Derjenige der mir hilft bekommt dann auch als entlohnung bisschen e*gold

p.s: Es ist die 32bit Wow Binary, also keine 64bit



Cambios is offline  
Old   #2
Frosty the Snowman

 
elite*gold: 55
Join Date: Oct 2009
Posts: 5,350
Received Thanks: 1,447
Ohne Code nix los

Nahezu alle relevanten Funktionen in WoW müssen vom Mainthread aus gecallt werden, wenn du dies nicht tust passiert entweder garnix, es gibt keinen Crash oder es funktioniert mit Glück weil gerade jeder andere Thread seine Nase da raus hält.

Wichtig ist v.a. der ASM-Code mit welchem du die Funktion callst, nicht dass du dann einen ungültigen Stack hinterlässt oder einfach mal die Register nicht wieder richtig gesetzt hast.


Frosttall is offline  
Old   #3
 
elite*gold: 104
Join Date: Oct 2012
Posts: 2,720
Received Thanks: 592
Quote:
Originally Posted by Frosttall View Post
Ohne Code nix los

Nahezu alle relevanten Funktionen in WoW müssen vom Mainthread aus gecallt werden, wenn du dies nicht tust passiert entweder garnix, es gibt keinen Crash oder es funktioniert mit Glück weil gerade jeder andere Thread seine Nase da raus hält.

Wichtig ist v.a. der ASM-Code mit welchem du die Funktion callst, nicht dass du dann einen ungültigen Stack hinterlässt oder einfach mal die Register nicht wieder richtig gesetzt hast.
Liegt ja weniger am Code sondern am rausfinden des Offsets das mich dann zur Funktion führt..
Beispiel -> Mit Cheatengine fand ich raus das SetZoom() bei WoW.exe+0x2E1F00 liegt, rufe ich das mit meiner Dll auf funktioniert es wunderbar. Wenn ich nun aber mit Ida Pro oder Ollydbg schaue steht dort z.b als Funktionsadresse der SetZoom() 0x00A578D0 , und wenn ich 0x00A578D0 von der Main-Base (der in IDA Pro) abziehe kommt das Offset 0x6578D5 raus was aber völliger unsinn ist und nicht auf die ursprüngliche Funktion verweist wie gewollt (Das richtige Offset ist ja ein ganz anderes)

Verwirrt mich tierisch weshalb da so ein Unsinn dabei raus kommt..

Aber sofern es weiterhilft..^-^*
Quote:
#define offset 0x2E1F00

DWORD WINAPI hackthread(void)
{
DWORD EngineBase = (DWORD)GetModuleHandle(0);
DWORD ReloadFunc = EngineBase+offset;

typedef int(__cdecl* ReloadUI)(int zoomlvl);
ReloadUI my_ReloadUI = (ReloadUI)ReloadFunc;

my_ReloadUI(0); //Minimap Zoom auf nidrigste Stufe setzen
return 0;
}
Cambios is offline  
Old   #4
Frosty the Snowman

 
elite*gold: 55
Join Date: Oct 2009
Posts: 5,350
Received Thanks: 1,447
Also bei mir gibt es keine SetZoom welche sich einfach so auf diesem Wege callen lässt.

Allem vorran solltest du mal schauen ob die Baseadressen die du da ausliest überhaupt übereinstimmen, desweiteren wäre es mal gut zu wissen wie du sowas mit CheatEngine rausfindest O.o


Frosttall is offline  
Old   #5
 
elite*gold: 104
Join Date: Oct 2012
Posts: 2,720
Received Thanks: 592
Quote:
Originally Posted by Frosttall View Post
Also bei mir gibt es keine SetZoom welche sich einfach so auf diesem Wege callen lässt.

Allem vorran solltest du mal schauen ob die Baseadressen die du da ausliest überhaupt übereinstimmen, desweiteren wäre es mal gut zu wissen wie du sowas mit CheatEngine rausfindest O.o
1)

Mal ein Testvideo wo ich zeige wie die Dll den Zoom verstellt^^
die Minimap:SetZoom(int zoomlevel) ist ne Funktion die du z.b über ein Addon ansteuern kannst, oder mit den Zoom-Buttons an der Minimap (Plus und Minuszeichen)

2)
Wie gesagt, die Baseadressen die ich mit c++ auslese stimmen schon..
Ida Pro hat ja z.b jetzt 00400000 , und wenn ich dann die jeweilige Adresse der Funktion nehme und die 00400000 abziehe, dann bekomme ich ja normalerweise das offset raus, so das ich wieder Base+offset machen kann & dann die funktion callen.

3)
Naja, SetZoom setzt ne interne Variable nach der du suchen kannst,
und anhand der variable gehe ich dann über den Cheatengine debugger und schau mir die Funktion im Memory Viewer an ..

You must register and activate your account in order to view images.
Cambios is offline  
Old   #6
Frosty the Snowman

 
elite*gold: 55
Join Date: Oct 2009
Posts: 5,350
Received Thanks: 1,447
Die Funktion ist dann wohl keine Lua-Funktion und wenn du mal den richtigen Funktionsnamen (wie er im debugbuild steht) hast dann kann man da vielleicht auch helfen.

CheatEngine ist für sowas einfach nur müll.
Frosttall is offline  
Old   #7
 
elite*gold: 104
Join Date: Oct 2012
Posts: 2,720
Received Thanks: 592
Quote:
Originally Posted by Frosttall View Post
Die Funktion ist dann wohl keine Lua-Funktion und wenn du mal den richtigen Funktionsnamen (wie er im debugbuild steht) hast dann kann man da vielleicht auch helfen.

CheatEngine ist für sowas einfach nur müll.
Der Funktionsname ist "sub_A578D0" und lässt sich finden indem man die Wow.exe öffnet und in den String einfach nach "SetZoom" sucht

You must register and activate your account in order to view images.
Cambios is offline  
Old   #8
Frosty the Snowman

 
elite*gold: 55
Join Date: Oct 2009
Posts: 5,350
Received Thanks: 1,447
Ich hab eine rebased idb-datei und bei mir heißt sie so:

Code:
.text:006578D0 Script_SetZoom_class34 proc near        ; DATA XREF: .data:00B56CF4o
Woher weißt du denn dass die base stimmt? Lesen CE und C++ die gleiche Base aus?






Das ist definitiv eine Lua-Funktion und sie so zu callen ist trotzdem falsch.
Code:
int __cdecl Script_SetZoom_class34(int luaPtr)
{
  signed __int64 v1; // [email protected]
  int result; // [email protected]
  int v3; // [sp+0h] [bp-10h]@0

  if ( sub_11A000(luaPtr, 2) )
  {
    v1 = (signed __int64)sub_11A110(luaPtr, 2);
    sub_2E1F00(v1);
    result = 0;
  }
  else
  {
    sub_11B5A0(luaPtr, "Usage: SetZoom(level)", v3);
    result = 0;
  }
  return result;
}
Frosttall is offline  
Old   #9
 
elite*gold: 104
Join Date: Oct 2012
Posts: 2,720
Received Thanks: 592
Ja CE & C++ lesen die selbe Base aus, sonst würde die Beispiel Dll ja nicht funktionieren
Wie man die Lua Befehle Callt wusste ich nicht und da kenne ich mich noch nicht besonders aus, aber so wie ich das gemacht hatte scheint es ja auch zu funktionieren (möglich das es zufall ist das es bei setzoom ohne probleme klappt). Die Frage die sich mir eben stellt ist, wieso bekomme ich da falsche Offsets mit Ide Pro herraus?
Woher hast du die Rebased WoW.idb? Wird beim Rebasen etwas geändert an den Adressen oder ist es nur damit die Funktionsnamen besser lesbar werden?
Cambios is offline  
Old   #10
Frosty the Snowman

 
elite*gold: 55
Join Date: Oct 2009
Posts: 5,350
Received Thanks: 1,447
Rebasing ändert lediglich die imagebase auf 0x0 anstelle von 0x400000. Die Funktionsnamen habe ich durch geleakte Mac-Builds und Alphabuilds mit Debuginformationen.

Die zwei funktionen die du gepostest hast sind doch KOMPLETT verschiedene?!.... Die Funktion aus dem CheatEngine screen hat vier push am Ende, die in IDA jedoch keine.

Die Funktion die du in CheatEngine anschaust ist:
Code:
.text:002E1F00 sub_2E1F00      proc near               ; CODE XREF: Script_SetZoom_class34+3Dp

Die in IDA jedoch

Code:
.text:006578D0 Script_SetZoom_class34 proc near        ; DATA XREF: .data:00B56CF4o
Frosttall is offline  
Old   #11
 
elite*gold: 104
Join Date: Oct 2012
Posts: 2,720
Received Thanks: 592
Quote:
Originally Posted by Frosttall View Post
Rebasing ändert lediglich die imagebase auf 0x0 anstelle von 0x400000. Die Funktionsnamen habe ich durch geleakte Mac-Builds und Alphabuilds mit Debuginformationen.

Die zwei funktionen die du gepostest hast sind doch KOMPLETT verschiedene?!.... Die Funktion aus dem CheatEngine screen hat vier push am Ende, die in IDA jedoch keine.

Die Funktion die du in CheatEngine anschaust ist:
Code:
.text:002E1F00 sub_2E1F00      proc near               ; CODE XREF: Script_SetZoom_class34+3Dp

Die in IDA jedoch

Code:
.text:006578D0 Script_SetZoom_class34 proc near        ; DATA XREF: .data:00B56CF4o
Habe doch gesagt das irgendwas nicht stimmt wenn ich es mit Ida Pro raussuchen möchte, und das was ich mit Cheatengine fand die richtige funktion war.. habe in einem englischen forum nachgefragt und die haben mir erklärt das der weg wie ich es mit ida pro versuche rauszufinden mich nicht zu der gesuchten funktion bringt sondern zum lua wrapper.. seufz
Das war ein harter Fail.. kein wunder das die Funktion die ich mit Ida Pro fand nicht funktionierte.. die frage stellt sich nun nur -> wie komme ich an die richtigen funktionen ran,wenn nicht über den mir üblichen bekannten weg

Müsste ich den Lua Wrapper nutzen und darüber mein Lua befehl übergeben so das er ausgeführt wird oder wie soll das gehen?
Cambios is offline  
Old   #12
Frosty the Snowman

 
elite*gold: 55
Join Date: Oct 2009
Posts: 5,350
Received Thanks: 1,447
Mit Cheat Engine hast du die Funktion aufgerufen welche von der Lua-Funktion aufgerufen wird. Deshalb hat es auch geklappt.

Dies ist jedoch keinsfalls die Regel sondern du musst über (wie ich bereits auf pwnedcore sagte) Framescript_ExecuteBuffer gehen.

Dies ist jedoch vermutlich far beyond your knowledge weshalb du jetzt wohl an einem toten Punkt angelangt bist.

Ein injected Bot ist nicht gerade ein Pappenstiel und du solltest dich erstmal mit OOP-Zeug beschäftigen bevor du an das Callen von Funktionen oder Injection denkst.
Frosttall is offline  
Old   #13
 
elite*gold: 104
Join Date: Oct 2012
Posts: 2,720
Received Thanks: 592
Quote:
Originally Posted by Frosttall View Post
Mit Cheat Engine hast du die Funktion aufgerufen welche von der Lua-Funktion aufgerufen wird. Deshalb hat es auch geklappt.

Dies ist jedoch keinsfalls die Regel sondern du musst über (wie ich bereits auf pwnedcore sagte) Framescript_ExecuteBuffer gehen.

Dies ist jedoch vermutlich far beyond your knowledge weshalb du jetzt wohl an einem toten Punkt angelangt bist.

Ein injected Bot ist nicht gerade ein Pappenstiel und du solltest dich erstmal mit OOP-Zeug beschäftigen bevor du an das Callen von Funktionen oder Injection denkst.
Ehrlichgesagt wollte ich das jetzt machen um mich ein bisschen weiter zu bilden.. wollte nur mein Addon was ich fürs AH schrieb jetzt als C++ Portierung machen,was nur ca. 10-20 Zeilen code gewesen wären..
und da es mit dem Setzoom so relativ easy ging dachte ich wird es mit anderen Funktionen wahrscheinlich ähnlich gut klappen..

Werde es mir mal genauer anschaun, nochmals vielen Dank für die hilfe - hat mir sehr weiter geholfen.
Cambios is offline  
Old   #14
 
elite*gold: 5
Join Date: Feb 2009
Posts: 281
Received Thanks: 226
Haha :P wenn du sowas machen willst kannst du auch Crawlerbots - ein lua script erstellen und damit Programmieren ;-). Schlüsselwort: WowLuaDoString("print('Hello World')").

Aber um auch etwas passendes zu diesem Thread zu posten:

Du brauchst keine OOP kenntnisse o.O das ist quatsch *LOL*

Was du jedoch haben musst ist eine gewisse basis an assembler.

Die Function die du callen willst/musst ist:

Code:
DWORD FrameScript__Execute =  0x75B00; // OK
Hier der pseudo:
Code:
int __cdecl FrameScript_ExecuteBuffer(const char *a1, int a2, int a3)
Wie Frosti schon sagte musst du diese Funktion aus dem mainthread callen. Dazu gibt es mehrere möglichkeiten:

1) Du hookst eine Function im mainthread z.B: Endscene (ONLY MAINTHREAD) , GetTicketCount (HIER DIE THREADID beachten)....

2) Bei einem Dll project kannst du den Mainthread pausieren und dann dir den context holen, deine function callen und den context anpassen.


Ja ich weiß du findest hb so toll und alle andere bots haben nichts drauf.... aber wie du vieleicht langsam selber merkst ist es wirklich viel arbeit ein bot zu erstellen... und die genannten sachen gehören nicht zu dem schwersten ;-). Deshalb ist es halt schade wenn leute die arbeit andere nicht für voll nehmen :P.

Mfg hamburger
hamburger1 is offline  
Old   #15
 
elite*gold: 104
Join Date: Oct 2012
Posts: 2,720
Received Thanks: 592
Quote:
Originally Posted by hamburger1 View Post
Haha :P wenn du sowas machen willst kannst du auch Crawlerbots - ein lua script erstellen und damit Programmieren ;-). Schlüsselwort: WowLuaDoString("print('Hello World')")

"Programmieren"? Das wär wohl eher Scripten du
Möcht ja aber nen eigenes Tool basteln und mich weiterbilden, das mache ich aber nicht indem ich bereits vorhandenes benutze^^
Und unabhängig bin ich dadurch auch nicht von Crawlerbots.


Cambios is offline  
Reply



« Previous Thread | Next Thread »

Similar Threads
C Funktionen Problem
Huhu habe ein problem mal wieder undzwar lernen wir in der Schule jetzt funktionen und sollen ein Programm für einen Briefmarken automaten schreiben....
4 Replies - C/C++
[Release]duffbier`s D3D NoMenu Base [D3D Funktionen/Normale Funktionen]
Hey Com. Ich hab mich entschieden meine D3D NoMenu Base zu Releasen In dieser kannst du normale Funktionen sowie D3D Funktionen adden ...
15 Replies - WarRock Hacks, Bots, Cheats & Exploits
°*NEW Funktionen*° th3man0f22 NO MENÜ Public Hack°*NEW Funktionen*° 06.09.2010
Funktionen: PLAYERPOINTER ¤SERVERPOINTER (Immer an)¤ ¤NOSPREAD (Numm-Pad 7)¤ ¤FULLBRIGHT (Numm-Pad 5)¤ ¤EXTRAAMMO1 (Immer an)¤ ¤EXTRAAMMO2...
2 Replies - WarRock Hacks, Bots, Cheats & Exploits
Funktionen-Problem
Hey Ich will ein Skript ganz einfach 2 Funktionen hintereinander ausführen lassen(Teil im Ausenposten----> Teil im Gebiet) Die erste Funktion...
8 Replies - GW Bot Discussions / Questions
Problem mit verschiedenen Funktionen
Also solangsam komm ich mir peinlich vor weil ich dauernt fragen hab.... (bin aber noch ein kleiner autoit-noobie:D) Also ich habe einen Bot...
2 Replies - AutoIt



All times are GMT +1. The time now is 11:16.


Powered by vBulletin®
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Abuse
Copyright ©2017 elitepvpers All Rights Reserved.