我一直在解决一些破解程序,我下载的每个文件,在“说明”中都说:“显然不允许打补丁”。这意味着什么?以及如何修补文件?
在逆向工程中,“修补文件”是什么意思?
逆向工程
修补
补丁反转
快手
2021-07-08 11:57:18
2个回答
以下引用来自unix.stackexchange:
修补文件意味着修改它,其内涵是修改通常很小。
因此,修补可执行文件是一个更改其内容的过程,通常是为了更改其原始行为而执行的。
打补丁显然是不允许的,这意味着特定的crackme 的作者希望您在不修改其内容的情况下对其进行破解。例如,考虑一个简单的程序:
ask_user_for_password();
read_input();
if (isPasswordCorrect())
printf(“Congratulations, you have cracked it!\n”);
else
printf(“Wrong password! Try again!\n”);
当然,可以修补它,以便它始终打印“祝贺 [...]”消息,但是这个非常简单的破解程序的重点是实际以某种方式找到该密码(例如通过找到解密密钥)。
通常,要修补文件,您需要:
- 找到你要改变的地方/指令(也可能是
jnz
对jz
的@Axel穆尼奥斯说,但它可能是一个jmp
包含要被执行以及代码中的位置)。 - 找出代表您想要放置在那里的指令的机器代码是什么- 这可以通过首先编译用汇编编写的程序然后反汇编来完成。如果您正在研究 x86 架构,您也可以使用此站点。
- 在十六进制编辑器中打开二进制文件,找到要放置代码的偏移量,然后粘贴上一步中获得的机器代码。
术语“修补[二进制]”意味着修改指令集。例如,如果有条件跳转需要将一些内存设置为特定值,而不是修改内存,这可能是破解程序的目标,我可以简单地修补二进制文件以始终执行该跳转(通过更改从jnz
到jz
)跳转的条件。通过调试器打补丁很容易让我改变指令,保存新的二进制文件,然后运行它。
其它你可能感兴趣的问题