Reverse Engineering for Beginners
由 darkranger 在 週六, 05/17/2014 - 19:09 發表,更新日期:週曰, 05/18/2014 - 01:45
Reverse Engineering for Beginners(逆向工程初學指南)是一本線上電子書,作者為 Dennis Yurichev。以份量來說,這本書的內容相當豐富,不過由於組合語言對 DR 而言實在是可怕的東西,所以 DR 只有快速的瀏覽了一下,然後挑了一個簡單的習題(1.4)試做看看。
習題 1.4 的要求是從執行檔中找出密碼,DR 下載了 Linux 版本的範例執行檔(password1),執行時會顯示「enter password:」,任意輸入字串後則顯示「password is not correct」。接著 DR 使用 hexdump 工具去尋找裡頭的可列印字串:
- hexdump -C password1 | more
00000620 65 6e 74 65 72 20 70 61 73 73 77 6f 72 64 3a 00 |enter password:.| 00000630 25 73 00 6e 6f 20 70 61 73 73 77 6f 72 64 20 73 |%s.no password s| 00000640 75 70 70 6c 69 65 64 00 6d 65 74 61 6c 6c 69 63 |upplied.metallic| 00000650 61 00 70 61 73 73 77 6f 72 64 20 69 73 20 63 6f |a.password is co| 00000660 72 72 65 63 74 00 70 61 73 73 77 6f 72 64 20 69 |rrect.password i| 00000670 73 20 6e 6f 74 20 63 6f 72 72 65 63 74 00 00 00 |s not correct...|
在這些字串中,可以猜想「metallica」就是所謂的密碼字串。再執行一次並輸入該字串就會顯示為「password is correct」。
此外其實同樣的查詢動作也可以用 strings 工具來達成:
- strings password1
/lib/ld-linux.so.2 libc.so.6 _IO_stdin_used __isoc99_scanf puts __stack_chk_fail strcmp __libc_start_main __gmon_start__ GLIBC_2.7 GLIBC_2.4 GLIBC_2.0 PTRh [^_] enter password: no password supplied metallica password is correct password is not correct ;*2$"
至於更改密碼的作法,先將執行檔複製一個複本,然後用 Vim 編輯:
- cp password1 passoword2
- vim -b password2
Vim 進入 16 進位編輯模式:
- :%! xxd
可以看到「metallica」的十六進位值是「6d65 7461 6c6c 6963 61」,如果要將密碼改為「test」則替換十六進位值為「7465 7374 0000 0000 00」。編輯完成後返回一般模式並儲存離開:
- :%! xxd -r
- :wq
如此一來 password2 的密碼便更改為「test」。
00000620 65 6e 74 65 72 20 70 61 73 73 77 6f 72 64 3a 00 |enter password:.| 00000630 25 73 00 6e 6f 20 70 61 73 73 77 6f 72 64 20 73 |%s.no password s| 00000640 75 70 70 6c 69 65 64 00 74 65 73 74 00 00 00 00 |upplied.test....| 00000650 00 00 70 61 73 73 77 6f 72 64 20 69 73 20 63 6f |..password is co| 00000660 72 72 65 63 74 00 70 61 73 73 77 6f 72 64 20 69 |rrect.password i| 00000670 73 20 6e 6f 74 20 63 6f 72 72 65 63 74 00 00 00 |s not correct...|