簡體   English   中英

以十六進制覆蓋exe的字節

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM