Themabewertung:
  • 1 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Reverse Engineering der NLT II
Ich fange in der DosBox die Call-Befehle ab, schaue, ob ich eine C-Funktion dazu habe, und rufe dann diese stattdessen auf. Ich vermute, dass das recht ähnlich läuft wie bei BrightEyes. Mit dem Protected Mode hatte ich bisher keine großen Schwierigkeiten, man muss nur aufpassen, da je nach Modus die Operanden- und Adressweiten verschieden sind. Lustigerweise mache ich genau das, was Spice macht, nur bisher nur im Protected-Mode und mit einer C-Ausgabe. Ich jage den Dosbox-Disassembler über den Startpunkt einer Funktion, dieser zerstückelt mir den Byte-Code in die einzelnen Befehle, und diese schiebe ich durch ein Python-Skript, das mir äquivalenten DosBox-C-Code ausgibt.
Ich habe, glaube ich, etwa 99,9% des verwendeten Befehlssatzes implementiert, und damit > 90% des gesamten Riva-Bytecode.

Raus kommt dann so etwas wie das:
(Habe den Ausschnitt nur schnell kopiert, um den aktuellen Stand darzustellen. Die Funktion an sich ist vielleicht nicht so interessant, und generierter Code ist nie schön, aber vielleicht ein Startpunkt ;))

Code:
void f_1DB2B0()
{
    CPU_Push32(reg_ebx);
    CPU_Push32(reg_ecx);
    CPU_Push32(reg_esi);
    CPU_Push32(reg_edi);
    CPU_Push32(reg_ebp);
    reg_ecx = reg_eax;                            // 32,32,mov ecx,eax
    reg_esi = reg_edx;                            // 32,32,mov esi,edx
    reg_edx = mem_readd_inline(reg_eax + 0x003D); // 32,32,mov edx,[eax+003D]
    test_32(reg_edx, reg_edx);
    if (FLG_NE) {
        goto l1DB2C8;
    }
    reg_ebx = mem_readd_inline(reg_eax + 0x0031); // 32,32,mov ebx,[eax+0031]
    reg_edi = mem_readd_inline(reg_eax + 0x0039); // 32,32,mov edi,[eax+0039]
    goto l1DB2CD;
l1DB2C8:
    reg_edi = reg_edx;                            // 32,32,mov edi,edx
    reg_ebx = mem_readd_inline(reg_eax + 0x0035); // 32,32,mov ebx,[eax+0035]
l1DB2CD:
    reg_eax = mem_readd_inline(reg_ecx + 0x0004); // 32,32,mov eax,[ecx+0004]
    mem_writed_inline(reg_ecx + 0x0029, reg_esi); // 32,32,mov [ecx+0029],esi
    reg_ebp = mem_readd_inline(reg_eax);          // 32,32,mov ebp,[eax]
    test_xor_32(reg_edx, reg_edx);
    reg_edx = reg_edx ^ reg_edx;
    decide_call(mem_readd_inline(reg_ebp + 0x0044), std::nullopt); // call near dword [ebp+0044]
                                                                   // ABS
    reg_eax = mem_readd_inline(reg_ecx + 0x0004);                  // 32,32,mov eax,[ecx+0004]
    reg_ebp = mem_readd_inline(reg_eax);                           // 32,32,mov ebp,[eax]
    test_xor_32(reg_edx, reg_edx);
    reg_edx = reg_edx ^ reg_edx;
    decide_call(mem_readd_inline(reg_ebp + 0x0010), std::nullopt); // call near dword [ebp+0010]
                                                                   // ABS
    reg_eax = mem_readd_inline(reg_ecx + 0x0004);                  // 32,32,mov eax,[ecx+0004]
    reg_ebp = mem_readd_inline(reg_eax);                           // 32,32,mov ebp,[eax]
    reg_edx = reg_edi;                                             // 32,32,mov edx,edi
    decide_call(mem_readd_inline(reg_ebp + 0x0024), std::nullopt); // call near dword [ebp+0024]
                                                                   // ABS
    reg_eax = mem_readd_inline(reg_ecx + 0x0004);                  // 32,32,mov eax,[ecx+0004]
    test_xor_32(reg_ebx, reg_ebx);
    reg_ebx = reg_ebx ^ reg_ebx;
    test_xor_32(reg_edx, reg_edx);
    reg_edx = reg_edx ^ reg_edx;
    reg_edi = mem_readd_inline(reg_eax);                           // 32,32,mov edi,[eax]
    reg_bx  = mem_readw_inline(reg_esi + 0x0012);                  // 16,32,mov bx,[esi+0012]
    reg_dx  = mem_readw_inline(reg_esi + 0x0014);                  // 16,32,mov dx,[esi+0014]
    decide_call(mem_readd_inline(reg_edi + 0x0058), std::nullopt); // call near dword [edi+0058]
                                                                   // ABS
    reg_eax = mem_readd_inline(reg_ecx + 0x0004);                  // 32,32,mov eax,[ecx+0004]
    reg_edx = mem_readd_inline(reg_eax);                           // 32,32,mov edx,[eax]
    decide_call(mem_readd_inline(reg_edx + 0x0028), std::nullopt); // call near dword [edx+0028]
                                                                   // ABS
    reg_ebx = mem_readd_inline(reg_ecx + 0x003D);                  // 32,32,mov ebx,[ecx+003D]
    test_32(reg_ebx, reg_ebx);
    if (FLG_E) {
        goto l1DB31F;
    }
    reg_eax = reg_ebx; // 32,32,mov eax,ebx
    CPU_Push32(-1);
    f_1CA710();
    CPU_Pop32();                                     // CALL // call 001CA710 ($-10c08) REL
    mem_writed_inline(reg_ecx + 0x003D, 0x00000000); // 32,32,mov dword [ecx+003D],00000000
l1DB31F:
    reg_eax = mem_readd_inline(reg_ecx + 0x0039); // 32,32,mov eax,[ecx+0039]
    CPU_Push32(-1);
    f_1CA710();
    CPU_Pop32();                                     // CALL // call 001CA710 ($-10c17) REL
    mem_writed_inline(reg_ecx + 0x0039, 0x00000000); // 32,32,mov dword [ecx+0039],00000000
    mem_writed_inline(reg_ecx + 0x0035, 0x00000000); // 32,32,mov dword [ecx+0035],00000000
    reg_eax = mem_readd_inline(reg_ecx + 0x0035);    // 32,32,mov eax,[ecx+0035]
    mem_writed_inline(reg_ecx + 0x0031, reg_eax);    // 32,32,mov [ecx+0031],eax
    reg_ebp = CPU_Pop32();
    reg_edi = CPU_Pop32();
    reg_esi = CPU_Pop32();
    reg_ecx = CPU_Pop32();
    reg_ebx = CPU_Pop32();
    return; // ret
}

Als nächstes wollte ich per Graphenanalyse die `goto`s durch `if`s, `while`s und `switch`-Statements ersetzen und mit ähnlicher Analyse eventuell die globalen Register durch lokale Variablen. Das war bisher nur eine Spielerei, und ich weiß gar nicht, was das Ziel ist. Die Performance im DosBox dynamic-cpu Mode (JIT-Übersetzung von DOS-ASM in x64) ist fantastisch, und der Source-Code von Riva scheint ja noch in den Händen von Attic zu sein und nicht verloren, wie bei der Schicksalsklinge. Für stellenweise Analysen, unter anderem, da ich so Breakpoints von Visual Studio aus setzen und interessante Stellen kommentieren kann, ist es aber praktisch.
Zitieren


Nachrichten in diesem Thema
Reverse Engineering der NLT II - von Crystal - 28.06.2017, 15:52
RE: Reverse Engineering der NLT II - von Shihan - 28.06.2017, 18:33
RE: Reverse Engineering der NLT II - von aeyol - 29.06.2017, 10:01
RE: Reverse Engineering der NLT II - von Shihan - 19.07.2017, 11:51
RE: Reverse Engineering der NLT II - von Shihan - 20.07.2017, 09:50
RE: Reverse Engineering der NLT II - von Wetzer - 02.08.2017, 21:25
RE: Reverse Engineering der NLT II - von Mirko - 02.10.2017, 17:38
RE: Reverse Engineering der NLT II - von Shihan - 03.10.2017, 10:57
RE: Reverse Engineering der NLT II - von Mirko - 03.10.2017, 13:58
RE: Reverse Engineering der NLT II - von Mirko - 04.10.2017, 18:04
RE: Reverse Engineering der NLT II - von Mirko - 07.10.2017, 23:01
RE: Reverse Engineering der NLT II - von Mirko - 08.10.2017, 10:39
RE: Reverse Engineering der NLT II - von Mirko - 10.10.2017, 08:22
RE: Reverse Engineering der NLT II - von gaor - 10.10.2017, 08:55
RE: Reverse Engineering der NLT II - von Shihan - 10.10.2017, 10:17
RE: Reverse Engineering der NLT II - von Mirko - 10.10.2017, 18:46
RE: Reverse Engineering der NLT II - von Mirko - 14.10.2017, 15:43
RE: Reverse Engineering der NLT II - von gaor - 14.10.2017, 17:37
RE: Reverse Engineering der NLT II - von Mirko - 14.10.2017, 18:01
RE: Reverse Engineering der NLT II - von gaor - 14.10.2017, 18:28
RE: Reverse Engineering der NLT II - von Mirko - 14.10.2017, 19:13
RE: Reverse Engineering der NLT II - von Mirko - 15.10.2017, 21:09
RE: Reverse Engineering der NLT II - von Mirko - 27.10.2017, 22:03
RE: Reverse Engineering der NLT II - von Shihan - 28.10.2017, 12:31
RE: Reverse Engineering der NLT II - von Mirko - 28.10.2017, 17:32
RE: Reverse Engineering der NLT II - von Mirko - 02.11.2017, 20:08
RE: Reverse Engineering der NLT II - von Mirko - 02.11.2017, 23:57
RE: Reverse Engineering der NLT II - von Wetzer - 20.12.2017, 02:33
RE: Reverse Engineering der NLT II - von Shihan - 20.12.2017, 10:42
RE: Reverse Engineering der NLT II - von Shihan - 20.12.2017, 12:05
RE: Reverse Engineering der NLT II - von gaor - 22.03.2018, 15:07
RE: Reverse Engineering der NLT II - von gaor - 22.03.2018, 19:55
RE: Reverse Engineering der NLT II - von gaor - 23.03.2018, 00:02
RE: Reverse Engineering der NLT II - von gaor - 23.03.2018, 23:38
RE: Reverse Engineering der NLT II - von gaor - 24.03.2018, 09:33
RE: Reverse Engineering der NLT II - von Hindro - 24.03.2018, 16:55
RE: Reverse Engineering der NLT II - von gaor - 24.03.2018, 17:42
RE: Reverse Engineering der NLT II - von gaor - 24.03.2018, 19:37
RE: Reverse Engineering der NLT II - von Hindro - 24.03.2018, 23:34
RE: Reverse Engineering der NLT II - von Shihan - 26.03.2018, 10:13
RE: Reverse Engineering der NLT II - von gaor - 26.03.2018, 12:33
RE: Reverse Engineering der NLT II - von Shihan - 26.03.2018, 12:47
RE: Reverse Engineering der NLT II - von gaor - 26.03.2018, 18:36
RE: Reverse Engineering der NLT II - von Hindro - 26.03.2018, 20:51
RE: Reverse Engineering der NLT II - von gaor - 26.03.2018, 22:48
RE: Reverse Engineering der NLT II - von Hindro - 27.03.2018, 10:13
RE: Reverse Engineering der NLT II - von Shihan - 27.03.2018, 11:08
RE: Reverse Engineering der NLT II - von Shihan - 27.03.2018, 13:28
RE: Reverse Engineering der NLT II - von Hindro - 27.03.2018, 15:33
RE: Reverse Engineering der NLT II - von Shihan - 27.03.2018, 17:38
RE: Reverse Engineering der NLT II - von Mirko - 27.03.2018, 20:20
RE: Reverse Engineering der NLT II - von Hindro - 31.03.2018, 12:18
RE: Reverse Engineering der NLT II - von aeyol - 31.03.2018, 12:26
RE: Reverse Engineering der NLT II - von Shihan - 31.03.2018, 13:34
RE: Reverse Engineering der NLT II - von Hindro - 31.03.2018, 15:19
RE: Reverse Engineering der NLT II - von Shihan - 01.04.2018, 16:51
RE: Reverse Engineering der NLT II - von gaor - 31.03.2018, 16:42
RE: Reverse Engineering der NLT II - von Hindro - 31.03.2018, 17:00
RE: Reverse Engineering der NLT II - von Hindro - 31.03.2018, 20:24
RE: Reverse Engineering der NLT II - von Hindro - 31.03.2018, 20:33
RE: Reverse Engineering der NLT II - von Hindro - 01.04.2018, 12:44
RE: Reverse Engineering der NLT II - von Hindro - 01.04.2018, 21:45
RE: Reverse Engineering der NLT II - von Shihan - 02.04.2018, 18:48
RE: Reverse Engineering der NLT II - von Shihan - 18.04.2018, 14:49
RE: Reverse Engineering der NLT II - von gaor - 18.04.2018, 15:28
RE: Reverse Engineering der NLT II - von Shihan - 18.04.2018, 16:59
RE: Reverse Engineering der NLT II - von aeyol - 18.04.2018, 19:18
RE: Reverse Engineering der NLT II - von Mirko - 18.04.2018, 19:37
RE: Reverse Engineering der NLT II - von Shihan - 19.04.2018, 09:35
RE: Reverse Engineering der NLT II - von Shihan - 20.04.2018, 10:08
RE: Reverse Engineering der NLT II - von Tobi - 21.04.2018, 10:59
RE: Reverse Engineering der NLT II - von Shihan - 22.04.2018, 11:33
RE: Reverse Engineering der NLT II - von gaor - 23.04.2018, 14:25
RE: Reverse Engineering der NLT II - von Shihan - 23.04.2018, 15:49
RE: Reverse Engineering der NLT II - von gaor - 25.04.2018, 21:44
RE: Reverse Engineering der NLT II - von Shihan - 26.04.2018, 13:18
RE: Reverse Engineering der NLT II - von Shihan - 25.04.2018, 14:59
RE: Reverse Engineering der NLT II - von gaor - 26.04.2018, 08:09
RE: Reverse Engineering der NLT II - von Shihan - 26.04.2018, 14:41
RE: Reverse Engineering der NLT II - von gaor - 26.04.2018, 17:42
RE: Reverse Engineering der NLT II - von Shihan - 26.04.2018, 18:37
RE: Reverse Engineering der NLT II - von Shihan - 27.04.2018, 10:51
RE: Reverse Engineering der NLT II - von gaor - 27.04.2018, 11:11
RE: Reverse Engineering der NLT II - von Shihan - 27.04.2018, 11:26
RE: Reverse Engineering der NLT II - von gaor - 27.04.2018, 12:48
RE: Reverse Engineering der NLT II - von aeyol - 30.04.2018, 11:45
RE: Reverse Engineering der NLT II - von Shihan - 06.07.2018, 09:08
RE: Reverse Engineering der NLT II - von gaor - 12.07.2019, 09:49
RE: Reverse Engineering der NLT II - von gaor - 12.07.2019, 15:48
RE: Reverse Engineering der NLT II - von Shihan - 24.07.2019, 09:22
RE: Reverse Engineering der NLT II - von aeyol - 16.03.2020, 13:12
RE: Reverse Engineering der NLT II - von Shihan - 17.03.2020, 09:07
RE: Reverse Engineering der NLT II - von Shihan - 17.03.2020, 16:33
RE: Reverse Engineering der NLT II - von gaor - 17.01.2021, 16:08
RE: Reverse Engineering der NLT II - von gaor - 17.01.2021, 16:44
RE: Reverse Engineering der NLT II - von gaor - 22.01.2021, 12:58
RE: Reverse Engineering der NLT II - von gaor - 23.01.2021, 13:54
RE: Reverse Engineering der NLT II - von gaor - 24.01.2021, 18:13
RE: Reverse Engineering der NLT II - von gaor - 24.01.2021, 20:44
RE: Reverse Engineering der NLT II - von aeyol - 26.01.2021, 22:41
RE: Reverse Engineering der NLT II - von aeyol - 27.01.2021, 12:40
RE: Reverse Engineering der NLT II - von aeyol - 27.01.2021, 14:43
RE: Reverse Engineering der NLT II - von aeyol - 27.01.2021, 18:00
RE: Reverse Engineering der NLT II - von aeyol - 27.01.2021, 20:22
RE: Reverse Engineering der NLT II - von gaor - 08.02.2021, 21:25
RE: Reverse Engineering der NLT II - von gaor - 09.02.2021, 20:22
RE: Reverse Engineering der NLT II - von gaor - 12.02.2021, 10:10
RE: Reverse Engineering der NLT II - von gaor - 12.02.2021, 10:54
RE: Reverse Engineering der NLT II - von gaor - 14.02.2021, 14:45
RE: Reverse Engineering der NLT II - von gaor - 15.02.2021, 21:08
RE: Reverse Engineering der NLT II - von gaor - 20.02.2021, 11:01
RE: Reverse Engineering der NLT II - von gaor - 20.02.2021, 14:40
RE: Reverse Engineering der NLT II - von gaor - 20.02.2021, 22:37
RE: Reverse Engineering der NLT II - von gaor - 17.04.2021, 12:07
RE: Reverse Engineering der NLT II - von gaor - 17.04.2021, 17:10
RE: Reverse Engineering der NLT II - von gaor - 17.04.2021, 22:28
RE: Reverse Engineering der NLT II - von gaor - 18.04.2021, 07:47
RE: Reverse Engineering der NLT II - von NRS - 26.04.2021, 08:52
RE: Reverse Engineering der NLT II - von NRS - 26.04.2021, 18:38
RE: Reverse Engineering der NLT II - von NRS - 26.04.2021, 20:54
RE: Reverse Engineering der NLT II - von NRS - 27.04.2021, 10:10
RE: Reverse Engineering der NLT II - von NRS - 27.04.2021, 13:21
RE: Reverse Engineering der NLT II - von aeyol - 01.03.2023, 19:03
RE: Reverse Engineering der NLT II - von Shihan - 02.03.2023, 13:07
RE: Reverse Engineering der NLT II - von Shihan - 05.03.2023, 12:18
RE: Reverse Engineering der NLT II - von Shihan - 07.03.2023, 20:38
RE: Reverse Engineering der NLT II - von Shihan - 18.03.2023, 12:30
RE: Reverse Engineering der NLT II - von Shihan - 25.03.2023, 12:43
RE: Reverse Engineering der NLT II - von Shihan - 25.03.2023, 16:11
RE: Reverse Engineering der NLT II - von Shihan - 25.03.2023, 16:36
RE: Reverse Engineering der NLT II - von Shihan - 30.03.2023, 14:03
RE: Reverse Engineering der NLT II - von Luigi - 11.04.2023, 23:40
RE: Reverse Engineering der NLT II - von aeyol - 01.11.2023, 20:57
RE: Reverse Engineering der NLT II - von aeyol - 01.11.2023, 22:44
RE: Reverse Engineering der NLT II - von aeyol - 02.11.2023, 15:23
RE: Reverse Engineering der NLT II - von aeyol - 03.11.2023, 10:50
RE: Reverse Engineering der NLT II - von aeyol - 03.11.2023, 11:17
RE: Reverse Engineering der NLT II - von Shihan - 28.07.2024, 10:58
RE: Reverse Engineering der NLT II - von Shihan - 28.07.2024, 13:59
RE: Reverse Engineering der NLT II - von cmfrydos - 28.07.2024, 15:15
RE: Reverse Engineering der NLT II - von Shihan - 28.07.2024, 19:45
RE: Reverse Engineering der NLT II - von Shihan - 29.07.2024, 10:01
RE: Reverse Engineering der NLT II - von Shihan - 05.08.2024, 09:51



Benutzer, die gerade dieses Thema anschauen: 30 Gast/Gäste