Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 01:02

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

Advertisement



[asm] EAT func adressen laden

Discussion on [asm] EAT func adressen laden within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
[asm] EAT func adressen laden

ich hab da einen kleinen denk fehler, ich versuche folgenden code in asm um zu coden

mein bisheriges ergebnis

allerdings habe ich ein problem mit dieser zeile:
Code:
DWORD funcRVA = *(DWORD*)(base + exportDir->AddressOfFunctions + *ordPtr * 4);
der asm ausschnitt ist mit '<---' gekennzeichnet.

jemand ne idee woran es liegen könnte?

fehler beispiel:
Kernel32 image base: 76E30000
Kernel32 EAT: 76EEF6A0
funcRVA befindet sich angeblich an: DBBBE438
Tyrar is offline  
Old 04/27/2012, 13:58   #2
 
link's Avatar
 
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 451
Du solltest Strukturen benutzen, AddressOfFunctions hat nämlich ein Offset von 1Ch.
Mit direkten Offsets zu arbeiten ist sehr unleserlich und so gut wie gar nicht wartbar.
Außerdem braucht man kein mul, da man einfach das SIB-Byte für die Adressierung benutzen kann (sprich mov eax,[eax+ebx*4+55h]).
Und wenn du einen kleineren Teil eines Registers veränderst und im größeren dann das Ergebnis erwartest, musst du das Carry-Flag berücksichtigen.

Code:
mov eax, DWORD [ddKernel32] ; <----
mov edx, DWORD [ddKernel32EAT]
add eax, DWORD [edx+0x28] ; address of functions
add ax, WORD [ecx]
xor edx, edx
mov dl, 4
mul edx
add eax, DWORD [ddKernel32]
mov DWORD [ddGetProcAddress], eax ; <---
->

Code:
mov eax, DWORD [ddKernel32] ; <----
mov edx, DWORD [ddKernel32EAT]
add eax, DWORD [edx+0x1C] ; address of functions
movzx edx,word [ecx]
mov eax,[eax+edx*4]
add eax, DWORD [ddKernel32]
mov DWORD [ddGetProcAddress], eax ; <---
Btw. ich würde statt der Variablen noch esi, edi und ebp hinzuziehen
link is offline  
Thanks
1 User
Old 04/27/2012, 15:03   #3
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Originally Posted by link View Post
Und wenn du einen kleineren Teil eines Registers veränderst und im größeren dann das Ergebnis erwartest, musst du das Carry-Flag berücksichtigen.
war mir bisher ehrlich gesagt gar nicht bewusst

Quote:
Originally Posted by link View Post
mov eax,[eax+ebx*4+55h]
natürlich self-

die register sind in diesem code allerdings mit absicht nicht verwendet worden

ty
Tyrar is offline  
Old 04/27/2012, 15:34   #4
 
link's Avatar
 
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 451
Wenn deine Adresse z.B. 76EEF6A0h und der Wert an [ecx], den du auf ax addierst, gleich B00h ist, dann steht in eax 76EE01A0h statt 76EF01A0h.
Dafür gibt es eigentlich add with carry, aber da der höherwertige 16-byte Part der Register nicht ansprechbar ist, müsste man mit adc einen Umweg gehen oder z.B. jc mit add eax,10000h hinzufügen, deswegen ist es einfacher, wenn du direkt movzx benutzt, sodass du den Wert auf 4-Bytes vergrößerst und ihn auf das komplette eax-Register addierst.
Das mit den Variablen sieht halt eher unschön aus, außerdem sind Speicherzugriffe ziemlich langsam.
link is offline  
Thanks
1 User
Old 04/27/2012, 15:44   #5
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Wenn deine Adresse z.B. 76EEF6A0h und der Wert an [ecx], den du auf ax addierst, gleich B00h ist, dann steht in eax 76EE01A0h statt 76EF01A0h.
Dafür gibt es eigentlich add with carry, aber da der höherwertige 16-byte Part der Register nicht ansprechbar ist, müsste man mit adc einen Umweg gehen oder z.B. jc mit add eax,10000h hinzufügen, deswegen ist es einfacher, wenn du direkt movzx benutzt, sodass du den Wert auf 4-Bytes vergrößerst und ihn auf das komplette eax-Register addierst.
das ergibt natürlich sinn, hätte ich allerdings nicht dran gedacht

Quote:
Originally Posted by link View Post
Das mit den Variablen sieht halt eher unschön aus, außerdem sind Speicherzugriffe ziemlich langsam.
da die func nur ein einziges mal zum start gecalled wird, macht das nichts... grundsätzlich setze ich auch auf register (natürlich wenn möglich ohne lokale variablen)
Tyrar is offline  
Reply


Similar Threads Similar Threads
key+key=func
02/09/2012 - AutoIt - 5 Replies
Wie schreibe ich das wenn ich beispielsweise ALT+F4 klicke das dann nix passiert anstatt das das programm ausgeht ? #Help
Func nach der func ausführen problem
08/15/2011 - AutoIt - 6 Replies
Hi, ich hab hier mal nen code schnipel der nicht funktioniert.. Die error Erkennung... if StringInStr($oWebTcp.body, "Du kannst nicht weitermachen...") Then GUICtrlSetData($list1, "Login failed. Please fix"&" = "&$array&" ANR: ")
[Fragen zu] Gui Hide & Show / Admin Rights / Func in Func
12/12/2010 - AutoIt - 29 Replies
Hi Leute, wie ihr oben ja bereits lesen könnt habe ich ein paar Fragen. 1. Könnte mir jmd. eine Hotkeyset-Func schreiben, womit ich mit nur einer (!) Taste die GUI verstecken und wieder anzeigen lassen kann ? 2. Gibt es etwas, dass dem gescripteten Tool von selbst Adminrechte verschafft? Ich rede NICHT von RequireAdmin, da muss man ja Administrator des PCs sein. €: Kann "#requireadmin" rausgezögert werden ?! Ich möchte, dass das passiert, aber erst, wenn ich einen Knopf gedrückt...
Func in IE.au3
10/15/2009 - AutoIt - 26 Replies
Hallo, mal eine Frage zur IE.au3 Ich möchte im gleichen Fenster eine andere Adresse aufrufen, kann ich das hiermit machen ? IENavigate(ByRef $o_object, $s_Url, $f_wait = 1) dann hab ich da mal 2 weitere fragen zu. Was genau kommt bei $o_object rein und was ist mit dem ByRef ? Vielen Dank falls mir geholfen werden kann.
Need help Func
04/11/2009 - GW Bots - 12 Replies
Hi all, I have a little issue with the bot I'm doin using the tt6 move to engine. I'm trying the make it scan in front of my charc on the minimap to check if enemies are present. So here's the func: ;scan if enemy is in front of us Func ScanEnemy1() PixelSearch(86, 460, 173, 516, $MonsterColor_Red, 10) If @error then Sleep( 100 ) PixelSearch(86, 460, 173, 516, $MonsterColor_Red, 10) if @error then return False EndIf



All times are GMT +2. The time now is 01:02.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.