在exe的入口点附近添加nop

时间:2016-02-24 12:24:36

标签: c windows winapi portable-executable

我尝试开发一个不依赖于在pe文件中添加更多部分的打包器。在以下两种情况下,如何为入口点周围的解密器存根插入空间:

  1. 在编译时,意味着我有一个源代码,我想告诉编译器(在我的情况下:gcc -minGW64)在maincrtstartup /入口点附近插入一些nop指令?

  2. 使用二进制文件,这可能要困难得多。 据我所知,我需要将二进制文件拆分为2个(在入口点),在它们之间添加nop,再次合并它们并修复所有函数地址和pe头中的值。是否有可以将nop插入二进制文件的库(Python,C ++)?

  3. 编辑:进一步指定第二种情况:

    假设您有一个pe格式的二进制文件,并且您希望将一些nop操作码插入到文件的.text段中。

    假设文件的程序集如下所示:

    push ebp 
    add eax, 5
    inc ecx
    pop ebp 
    

    我想在add eax,5和inc ecx之间插入一些nop。

3 个答案:

答案 0 :(得分:0)

你需要某种热点吗?问题有点宽泛,但您可能需要查看https://blogs.msdn.microsoft.com/oldnewthing/20110921-00/?p=9583

我认为它需要使用MS VC

答案 1 :(得分:0)

对于#1,我认为这不能在C编译器中完成。你可以使用内在函数。但我不确定你可以在全局范围内使用C内在函数来做一个包装器。我想有可能创建一些静态空间并在运行时执行它来编写nops并复制函数。尽管如此,我认为最简单的方法是编译函数,将指令从反汇编复制粘贴到.asm文件并添加你想要的那些nops,然后再用nasm或你决定使用的汇编器进行编译并链接obj。

我认为#2没有任何公共图书馆。

答案 2 :(得分:0)

制作一个c ++可执行文件,该文件将启动“破裂”的.exe进程,然后立即将其暂停,在CheatEngine中找到的某个内存地址处对函数进行点按(我认为nop的十六进制代码为x90,因此请更改op您在用作弊引擎找到的内存地址中找到的代码),然后恢复.exe,然后运行该文件。然后,现在这是您破裂的启动器。

或者找到一种使用未破解的exe重新编译c ++ .exe的方法。