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