[英]Overwriting bytes of an exe in hex
我想通過更改二進制文件來更改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;
}
作為使用小文本文件的演示,內容之前:
0123456789
之后:
012t456789
我不知道為什么您的編譯器會拒絕fileH
除了有時文本編輯器會在不應該存在的流氓字符fileH
留下一個流氓看不見的字符之外。 那里的解決方案是刪除並重新輸入有問題的行。
int main()
{
FILE *fileH = fopen ("foo", "r+");
fseek(fileH, 1276, SEEK_SET);
putc(0x74,fileH);
}
和xxd -p foo以十六進制轉儲文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.