資訊安全:執行檔的修改

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

筆者最近看了一些和資訊安全相關的書籍與資訊之後,興起「直接修改執行檔,看看會發生什麼事」的念頭。此文章的測試環境為 Virtualbox 虛擬機上的 Windows XP Pro版本,C++ IDE為Code::Blocks。編輯器(Editor)可以使用UltraEdit,或是可以修改Hex的 Hex Editor,筆者是用WinHex: http://www.winhex.com/winhex/hex-editor.html

入門範例一:修改Console的文字(Hello World)
使用C++ IDE 建立一個 C 專案,主程式的內容如下:
1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("Hello world!\n");
    system("pause");
    return 0;
}

將編譯好後的執行檔用 WinHex 開啟,會看到如下畫面:

找出 Hello World字串,並修改,類似下圖:

Hello World! 改成 Ifmmp!xpsme,並存檔為 HiHi.exe,Hi.exe 與 HiHi執行結果如下圖:

上圖左邊的 Console Windows 是 Hi.exe的執行結果。
上圖又邊的 Console Windows 是 HiHi.exe的執行結果。
可以看的出來,不用修改程式碼就可以將程式的輸出訊息給修改了。


入門範例二:修改有密碼保護的程式
使用C++ IDE 建立一個 C 專案,主程式的內容如下:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char password[9];
    char key[] = "12345678";

    printf("Password:");
    scanf("%s", password);
    if(strcmp(password, key) == 0)
    {
        printf("Welcome, user!!!\n");
    }
    else
    {
        printf("Wrong password and what do you want to do?\n");
    }

    system("pause");
    return 0;
}

將編譯好後的執行結果如下:
密碼輸入正確

密碼輸入錯誤

將此執行檔用 WinHex 開啟,會看到如下畫面:


找出 1234 與 5678字串,並修改:

並存檔為 Pwd.exe,執行行結果如下:
密碼輸入錯誤

密碼輸入正確


由以上兩個範例,我們可以得知,「藉由Hex Editor的補助,可以在不用修改程式碼就可以將程式的密碼給修改了。」

那讀者們是否有這個疑問:「要怎麼知道修改執行檔的那些地方?」

此篇文章要讓讀者了解到,執行檔是可以被修改的。至於要知道如何修改執行檔,筆者會在後續的文章慢慢說明,還請讀者們敬請期待囉。

沒有留言: