Ich sag's mal so, jemand der weiß wie eine .dll funktioniert und weitere erweiterte Fähigkeiten im Bereich der Speichermanipulation hat und dir daher dabei helfen kann wird nicht mit der CheatEngine Skriptsprache vertraut sein. Ich versuche trotzdem 'mal ein paar grundlegende Sachen zu klären:
1. Der CreateThread Call sieht soweit in Ordnung aus, grundsätzlich ist zu sagen, dass auch wenn NULL als 0 defined ist 0 für DWORDS und NULL für Zeiger zu übergeben angebracht ist.
2. Warum du Initialize exportierst ist mir nicht klar. Das passiert im Groben wenn du die DLL injezierst:
Quote:
1. Das Injectorprogramm lädt die .dll in den Adressraum des Prozesses.
Wie nun gerade dieser Injector das tut kann ich dir nicht sagen, es gibt viele Möglichkeiten eine .dll in einen Prozess zu laden, die häufigste ist wohl einen minimalen Teil an Code von Hand in den Prozess zu schreiben der Funktionen zum Laden der .dll aus dem Prozess heraus aufruft, viele weitere werden in der Praxis angewandt. Zu deiner zweiten Frage also: Nein, der Injector schummelt deine .dll in den Prozess und damit auch den Code der in der .dll kompiliert ist.
Quote:
2. Nach dem Laden der DLL wird die DllMain Funktion aufgerufen, bei diesem Aufruf werden dann natürlich auch die Parameter gefüllt, für dich wichtig ist ul_reason_for_call, der bestimmt warum die DllMain aufgerufen wurde. Wurde die .dll von einem Prozess geladen ist dies DLL_PROCESS_ATTACH. Deine .dll erzeugt nun den Thread der wiederrum Initialize ausführt.
Initialize tut bei dir nichts als einige Berechnungen durchzuführen. Willst du deinen ASM Code ausführen musst du natürlich auch deine AsmOn Funktion aufrufen. Die dritte Frage verstehe ich nicht, entweder interpretiere ich die CheatEngine Skriptsprache falsch (sehr gut möglich, ich habe sie noch nie gesehen) oder meine inline ASM Abstinenz macht sich langsam bemerkt. Der "jmp dword ptr basep2" sieht soweit in Ordnung aus, bis auf fehlende []. Funktioniert etwas konkret nicht? Im Zweifelsfall die .dll disassemblen oder live debuggen und einfach mal über den JMP steppen und schauen wo du landest.
Vielen Dank, für deine Bemühungen! - Frage 1 und 2 sind damit beantwortet.
Ich versuche mein eigentliches Problem / Frage 3 noch mal zu konkretisieren:
Original steht bei "abc.exe"+2CD2B6 der Asm-Code: movss [esi+08],xmm0.
Ich will jetzt mit der dll meinen Asm-Code (AsmOn), in den Adressraum des Prozesses "injecten" und leihenhaft gesagt, auf "abc.exe"+2CD2B6 einen Jmp-Befehl auf meinen Asm-Code schreiben.
Dann sollte sozusagen statt "movss [esi+08],xmm0" meine Funktion "AsmOn" ausgeführt werden.
"baseentry" sollte die Adresse "abc.exe"+0x2CD2B6 sein.
Wie kann ich in "baseentry" einen Jump auf AsmOn() schreiben?
der sichert sogar den code, überschreibt die unnötigen bytes mit nops etc., sollte kein großes problem sein, das abzuspecken, wobei dus natürlich auch so lassen kannst.
falls du den code nicht verstehst, ist hier nen tut in dem der aufbau von nem detour relativ detailliert erklärt ist:
Wieso sind die Adressen falsch?
Zuerst dachte ich im GetModuleHandle(NULL) liegt der Fehler. Aber dann würde ja der Detour auch nicht funktionieren. Der jmp wird aber richtig gesetzt....
Bitte nochmals um Hilfe
die adressen sind deine basep1 und basep2?
die sind ja an bestimmten adressen im speicher und die löst er dann mit dword ptr[adresse] auf und springt dahin?
d.h. z.b. in dem fall
Code:
jmp dword ptr [5AEC334C]
steht an der adresse 5AEC334C dein basep1, also in c praktisch &basep1.
durchs dword ptr [] wirds aufgelöst und es wird zum inhalt von basep1 gesprungen, der "base + ncp2;" sein sollte.
der sichert sogar den code, überschreibt die unnötigen bytes mit nops etc., sollte kein großes problem sein, das abzuspecken, wobei dus natürlich auch so lassen kannst.
falls du den code nicht verstehst, ist hier nen tut in dem der aufbau von nem detour relativ detailliert erklärt ist:
Dann lieber MS Detours als diese schreckliche Funktion, die schon seit Ewigkeiten im Netz kursiert.
Quote:
Code:
DetourFunc((PBYTE) baseentry, (PBYTE) AsmOn);
Das dürfte so gar nicht funktionieren, du hast den 3. Parameter vergessen.
Dann lieber MS Detours als diese schreckliche Funktion, die schon seit Ewigkeiten im Netz kursiert.
was ist an dieser funktion auszusetzen, wenn man was gegen ms-detours hat?
und warum die ganze ms-detours lib, wenn man eigtl nur einen jmp reinschreiben will?
Quote:
Das dürfte so gar nicht funktionieren, du hast den 3. Parameter vergessen.
nehme mal an, er wird meinen oben erwähnten tipp beherzigt haben und hat die funktion auf seine bedürfnisse abgespeckt.
Quote:
Ersetz das dword ptr mal mit eckigen Klammern. Das ist nämlich die eigentliche Schreibweise und Funktion.
Eckige Klammern bedeuten einen Speicherzugriff, damit holt man also Werte aus Variablen bzw. Werte, die an den angegebenen Adressen stehen.
das dürfte keinen unterschied machen, die eckigen klammern sind optional.
was ist an dieser funktion auszusetzen, wenn man was gegen ms-detours hat?
Folgendes:
Nehmen wir mal an die ersten fünf Bytes der Funktion sind eine jump Anweisung (z.B. weil die Funktion bereits gehooked wurde):
Code:
jmp 0A00h
Die oben genannte Funktion kopiert den Teil 1 zu 1 in einen anderen Bereich des Speichers ändert jedoch nicht die Adresse des jumps (diese sind relativ zu ihrer Adresse im Speicher).
Stand der Code vorher an der Position 0xA000 so müsste das Programm an die Stelle 0xAA00 springen. Nach dem Kopieren befindet sich diese Anweisung jedoch z.B. an 0xB000, woraufhin nach 0xBA00 gesprungen wird. Im besten Fall steht da ein INT 3 und du merkst, dass das schief gelaufen ist, doch im schlimmsten Fall läuft das einfach weiter ohne dass du etwas merkst. Das zu debuggen ist kein Spaß, verlass' dich drauf!
MS Detours berechnet die Adresse neu und erspart dir somit Zeit und Nerven! Die von dir gepostete Funktion ist eine Zeitbombe.
Das zu debuggen ist kein Spaß, verlass' dich drauf!
Das zu debuggen ist ein Kinderspiel... wenn du merkst, dass dein Hook einen Crash verursacht, entfernst du erst einmal jeglichen Code aus deinem Hook, um zu schauen, ob wenigstens das Skeleton funktioniert.
Wird es nicht, also attachst du den Debugger und verfolgst den JMP zu deinem Code und dann einen CALL/JMP zum überschriebenen Code, der dann in's Nirvana springt. Wer hier nicht mehr weiter weiß, sollte vermutlich auch nicht mit MS Detours herumhantieren.
Außerdem hookt der TE keine Funktion, sondern speziellen Code in einer Funktion, heißt er weiß schon, welchen Code er überschreibt.
In MASM schon. Es ist allerdings schlechter MASM-Stil und außerdem habe ich den Code um ein mov eax,[eax] erweitert, was wohl der Fehler sein wird, da im originalen Code 011E5E88 ein Pointer auf einen Pointer ist und er in seinem Code nicht den Wert des Pointers als zweiten Pointer nimmt, sondern den Pointer selber.
Sie ist unkomfortabel, sie ist nicht threadsafe, sie beachtet die erwähnten Jumps nicht, ...
Quote:
wenn man was gegen ms-detours hat?
Das ist, als würdest du sagen "ich schreib meine eigen string Klasse, ist viel viel besser als std::string ".
Ich weiß, du als C Coder musst immer von allem dem Hintergrund kennen und kannst nicht wie dier verwöhnten C++ Coder einfach mal was hinnehmen (zum Lernen des Prinzips von Detours ist die Funktion btw. ja ok, aber nicht zur Benutzung), aber MS hat es weit besser gemacht, als es bei dieser Funktion der Fall ist.
Und auch vermutlich weit besser, als die meisten anderen Versuche von Detours Libs, darunter auch deine.
Was gibt es an MS Detours auszusetzen?
Quote:
und warum die ganze ms-detours lib, wenn man eigtl nur einen jmp reinschreiben will?
Warum nicht? Die Hilfsfunktionen kann man immer mal brauchen.
Code/Dll Injection Tutorial 12/13/2014 - Tutorials - 28 Replies Einleitung
Hallo Elite PvPer! http://www.animiertegifs.de/smilies/eckige-Smileys /eckige-smileys-animiert-02.gif
Auf folgende Fragen wirst du in diesem Tutorial Antworten finden:
Was ist eine "Code/Dll injection" und was bringt mir das - kann man das essen? http://www.greensmilies.com/smile/smiley_emoticons _freddus_msn_fressen.gif
Was sind Dll-Dateien (dynamische/statische Bibliotheken) - kann man die ebenfalls essen? http://www.greensmilies.com/smile/smiley_emoticons _essen.gif
Wie...
Code Injection 05/05/2011 - Perfect World - 20 Replies Hey epvp,
I have been messing around for quite a while now, and I came to the point where I have no idea what i'm doing wrong the OPCODE looks fine (imho). Yet it still crashes the client.
Any help would be very appreciated, code is posted below. I hope you're not just going to give a working code but also information on why the current OPCODE is wrong.
Thanks in advance.
#RequireAdmin
#include 'NomadMemory.au3'
Can anyone help me with generic code injection? 06/16/2009 - General Coding - 1 Replies Sorry for English, I see this part of e*PvP is mainly in German, but my German sucks badly (although I spent 5 years trying to learn it with little success).
My question is not related that much to game hacking/coding and such, but code injection in general.
Here is the background - we have a core system client, which is basically a big GUI framework over plain telnet screens. Client also has a built-in OLE and DDE servers, which we are using to extract data from system in most simple...
code injection hacks 12/07/2008 - Metin2 - 2 Replies hey,
hatte kein bock sufu zu benutzen, also frag ich ma:D
gibt es schon hacks, die über eine original metin2.dll laufen?
Code injection 12/28/2005 - General Coding - 2 Replies Just to gathering a 'feeling' of bestpractise/standards from the elite .. ... is madcodehook de facto standard if you wanna thread inject ? or what other alternatives exists ? Thanks !