Da ich mich in letzter Zeit mit Detours beschäftige und in C++ anwende(was gar nicht mein fachgebiet ist). Wollte ich es mal in C# versuchen was ja genauso eigentlich gar nicht möglich ist. Habe dann ein wenig gegoogelt und bin auf Easyhook und Whitemagic gestoßen. Wollte mal Fragen ob jemand erfahrung in dem Bereich Detours mit C# hat und wie sehr begrenzt ich bin und ob es sich jetzt nur z.b. für das hooken der connect funktion lohnt.
Detours
-
- [C#]
- Samagon
-
-
-
also in c# solltest du zumindest was das detour thema nicht begrenzt sein.
du wirst lediglich ein paar dll's includen müssen um diverse funktionen zur verfügung zu haben.
-
also in c# solltest du zumindest was das detour thema nicht begrenzt sein.du wirst lediglich ein paar dll's includen müssen um diverse funktionen zur verfügung zu haben.
In c# fehlt dir der ganze Inline asm kram, von daher ist man doch schon eingegrenzt, was Destours betrifft... -
-
Es existiert eine selbstgemachte Funktion von gamedeception(Twice ?!?).
Code- LPVOID DetourCreate(LPVOID lpOldFunc, LPVOID lpNewFunc, int nSize)
- {
- // First, check the params.
- if(nSize < 5 || lpOldFunc == NULL || lpNewFunc == NULL)
- return NULL;
- // This is the codecave, which contains the saved opcodes and the jumpingback.
- LPBYTE lpOpcodes = new BYTE[nSize + 5];
- // The patch, which contains a jump to lpNewFunc and maybe some NOPs.
- LPBYTE lpPatch = new BYTE[nSize];
- // Calculate the distance of both functions, because the JMP-Command needs it.
- DWORD dwFuncDist = PtrToUlong(lpNewFunc) - PtrToUlong(lpOldFunc) - 5;
- // Calculate the distance between the Codecave and the To-Hook-Function.
- DWORD dwOpDist = PtrToUlong(lpOldFunc) - PtrToUlong(lpOpcodes) - 5;
- // Used by VirtualProtect.
- DWORD dwBack = 0;
- // Give access to write the patch.
- VirtualProtect(lpOldFunc, 5, PAGE_READWRITE, &dwBack);
- // Save the opcodes.
- memcpy(lpOpcodes, lpOldFunc, nSize);
- // Write JMP-Command for the jumpingback.
- lpOpcodes[nSize] = 0xE9;
- // Write the needed parameter (distance) for the jumpingback.
- memcpy(&lpOpcodes[nSize + 1], &dwOpDist, 4);
- // Write the JMP-Command for calling the new function in the patch.
- lpPatch[0] = 0xE9;
- // Write address of the new function in the patch.
- memcpy(&lpPatch[1], &dwFuncDist, 4);
- // Fill the remaining Opcodes with NOPs.
- for(int i = 5; i < nSize; i++)
- lpPatch[i] = 0x90;
- // Write the patch!
- memcpy(lpOldFunc, lpPatch, nSize);
- // Restore old protection.
- VirtualProtect(lpOldFunc, 5, dwBack, &dwBack);
- // Free non-needed space.
- delete[] lpPatch;
- // Return the CodeCave
- return lpOpcodes;
- }
Die dann so eingesetzt wird:So wie ich das sehe wird nicht im MainModul sprich z.b. Game.exe die funktion umschrieben, sondern in der ws2_32.dll. Durch VirtualProtect wird das schreiben möglich. Nun ist hier die Sache du kannst nicht direkt eine funktion schreiben und sie einfach für dich arbeiten lassen. Du musst deine funktion selber also schritt für schritt und byte für byte schreiben. Was viel umständlicher ist und man für sowas zu faul ist vorallem braucht man erfahrung in ASM und bei großen Codes ist das schon ne große sache
-
-
Du hast jetzt nur nen link hier reinkopiert der mir das gleiche sagt was ich dort reingeschrieben habe. Geht aber darum das in C# umzuwandeln
-
-
Achso verzeichung missverstanden.
ich wollte dir damit nur sagen das unser twice auch mal nen paar tolle funktionen gemacht hat
-
um "verzeichung" musst du nicht bitten Bin ja zumindest dankbar für die mühe