Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 14:34

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

Advertisement



[c++] Dll Fehler

Discussion on [c++] Dll Fehler within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 9
Join Date: Dec 2009
Posts: 1,071
Received Thanks: 819
[c++] Dll Fehler

Ich habe zum testen eine dll für das Windows Spiel Solitair erstellt. Leider meldet der Injector immer, dass ein Fehler aufgetreten ist:

PHP Code:
#include <windows.h>
#include <iostream>

#define PROCESS "Solitaire.exe"
#define BASE_OFFSET 0x00098290
#define OFFSET_1 0x74
#define OFFSET_2 0x50
#define OFFSET_3 0x74
#define OFFSET_4 0x90

using namespace std;

DWORD WINAPI writeMemory(LPVOID lpParam)
{
    
UINTAdress reinterpret_cast<UINT*>(GetModuleHandle(PROCESS) + BASE_OFFSET);
    
Adress reinterpret_cast<UINT*>(*Adress OFFSET_1);
    
Adress reinterpret_cast<UINT*>(*Adress OFFSET_2);
    
Adress reinterpret_cast<UINT*>(*Adress OFFSET_3);
    
Adress reinterpret_cast<UINT*>(*Adress OFFSET_4);
    
    *
Adress 100;

    return 
0;
}

BOOL WINAPI DllMain (HINSTANCE hModuleDWORD dwAttachedLPVOID lpvReserved)
{
    if (
dwAttached == DLL_PROCESS_ATTACH)
    {
        
MessageBox(0"Die dll wurde erfolgreich injiziert""Erfolg"1);
        
CreateThread(NULL ,0, &writeMemoryNULL0NULL);
        
WaitForSingleObject(HANDLE(writeMemory), NULL); 
    }
    else if (
dwAttached == DLL_PROCESS_DETACH)
    {
        
MessageBox(0"Die dll wurde erfolgreich wieder freigegeben""Erfolg"1);
        return 
0;
    }

Ausgegeben wird sowohl, dass die dll injiziert wurde, als auch, dass sie wieder freigegeben wurde. Danach wirft der Injector einen Fehler und das Spiel stürzt (höchstwahrschenlich aufgrund eines Speicherfehlers) ab, obwohl der Pointer und die Offsets dazu mit ziemlicher Sicherheit richtig sind.
.Infinite is offline  
Old 09/18/2011, 12:45   #2
 
elite*gold: 0
Join Date: Jul 2010
Posts: 388
Received Thanks: 196
SmackJew is offline  
Thanks
1 User
Old 09/18/2011, 13:06   #3
 
elite*gold: 9
Join Date: Dec 2009
Posts: 1,071
Received Thanks: 819
Sofort testen

€: hmm, ich verstehe den letzten Paramter nicht ganz... Und wie mache ich das direkt für alle Adressen. Oder muss man jede Adresse einzeln deprotecten?
.Infinite is offline  
Old 09/18/2011, 19:44   #4
 
link's Avatar
 
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 454
WaitForSingleObject gibt 0 zurückgeben, was dann auch der Rückgabewert von DllMain wäre. Du musst bei DLL_PROCESS_ATTACH aber TRUE zurückgeben, da du sonst angibst, dass die Dll aufgrund eines Initialisierungsfehlers wieder entladen werden soll.
Bei DLL_PROCESS_DETACH ist der Rückgabewert egal, also kann das "return 0" da weg.
Btw. wieso blockierst du mit WaitForSingleObject überhaupt den Thread?

VirtualProtect benötigst du, falls du Memory Regionen beschreiben möchtest, die nicht auf writeable stehen, wie z.B. die Code-Sektion von Solitaire.exe im Speicher. Der letzte Parameter ist die Adresse eines DWORDs, welches die alten Attribute der Region erhält.
VirtualProtect sucht sich automatisch die Region, in der sich deine Adresse befindet.
Sauberer wäre es aber, wenn du vorher VirtualQuery aufrufst und dann BaseAddress und RegionSize übergibst.
Wenn alle Adressen, die du beschreiben möchtest, in der gleichen Region liegen, musst du VirtualProtect auch nur einmal aufrufen.
link is offline  
Thanks
1 User
Old 09/18/2011, 20:20   #5
 
elite*gold: 9
Join Date: Dec 2009
Posts: 1,071
Received Thanks: 819
Quote:
WaitForSingleObject gibt 0 zurückgeben, was dann auch der Rückgabewert von DllMain wäre. Du musst bei DLL_PROCESS_ATTACH aber TRUE zurückgeben, da du sonst angibst, dass die Dll aufgrund eines Initialisierungsfehlers wieder entladen werden soll.
Danke. Jetzt kommt schonmal kein Fehler mehr vom Injector.

Quote:
VirtualProtect benötigst du, falls du Memory Regionen beschreiben möchtest
zum lesen nicht?

Quote:
Der letzte Parameter ist die Adresse eines DWORDs, welches die alten Attribute der Region erhält.
also für mich vollkommen uninteressant... (?)

Quote:
Sauberer wäre es aber, wenn du vorher VirtualQuery aufrufst und dann BaseAddress und RegionSize übergibst.
Hab ich versucht. Muss ich an VirtualQuery denn das Handle des Prozesses oder nur die Adresse die ich beschreiben will übergeben? Jetzt sieht es so aus. Allerdings stürzt Solitaire weiterhin ab.

Vielen Dank schonmal für die Hilfe bis jetzt!
.Infinite is offline  
Old 09/18/2011, 20:38   #6
 
link's Avatar
 
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 454
Falls du in Regionen etwas auslesen möchtest, die nicht das readable-Flag besitzen, würdest du auch nichts lesen können.
Images sind aber standardmäßig readable und Alloziierungen im Heap müssen ja auch readable sein, damit das Spiel Variablen auslesen kann, etc.

"__out PDWORD lpflOldProtect"
Da steht nicht, dass es optional ist. Also auch wenn du nicht vorhast, den Wert wieder zurückzusetzen und die alten Attribute daher nicht benötigst, musst du dennoch eine gültige Adresse übergeben.

VirtualQuery failt bei dir, da der dritte Parameter gleich der Größe von lpBuffer sein muss, also sizeof(MEMORY_BASIC_INFORMATION) oder sizeof(info).
link is offline  
Thanks
1 User
Old 09/18/2011, 22:18   #7
 
elite*gold: 9
Join Date: Dec 2009
Posts: 1,071
Received Thanks: 819
Hmm... Geht immer noch nicht. Der Fehler befindet sich scheinbar in der Zeile:
Code:
Adress = reinterpret_cast<UINT*>(*Adress + OFFSET_2);
Und nochmal die Frage
Quote:
Muss ich an VirtualQuery denn das Handle des Prozesses oder nur die Adresse die ich beschreiben will übergeben?
In der MSDN steht da was von "pages". Ich habe leider keine Ahung, was damit gemeinst ist -.-
.Infinite is offline  
Old 09/19/2011, 09:41   #8
 
link's Avatar
 
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 454
Die restlichen Parameter sind richtig, du musst also eine Adresse übergeben.
VirtualProtect ruft VirtualProtectEx auf und übergibt zusätzlich als Prozesshandle -1, was für den eigenen Prozess steht.

Wenn du den Fehler in dieser Zeile lokalisiert hast, wird es wohl an der Dereferenzierung liegen, heißt dass Adress keine gültige Adresse ist..
Bist du denn sicher, dass die Adressen, etc. richtig sind?
Hast du es mal debuggt, um dir anzusehen, was bei den einzelnen Befehlen passiert?

Du könntest z.B. StrongOD laden, Solitaire mit OllyDbg starten, deine Dll via Rechtsklick->StrongOD->InjectDLL injizieren, über Rechtsklick->View oder Alt+E in das entsprechende Modul wechseln, einen Breakpoint auf den Thread setzen, F9 drücken und dann halt jeden Befehl durchgehen.
link is offline  
Old 09/19/2011, 17:32   #9
 
elite*gold: 9
Join Date: Dec 2009
Posts: 1,071
Received Thanks: 819
Quote:
Du könntest z.B. StrongOD laden, Solitaire mit OllyDbg starten, deine Dll via Rechtsklick->StrongOD->InjectDLL injizieren, über Rechtsklick->View oder Alt+E in das entsprechende Modul wechseln, einen Breakpoint auf den Thread setzen, F9 drücken und dann halt jeden Befehl durchgehen.
Werde ich wohl tun müssen... Vielen Dank bis jetzt!
.Infinite is offline  
Reply


Similar Threads Similar Threads
[Root]Setting.lua fehler aber Fehler nicht zu beheben??
08/09/2011 - Metin2 Private Server - 5 Replies
Richte für jemanden den root ein, aber bei dem fehler bin ich jetzt selber an meine grenzen gekommen. Folgender Fehler kommt beim starten: http://www.fotos-hochladen.net/uploads/unbenan11n tij3uvlnr5d.png Die syserr daneben gehört dazu, die Setting.lua habe ich schon durch getauscht, kommt aber immer noch der Fehler :confused: Datenbank auch schon getauscht, aber was ist dieses:
Infinite Aion: Fehler (1024) Fehler beim initialisieren des Spiels
06/09/2011 - Aion Private Server - 5 Replies
Hi Leute, ich hab ein Probem mit AION: jedesmal wenn ich starte, egal ob mit dem NCSoft Launcher oder mit dem Infinite Aion Launcher kommt die Meldung Fehler beim initialisieren des Spiels... Hab schon alle möglichen Sprachkombinationen durchprobiert, da es überall heißt man soll Region und Sprache beim NCSoft Launcher ändern und dann gehts... Alles probiert, und siehe da: geändert hat sich nichts... Immer noch der Fehler 1024... wäre nett, wenn mir da jemand helfen könnte und auch...
Fehler beim Skype deinstallieren [Fehler 1603]
06/08/2011 - Technical Support - 4 Replies
Überschrift sagt alles. Ich hoffe jmd kann mir helfen,ich kann auch einen Sceenshot machen.
Server fehler!! (core fehler) bitte hilfee!!
02/16/2011 - Metin2 Private Server - 6 Replies
Hallo liebes ePvP. Ich habe gerade versucht die neuen reittiere einzufügen und da reboote ich den server und bekomme einen core fehler :( hier der genaue fehler: mv: rename cores/core .2 to cores/core .1: No such file or directory mv: rename cores/core .3 to cores/core .2: No such file or directory mv: rename cores/core .4 to cores/core .3: No such file or directory mv: rename cores/core .5 to cores/core .3: No such file or directory mv: rename cores/core .6 to cores/core .5: No such file...
Fehler : java.net.socet.exception:connection reset fehler bitte um hilfe
12/21/2010 - Minecraft - 9 Replies
Hab denn java.net.socet.exception:connection reset fehler immer und immer wieder :( könnt ihr mir dabei vill helfen? :) LG DieVerrückteMango =)



All times are GMT +1. The time now is 14:34.


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.