Frage zum Inline-ASM



  • Hihow!
    Also ich habe ein Programm, in welches ich meine DLL injizieren möchte. In diesem Programm ist an einer bestimmten Adresse ein "JNE SHORT ..." wenn man es sich im disassembler anschaut.
    Meine DLL soll eine funktion enthalten die, wenn man sie aufruft, besagten "JNE SHORT ..." in einen "JMP SHORT ..." ändern.

    Das Problem ist nun, wie fange ich da am besten an? Geht das überhaupt? Wenn ja, kann man das dann auch wieder rückgängig machen mit einer zweiten funktion?

    Ich ändere es nicht im disassembler und speichere es, weil dann ein sicherheitsmodul merkt dass die datei nicht die originale ist.
    Das ganze ist von einem Kollegen der sein sicherheitsmodul testen will, und ich versuche selbiges zu umgehen ^^

    Danke für jede Antwort im voraus.
    greetz
    Polko



  • Hört sich gefährlich nach nem Crack an... 😮



  • Polko schrieb:

    Geht das überhaupt?

    jup 🙂

    Polko schrieb:

    Wenn ja, kann man das dann auch wieder rückgängig machen mit einer zweiten funktion?

    jup 🙂

    wenn du die position kennst, wunderbar.
    wenn nicht, musst du den teil, wo das drinsteht, disassemblieren
    (gibt es fertgie libs für) und dann danach suchen.

    als nächstes musst du die stelle write-able machen.
    da du von DLLs sprichst, nehme ich an, du nutzt windows.

    mit der VirtualProtect-funktion kannst du genau das machen (PAGE_READWRITE).
    danach wieder den alten schutz rein.



  • ja das mit dem virtual protect hab ich auch schon gefunden .. nun stellt sich mir nurnoch die frage was ich in den asm-block schreiben muss um aus dem JNE ein JMP zu machen .. das oder soetwas in der art find ich leider nich 😣



  • also die adresse wo es steht weiss ich, das VirtualProtect hab ich nun auch schon mit eingebaut, aber nun macht das ja die stelle nur beschreibbar.. und wie schreib ich da nun rein? also ich weiss dass ich __asm__() benutzen muss aber was muss da rein O.o
    könnte mir da jmd ein beispiel geben? jetz vllt nich unbedingt etwas was genau das macht was ich will aber damit ich die ungefähre struktur verstehe was ich da wie reinschreiben kann .. dass da nun asm befehle rein kommen is mir klar



  • Du brauchst kein Inline-ASM.

    Such dir die Addresse des Bytes heraus (Disassembler), schreibe ein anderes Byte per WriteProcessMemory an die Stelle. Fertig.

    Wenn du die Representation deines Jumps als Byte wissen möchtest, such auf der Intel-Webseite nach einer OP-Code Tabelle.



  • int main()
    {
        __asm
        {
    lbl:
            test eax, eax
    jumpaddr:
            jne lbl
        }
        char *ptr = reinterpret_cast<char *>(jumpaddr);
        char jne_opcode = *ptr;
    }
    

    das __asm schlüsselwort ist mscv spezifisch, wie das mit __asm__() geht,
    weiß ich nicht.



  • okay erstmal danke an euch die versuchen mir zu helfen .. der kommentar von icematix interessiert mich nun schon, weil das wäre ja doch ziemlich einfach

    eine frage fürs verständnis.. also die adresse die ich ändern will sieht im disassembler so aus:

    //Edit: CPU Disasm removed

    Wenn ich mir nun die Funktionsdefinierung für WriteProcessMemory aus MSDN anschaue, schreibe ich damit bytes an die adresse die ich in der funktion angegeben habe. Nun habe ich ja zwei Bytes an der adresse "75" und "10" reicht es nun, wenn ich mit WriteProcessMemory "EB" schreiben lasse, oder muss ich "EB 10" schreiben lassen? (EB entspricht JMP, 75 entspricht JNE)



  • hmm .. also ich hab gestern nichmehr viel gemacht war einfach zu müde,
    dafür hab ich jetzt grade nochmal alles genau angeschaut und einen code
    geschrieben bekommen der, zumindest für den compiler, keine fehler mehr enthält..
    aber funktionieren tut es nicht 😕 kann mir evtl jmd sagen wieso?
    ist am code was falsch? an meiner denkweise? oder ist das modul von meinem kollegen einfach schlauer ^^

    //Edit: Code removed



  • weiss etwa keiner mehr zu helfen?



  • Polko schrieb:

    weiss etwa keiner mehr zu helfen?

    Polko schrieb:

    FlorensiaEN
    

    wer florensia spielt und versucht zu hacken, dem ist nicht mehr zu helfen
    🙂


Anmelden zum Antworten