Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14
  1. #11
    Anfänger Avatar von Cardano
    Registriert seit
    06.07.2010
    Beiträge
    17

    Standard

    Was hat das denn damit zutun ? Du scheinst nicht ganz aufmerksam gelesen zu haben. Es geht gerade um das Problem der Relocs
    Eigentlich verwende ich RC4 und im Mom. zum Testen XORing
    In C++ auf Seiten den Crypters siehts so aus:

    Code:
        BYTE *Addr = pefile->getPointerToDataByRO(pefile->getSectionHeaderById(pefile->getSectionIdByName(".text"))->PointerToRawData);
        for(DWORD i = 0; i < pefile->getSectionHeaderById(pefile->getSectionIdByName(".text"))->Misc.VirtualSize; i++)
            Addr[i] ^= 0x3F;
    Und in der ASM Stub siehts so aus
    Code:
        pushad
        pushf
        mov        esi, 11111111h
        mov        ecx, 22222222h
        @@:
            xor        byte ptr [esi + ecx - 1], 33h
        loop @b
        popf
        popad
        push FFFFFFFFh 
        ret
    Was als OpCodepattern wie folgt aussieht:
    Code:
        BYTE xorcode[] =  { '\x60', '\x66', '\x9C', '\xBE', '\x11', '\x11', '\x11', '\x11', 
                            '\xB9', '\x22', '\x22', '\x22', '\x22', '\x80', '\x74', '\x31', 
                            '\xFF', '\x33', '\xE2', '\xF9', '\x66', '\x9D', '\x61', '\x68', 
                            '\xFF', '\xFF', '\xFF', '\xFF', '\xC3'};
    Wobei 11111111h, 22222222h, 33h, FFFFFFFFh Platzhalter für Werte die durch mein C++ Programm gefüllt werden mit den Addressen der .text Section, der Addresse des OEP's, dem XOR Key usw.

    Das entxoren, bzw entRC4en funktioniert 1a, nur werden alle verschlüsselten und zum Relocieren vorgemerkten Addresse wie in meinem vorherigen Post beschrieben, durch den Windows Loader 'kaputtgerechnet'. Danke also schonmal für eine Antwort auf meinen vorherigen Post


  2. #12
    Der Jesus der Informatik
    Registriert seit
    01.12.2007
    Beiträge
    216

    Standard

    So würde an 1000h ein verxor'xter Pointer stehen, welcher sagen wir den Wert 30000h hat, also in reverse Byteorder: 00 00 03 00. Nach dem xor'xen hat er bei einem Key von 3F den Wert: 3F 3F 3C 3F. Wenn die Imagebase sich um 40h unterscheidet, dann sieht der Relocierte Pointer wie folgt aus:
    3F3C3EFF = FF 3E 3C 3F. Wenn dann meine XOR Routine dadrüber wandert siehts so aus:
    C0 01 03 00 = 000301C0, also liegt die Addresse nun um 180h = 384 Bytes daneben.
    Das verstehe ich jetzt nicht so ganz.
    Aber ich denke du meinst das, was ich in meinem vorherigen Post schon gesagt habe.
    Ich würde das nun vorerst so lösen, dass ich den reloc Eintrag aus dem DataDirectory entferne und die Position+Size davon der Stub übergebe.
    Dann werden die Relocs vom Loader ja schonmal garnicht mehr angewandt.
    Deine Stub muss dann eben durch den reloc-Table per Schleife durchgehen und auf alle dort eingetragenen RVAs die Imagebase addieren.
    Die Imagebase musst du dann natürlich nicht aus dem PE Header auslesen, sondern aus dem PEB:
    Code:
        mov esi,dword ptr fs:[030h]                    ;Get IMGBASE
        mov esi,dword ptr[esi+8]
    Ein Problem wird sein, dass du für jede Section, in der Relos vorhanden sind, Schreibrechte brauchst.
    Im Fall von "hallowelt.exe" gibt es ja auch Relocs außerhalb der .text Section. Das heißt auch in der Section müsstest du die Characteristics auf writable setzen.

    Wenn der Crypter wirklich eine positive Auswirkung auf die Detectionrate haben soll, würde ich versuchen auf Schreibrechte in den Sectioncharacteristics komplett zu verzichten.
    Das kannst du z.B. per Export Walk umgehen, indem du die API VirtualProtect lädest und dann eben über diese API Schreibrechte zur Laufzeit anforderst.

    Ich hoffe das hat dir ein bisschen geholfen.

    MfG
    DizzY_D






  3. #13
    Anfänger Avatar von Cardano
    Registriert seit
    06.07.2010
    Beiträge
    17

    Standard

    Danke schon einmal wieder für die Antwort.

    Aber anstatt, dass ich die ganze RelocTable, bis auf die Einträge meiner neuen Section, entferne, könnte ich doch besser so machen, dass meine Relocs den einzigen RelocEntry bilden und die anderen dahinter kopiert werden. Dann nurnoch DataDirectory[IBR].Size anpassen und schon lädt der Loader nurnoch meine Relocs. Ich versuchs mal das gerade beschriebene darzustellen:

    RelocTable:

    -------------
    | rva:1000h |
    | bytes: xy |
    -------------
    -------------
    | rva:2000h |
    | bytes: xy |
    -------------
    ....
    ....
    ....
    -------------
    | rva:6000h |
    | bytes: xy |
    -------------

    Sagen wir meine Relocs sind in dem RelocTable Entry, welcher alles von rva 6000h bis 6fffh relociert. Dann könnte ich doch am besten folgendes machen:

    -------------
    | rva:6000h |
    | bytes: xy |
    -------------
    -------------
    | rva:1000h |
    | bytes: xy |
    -------------
    -------------
    | rva:2000h |
    | bytes: xy |
    -------------
    ....
    ....
    ....

    Somit wäre mein Entry in der RelocTable nun an erster Stelle. Was jetzt noch zutun wäre, ist dass man im DataDirectory Eintrag im NTHeader die Größe der RelocTable auf die Größe meines RelocTable Entrys ändert.
    Dann würde der Loader ja sowieso nur die Relocs für meine Section ablaufen, aber nicht die für die anderen. Dann kann ich in meiner Stub einfach selber die anderen RelocTable Entrys ablaufen, denn durch diese Verschiebung weiß ich dass die echten Relocs sich an der Stelle:
    Code:
    ImageBase + DataDict[IBR].VirtualAddress + DataDict[IBR].Size
    befinden.

    Zu deinen Vorschlägen:
    Könntest du mir sagen was du mit PEB meinst ?

    BTW: Da wir langsam diesen Thread echt zuspammen würde ich vorschlagen, dass wir das auch über ICQ besprechen könnten oder per PN. Ich schick dir gleich mal eine PN mit meiner ICQ#.

    Vielen Dank für eure vielen nützlichen Antworten =)


  4. #14
    Chloë Grace Moretz Avatar von ocz
    Registriert seit
    29.05.2010
    Beiträge
    384

    Standard

    lol, fuck this.
    Geändert von ocz (06.11.2011 um 01:01 Uhr) Grund: fuck this

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. [H]Problem bei crypter
    Von YoDa iS NicE im Forum Trashbox
    Antworten: 3
    Letzter Beitrag: 05.03.2010, 17:20
  2. Crypter Problem
    Von pcl44 im Forum .NET Sprachen - Techniken
    Antworten: 2
    Letzter Beitrag: 08.07.2009, 19:34
  3. VB6 Problem : Crypter
    Von tobias1111 im Forum VisualBasic
    Antworten: 11
    Letzter Beitrag: 04.07.2009, 14:05

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •