gpt4 book ai didi

c - 以十六进制覆盖 exe 的字节

转载 作者:太空宇宙 更新时间:2023-11-04 08:20:41 24 4
gpt4 key购买 nike

我想通过更改二进制文件来更改 exe 的逻辑。 exe 中的十六进制值之一是 75,我必须将其更改为 74(x86 程序集中的 JNE 到 JE)。我知道它是文件的第 1276 个字节,但我该怎么做呢?

这是我所拥有的:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
FILE *fileH = fopen ("foo", "r+");
fseek(fileH, 1276, SEEK_SET);
fwrite("74", 1, 1, fileH);
fclose(fileH);
return 0;
}

同样出于某种原因,我得到了未声明的“fileH”,即使我包含了 stdio 并且 FILE 全部大写。我找不到其他人遇到这个问题。在 ubuntu 上运行这个

最佳答案

您必须定义一个字节值才能写入文件。 JE 的 8086 操作码是十六进制的 74,而不是十进制。

#include <stdio.h>

int main(void)
{
unsigned char byt = 0x74;
FILE *fileH = fopen ("foo.txt", "r+");
if (fileH == NULL)
return 1;
if (fseek(fileH, 3, SEEK_SET))
return 1;
if (fwrite(&byt, 1, 1, fileH) != 1)
return 1;
if (fclose(fileH))
return 1;
printf("File updated\n");
return 0;
}

作为一个使用小文本文件的demo,之前的内容:

0123456789

及之后:

012t456789

我不知道你的编译器为什么拒绝 fileH 除了有时文本编辑器会在不应该出现的地方留下一个看不见的流氓字符。那里的解决方案是删除并重新输入有问题的行。

关于c - 以十六进制覆盖 exe 的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33551667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com