close
感想:這題只有韓國隊PLUSX有解出來,讓我有點意外,其實題目設計不是為了難倒人,都是Windows Driver的基礎概念而已,下面解密一下讓許多人苦惱2天的題目....@_@
題目:Kenny意外地從探險家手上獲得了一張海外的藏寶圖,但看起來似乎失去了下半部分,你能幫助他找到寶藏嗎??
連結:http://dl.dropbox.com/u/19611440/binary1.zip
開啟Keyexe.jpge後會在Temp資料夾產生3個檔案
解法一:
這題主要考的是Window Kernel Ioctl的概念,先用工具加載SYS驅動檔案後
透過發送0x6666的Ioctl後,用Debugview可以看到關鍵的檔案名稱,
下圖 0是加載驅動後提示,1是發送錯誤的Ioctl,2是發送正確的Ioctl
若發送正確的Ioctl 會顯示Boracay.exe ,
關鍵在於,必須把原始的.exe 名稱改成Boracay.exe,
重新執行後Keyà “hey it nice“就會透過DebugVIew (呼應OutputdebugString)噴出來。 PS:一定要Boracay.exe ---->爆破無效…XD
附上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,找到
手動算一下Xor 0x66 ,共11Byte,也是可以算出Boracay.exe的
最後也必須把原始的.exe 名稱改成Boracay.exe,重新執行後Key就會噴出來。
全站熱搜