筆者最近看了一些和資訊安全相關的書籍與資訊之後,興起「直接修改執行檔,看看會發生什麼事」的念頭。此文章的測試環境為 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的補助,可以在不用修改程式碼就可以將程式的密碼給修改了。」
那讀者們是否有這個疑問:「要怎麼知道修改執行檔的那些地方?」
此篇文章要讓讀者了解到,執行檔是可以被修改的。至於要知道如何修改執行檔,筆者會在後續的文章慢慢說明,還請讀者們敬請期待囉。
沒有留言:
張貼留言