Register for your free account! | Forgot your password?

Go Back   elitepvpers › Coders Den › General Coding
You last visited: Today at 03:22

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

Advertisement



generelle frage zur dll injection

Discussion on generelle frage zur dll injection within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
reijin's Avatar
 
elite*gold: 20
Join Date: Feb 2006
Posts: 3,174
Received Thanks: 1,153
generelle frage zur dll injection

sooo mein zweiter Thread ;D
Diesmal würd ich gern wissen ob es möglich ist direkt auf den speicher des Prozesses zuzugreifen in den eine dll injected wurde und möglicherweise sogar dessen Funktionen auszuführen?
ist doch so oder?

gruß, reijin
reijin is offline  
Old   #2
 
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
Für den Speicher zugriff brauchst du keine dll injection, dazu gibts die windows api, allerdings kannst du mit dll injection Prozessinterne Funktionen callen, wie des im detail geht weiss ich aber nicht, bei tsearch ist aber glaub ein tut dabei, wie man Funktionen in einem fremd programm über code injection nutzten kann, da war sowas mit nem beispiel prog, bei dem man dann ein zusätliches Fenster oder nen Button erstellt hat, also ist es möglich zb in WoW ein Menu deines Hacks einzubauen und auch WoWApi funktionen zu nutzen.
Bot_interesierter is offline  
Thanks
1 User
Old   #3
 
mr.rattlz's Avatar
 
elite*gold: 0
Join Date: Aug 2005
Posts: 896
Received Thanks: 334
Quote:
Originally Posted by Bot_interesierter View Post
Für den Speicher zugriff brauchst du keine dll injection, dazu gibts die windows api
Mit der dll kannst du allerdings direkt auf den Speicher zugreifen wie das Programm selber, also ohne irgendwelche api aufrufe
ala "mov eax,[dword ptr blabla]" usw...


edit: Wenn das jetzt beispielsweise in integer-wert an der Stelle ist könnte man in C dann auch einfach das als Pointer dereferenzieren und hätte nen tollen Integer
mr.rattlz is offline  
Thanks
1 User
Old   #4
 
rEdoX's Avatar
 
elite*gold: 20
Join Date: Jan 2006
Posts: 539
Received Thanks: 228
Quote:
Originally Posted by mr.rattlz View Post
...
ala "mov eax,[dword ptr blabla]" usw...
...
wenn schon:

"mov eax,dword ptr [blabla]"



Aber zur eigentlich fragen: Du brauchst dafuer nicht umbedingt eine dll injecten, ein gezielter aufruf von CreateRemoteThread fuehrt auch zum ziel.
rEdoX is offline  
Thanks
1 User
Old   #5
 
reijin's Avatar
 
elite*gold: 20
Join Date: Feb 2006
Posts: 3,174
Received Thanks: 1,153
@bot:
das ist mir schon klar ich will halt direkt auf den speicher der anwednung zugreifen - ist auf dem weg einfacher - find ich^^

muss ich sonst noch was beachten?
wenn ich jetzt tatsächlich ne dll injecte, und ich dann einfach schreibe:
CreateMonster(parameter) (angenommen das ist ne funktion ingame)
kann ich die dann einfach in meinem code schreiben, als sei sie da vorhanden oder muss ich da asm schreiben? oder in der selben sprache wie die anwendung.

//edit//
ich probiers einfach mal ;D

//edit2//
toll ich bekomme mit meinem PBcompiler nen error... versuch ichs mal mit C
linker error... verdammt.. der meckert immer, dass die funktion nicht vorhanden ist... dabei wird sie vorhanden sein... was muss ich da machen?
reijin is offline  
Old   #6
 
rEdoX's Avatar
 
elite*gold: 20
Join Date: Jan 2006
Posts: 539
Received Thanks: 228
Du musst die functionsaddresse callen:

Code:
__asm{
   //Aufrufkonvention beachten

   push Param1
   push Param2
   call 0x40F654

}
Namen sind im compilat schall und rauch (ausgenommen dll-exports usw)
rEdoX is offline  
Old   #7
 
reijin's Avatar
 
elite*gold: 20
Join Date: Feb 2006
Posts: 3,174
Received Thanks: 1,153
also muss ich von jeder funktion die ich calle den ort kennen und über ams ausführen?
reijin is offline  
Old   #8
 
rEdoX's Avatar
 
elite*gold: 20
Join Date: Jan 2006
Posts: 539
Received Thanks: 228
kenne mich mit c nicht ganz so gut aus, aber denke man kann auch eine funktion eine addresse zuweisen:

int asdf() = 0x545458;
asdf();

aber im prinzip hast du recht, man muss wissen wo die funktion im speicher "liegt"
rEdoX is offline  
Old   #9
 
reijin's Avatar
 
elite*gold: 20
Join Date: Feb 2006
Posts: 3,174
Received Thanks: 1,153
Quote:
Originally Posted by rEdoX View Post
kenne mich mit c nicht ganz so gut aus, aber denke man kann auch eine funktion eine addresse zuweisen:

int asdf() = 0x545458;
asdf();

aber im prinzip hast du recht, man muss wissen wo die funktion im speicher "liegt"
im speicher oder im programm? also im debugger werden ja die offsets(?) angezeigt ist das der ort?

//edit//
sry ich nerve

//edit2//
ich schau mir mal an wie man in asm nen string als parameter übergibt
reijin is offline  
Old   #10
 
rEdoX's Avatar
 
elite*gold: 20
Join Date: Jan 2006
Posts: 539
Received Thanks: 228
Ja, im speicher also Baseaddress + FileOffset = Offset(RVA).

fuer 0-terminierende strings pusht du einfach den pointer auf dem ersten char.
rEdoX is offline  
Old   #11
 
elite*gold: 0
Join Date: Mar 2006
Posts: 145
Received Thanks: 14
Quote:
Originally Posted by rEdoX View Post
kenne mich mit c nicht ganz so gut aus, aber denke man kann auch eine funktion eine addresse zuweisen:

int asdf() = 0x545458;
asdf();

aber im prinzip hast du recht, man muss wissen wo die funktion im speicher "liegt"
das muss bissl anders aussehn


siehe Function pointer (Quelle: Wikipedia)
Code:
#include <stdio.h>
 
 static int my_function(int a)
 {
     printf("my_function: %dn", a);
     return (2*a + 3);
 }
 
 int main(void)
 {
     int (*new_function)(int) = my_function;
     int  x;
 
     x = (*new_function)(10);
     printf("main: %dn", x);
     return 0;
 }
du müsstest halt hier "int (*new_function)(int) = my_function;" anstelle von my_function die adresse schreiben

Gruß^^
Dodge is offline  
Thanks
2 Users
Old   #12
 
reijin's Avatar
 
elite*gold: 20
Join Date: Feb 2006
Posts: 3,174
Received Thanks: 1,153
Quote:
Originally Posted by Dodge View Post
das muss bissl anders aussehn


siehe Function pointer (Quelle: Wikipedia)
Code:
#include <stdio.h>
 
 static int my_function(int a)
 {
     printf("my_function: %dn", a);
     return (2*a + 3);
 }
 
 int main(void)
 {
     int (*new_function)(int) = my_function;
     int  x;
 
     x = (*new_function)(10);
     printf("main: %dn", x);
     return 0;
 }
du müsstest halt hier "int (*new_function)(int) = my_function;" anstelle von my_function die adresse schreiben

Gruß^^
ansonsten ließe sich das 1:1 übernehmen?! O.o
muss ich beim erstellen irgendwas beachten, wenn ich ne dll haben will? ich hatte nun versucht das mit asm hinzu bekommen....
aber es klappt nicht

Code:
/* Replace "dll.h" with the name of your header */
#include "dll_test.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>


DLLIMPORT void HelloWorld ()
{    
                          char buchstabe = 'U';
                          __asm{    
                          mov eax, buchstabe
                          push eax
                          call 01002A55                
                          }
                          
    MessageBox (0, "Hello World from DLL!n", "Hi", MB_ICONINFORMATION);
}


BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{

    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
                                
        break;

      case DLL_PROCESS_DETACH:
        break;

      case DLL_THREAD_ATTACH:
        break;

      case DLL_THREAD_DETACH:
        break;
    }

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}
nicht wundern - ist nen preset von DEV-Cpp zur erstellung von dlls.
ich hatte vorher die asm funtion in der Dllmain funktion...
aber leider meckert der compiler^^
vermutlich hab ich einfach noch nicht genug ahnung...
ich sollte vllt wieder in meinem Buch lesen...
reijin is offline  
Old   #13
 
elite*gold: 0
Join Date: Dec 2004
Posts: 697
Received Thanks: 8
Quote:
Originally Posted by Reijin View Post
ansonsten ließe sich das 1:1 übernehmen?! O.o
muss ich beim erstellen irgendwas beachten, wenn ich ne dll haben will? ich hatte nun versucht das mit asm hinzu bekommen....
aber es klappt nicht

Code:
/* Replace "dll.h" with the name of your header */
#include "dll_test.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>


DLLIMPORT void HelloWorld ()
{    
                          char buchstabe = 'U';
                          __asm{    
                          mov eax, buchstabe
                          push eax
                          call 01002A55                
                          }
                          
    MessageBox (0, "Hello World from DLL!n", "Hi", MB_ICONINFORMATION);
}


BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{

    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
                                
        break;

      case DLL_PROCESS_DETACH:
        break;

      case DLL_THREAD_ATTACH:
        break;

      case DLL_THREAD_DETACH:
        break;
    }

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}
nicht wundern - ist nen preset von DEV-Cpp zur erstellung von dlls.
ich hatte vorher die asm funtion in der Dllmain funktion...
aber leider meckert der compiler^^
vermutlich hab ich einfach noch nicht genug ahnung...
ich sollte vllt wieder in meinem Buch lesen...
Ich bin jetzt zwar kein Profi was Intel-ASM angeht (programmiere eigentlich mehr auf Microcontrollern) aber kann der Intel nen call auf einen imediate Wert? Ausserdem wuesste ich nun nicht wo du deine eigene Funktion aufrufst, die wird zwar in den Speicher geladen aber ausgefuert duerfte die nicht werden.
Wenn du mal bissel was testen willst mit den DLL's kannste dir ja auch mal einen Proxy fuer bereits existierende DLL's schreiben und damit bissel rumprobieren. (Dafuer musste dem Hautpprogramm "nur" eine andere DLL anstelle dem Original unterjubel und dann die calls in die originale DLL tunneln.)
Noch was bezueglich der Adresse der aufzurufenden Funktion: Die WinApi stellt dir eine Funktion bereit mit der du dir Adressen von Prozeduren holen kannst (GetProcAddress().
termi is offline  
Old   #14
 
mr.rattlz's Avatar
 
elite*gold: 0
Join Date: Aug 2005
Posts: 896
Received Thanks: 334
Quote:
Originally Posted by termi View Post
Ich bin jetzt zwar kein Profi was Intel-ASM angeht (programmiere eigentlich mehr auf Microcontrollern) aber kann der Intel nen call auf einen imediate Wert?
Aber sicher doch, die meisten calls sind sogar immediate. Meines Wissens gibts dazu noch indirekt über ein Register und indirekt über den Speicher. Mein schlaues Buch dazu ist leider in meiner Wohnung :<
mr.rattlz is offline  
Old   #15
 
elite*gold: 0
Join Date: Dec 2004
Posts: 697
Received Thanks: 8
Quote:
Originally Posted by mr.rattlz View Post
Aber sicher doch, die meisten calls sind sogar immediate. Meines Wissens gibts dazu noch indirekt über ein Register und indirekt über den Speicher. Mein schlaues Buch dazu ist leider in meiner Wohnung :<
Über Speicher und Register kenn ich aber das mit dem imidiate haette ich nun nicht gedacht - naja wieder was gelernt
termi is offline  
Reply


Similar Threads Similar Threads
Frage zu c++ (dll injection)
09/20/2010 - C/C++ - 16 Replies
Hallo, ich habe es bereits geschafft eine selbstgeschriebene .dll zu injecten. Nun habe ich allerings das Problem, dass sich der erzeugt Thread nach dem automatischen Aufruf der Funktion"int __stdcall DllMain(_In_ void * _HDllHandle, _In_ unsigned _Reason, _In_opt_ void * _Reserved)"wieder schließt. Ich möchte den Thread gerne so umprogrammieren, dass er jede Sekunde einmal ein paar Adressen aus dem injizierten Prozess ausliest (wie macht man das eigentlich? Mit Read & WriteProcessmemory?)...
Generelle Infos
03/20/2010 - CrossFire - 65 Replies
Heyho! Ich sauge mir grade Crossfire. Mein Vorhaben ist ein kleiner Hack.. dazu hätte ich aber gern ein paar Informationen von euch. -Welches Anticheatsystem? -Was wird gebannt? -Unter welchen Umständen wird gebannt? -Wird Injektion blockiert? -Werden injezierte Module ejected? -Muss gebypassed werden?
Generelle Fragen
07/17/2009 - Diablo 2 - 7 Replies
Hi, da ich seit geraumer zeit nicht mehr gespielt habe und grade erst wieder reinkomme wollte ich nochmal um einige antworten bitte =) also welches programm benutzen für colored game names welchen maphack benutzen welchen Op channel bot benutzen? welche op befehle gibt es noch ausser /kick und /ban/unban wann endet diese ladder saison? lg
Generelle Frage
01/29/2006 - General Gaming Discussion - 2 Replies
wie findet man das Gültigkeitsdatum von kreditkartennummern raus, wenn man nur die kreditkarten nummer hat. Ich weiß kein warez forum, aber weiß das einer wie man das raufinden kann oder geht das garnicht?



All times are GMT +2. The time now is 03:24.


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

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