如何解压 kkrunchy 可执行文件?

逆向工程 工具 开箱 解压 包装工
2021-06-26 19:30:16

我想弄清楚如何解压 kkruncy 可执行文件,这里的源代码这里的二进制文件,有人知道怎么做吗?

我的主要想法是测试一些用 kkrunchy 压缩的小 hello world exes,但由于某种原因,exes 会崩溃。IE:

#define UNICODE

#include <windows.h>

void start()
{
    MessageBox(NULL, L"X", L"Y", MB_OK);
}

或者:

global start
; kernel32.lib Exports
extern _ExitProcess@4
extern _GetStdHandle@4
extern _WriteFile@20

section .text

start:
    ; DWORD  bytes;
    mov     ebp, esp
    sub     esp, 4

    ; hStdOut = GetstdHandle( STD_OUTPUT_HANDLE)
    push    -11
    call    _GetStdHandle@4
    mov     ebx, eax

    ; WriteFile( hstdOut, message, length(message), &bytes, 0);
    push    0
    lea     eax, [ebp-4]
    push    eax
    push    (message_end - message)
    push    message
    push    ebx
    call    _WriteFile@20

    ; ExitProcess(0)
    push    0
    call    _ExitProcess@4

    ; never here
    hlt
message:
    db      'Hello', 10, 13, 0
message_end:

我使用了默认参数,但可执行文件已损坏。无论如何,我怎么知道如何解压 kkrunchy 可执行文件?

1个回答

对于我的解包会话,我使用的是x64dbg,我将在kkrunchy_023a2.zip 中解压可执行文件

到达入口点并启用跟踪记录。还绑定Trace into beyond trace record选项说Ctrl+/

跟踪记录入口点

接下来,按G(查看图表),您应该会看到标记为红色的返回块。

图返回

在它们两个上放置一个断点,运行,步进,你会注意到一个带有可疑大图的函数......

大图

现在继续并使用该Trace into beyond trace record功能继续单步执行,同时跳过已经跟踪过的指令。你会很快注意到这个算法耗尽了(默认)50000步数,点击一下就会告诉你循环条件在哪里。

循环条件

在该目标上放置一个硬件断点,运行,您应该会看到原始入口点。

操作

接下来打开 Scylla Ctrl+I,点击IAT AutosearchOKGet ImportsDumpFix Dump然后你就有了一个解压的可执行文件。我会让你来妥善清理那个垃圾场的垃圾......