GetDriveTypeの一番簡単なタイプ
バイナリ
http://dl.dropbox.com/u/13673436/GetDriveType.exe
MD5:08B95EEFE31CB01B7E4418543BA4FA6F
ソースコード
#include <stdio.h> #include <windows.h> #include <tchar.h> #include <locale.h> int WINAPI WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) { setlocale( LC_ALL, "Japanese"); //ロケール(地域言語)を日本語でセット int onButton; //ドライブを調べる while(1) { UINT DriveType; DriveType = GetDriveType(_T("C:\\")); if(DriveType!=DRIVE_REMOVABLE) { onButton=MessageBox(NULL , TEXT("認証失敗") , TEXT("メッセージ") , MB_YESNO | MB_ICONINFORMATION); if(onButton==IDNO){ break; } }else { MessageBox(NULL , TEXT("認証成功") , TEXT("メッセージ") , MB_OK | MB_ICONINFORMATION); break; } } return 0; }
逆アセンブラ
GetDriveType.exeをOllyDbgで開く
Ctrl+NでGetdriveTypeWを見つける
インポート関数の一覧
一か所しか見つからないので,逆アセンブラ画面へ(Enter)を選択
すると以下のような画面になる.
0040100F |. 8B3D 00204000 MOV EDI,DWORD PTR DS:[<&KERNEL32.GetDriv>; kernel32.GetDriveTypeW 00401015 |. 83C4 08 ADD ESP,8 00401018 |. 68 10214000 PUSH GetDrive.00402110 ; /RootPathName = "C:\" 0040101D |. FFD7 CALL EDI ; \GetDriveTypeW 0040101F |. 8B35 B4204000 MOV ESI,DWORD PTR DS:[<&USER32.MessageBo>; USER32.MessageBoxW 00401025 |. 83F8 02 CMP EAX,2 00401028 |. 74 27 JE SHORT GetDrive.00401051 0040102A |. 8D9B 00000000 LEA EBX,DWORD PTR DS:[EBX] 00401030 |> 6A 44 /PUSH 44 //失敗した場合
DRIVE_REMOVABLE(2)かどうかと比較して等しい(CMP EAX,2 JE)なら00401051(認証成功)へ飛ぶ.等しくない場合には認証失敗を出す.無条件へ認証成功へ飛ぶようにしたいので以下のようにした.
00401025 |. 83F8 02 CMP EAX,2 00401028 EB 27 JMP SHORT GetDrive.00401051
これで常に認証成功になるので.これをファイルへ保存するには以下のようにする
実行ファイルへコピー→全ての変更箇所→全てコピー→ファイル保存→適当な場所へ名前を付けて保存する.
バイナリの比較にはQuick Beを使う
http://jp.downpanda.com/Download-quick-be-18689.html
*1297048896*== TARGET_FILE ================
FILENAME GetDriveType.exe
*1297048897* FileSize: 7680 bytes
*1297048898* LastMod.: 2011/02/07 11:49:21
*1297048899*===============================
00000428: 74 EB