close

感想:這題只有韓國隊PLUSX有解出來,讓我有點意外,其實題目設計不是為了難倒人,都是Windows Driver的基礎概念而已,下面解密一下讓許多人苦惱2天的題目....@_@


題目:Kenny意外地從探險家手上獲得了一張海外的藏寶圖,但看起來似乎失去了下半部分,你能幫助他找到寶藏嗎??

連結:http://dl.dropbox.com/u/19611440/binary1.zip

開啟Keyexe.jpge後會在Temp資料夾產生3個檔案


1  

 

解法一:

 

這題主要考的是Window Kernel Ioctl的概念,先用工具加載SYS驅動檔案後

 

透過發送0x6666Ioctl後,用Debugview可以看到關鍵的檔案名稱,

2  

 

下圖 0是加載驅動後提示,1是發送錯誤的Ioctl2是發送正確的Ioctl

 

3  

若發送正確的Ioctl 會顯示Boracay.exe

關鍵在於,必須把原始的.exe 名稱改成Boracay.exe

 4

重新執行後Keyà “hey it nice“就會透過DebugVIew (呼應OutputdebugString)噴出來。 PS:一定要Boracay.exe ---->爆破無效…XD

 5  

 

附上Code:


#include "stdafx.h"
#include "windows.h"
#define Symblo_NAME L"\\\\.\\Kenny"
#ifndef CTL_CODE
    #include 
#endif
                                                                                                                       
#define Pass_CTL_CODE CTL_CODE(FILE_DEVICE_UNKNOWN,0x6666,METHOD_BUFFERED,FILE_ANY_ACCESS)  

int _tmain(int argc, _TCHAR* argv[])

{
           HANDLE hDevice = CreateFile(Symblo_NAME,GENERIC_READ | GENERIC_WRITE,0,   NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL );
           UCHAR InputBuffer[10];
           UCHAR OutputBuffer[10];
           DWORD dwOutput;
           DeviceIoControl(hDevice, Pass_CTL_CODE, InputBuffer, 10, &OutputBuffer, 10, &dwOutput, NULL);
           return 0;
}

解法二(暴力法)

 

即使完全不懂Driver,用IDA也可以解,拖SYS檔案進IDA,找到

6  

 

手動算一下Xor 0x66 ,共11Byte,也是可以算出Boracay.exe

 

最後也必須把原始的.exe 名稱改成Boracay.exe,重新執行後Key就會噴出來。

7  




 

arrow
arrow
    全站熱搜

    殘月影 發表在 痞客邦 留言(1) 人氣()