Reverse Engineering for Beginners

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...|

 

分類: