ドライブチェック練習問題3
バイナリ
http://dl.dropbox.com/u/13673436/GetDriveTypeFuncC.exe
ソース
http://dl.dropbox.com/u/13673436/GetDriveTypeFuncC.cpp
この問題はGetDriveTypeB.exeのちょっと改良型
前回のように以下のCALLをNOPで潰しても認証成功にはならない.
004011D3 E8 F8FEFFFF CALL GetDrive.DriveCheck
なんでかというと認証が成功した場合にフラグを立てている.そして,Windowに文字列を描画する時にもう一度そのフラグが立っているかを判定し,立ってない場合には認証失敗の文字列を描画して,立っている場合には成功の文字列を出している.
実際にフラグを立てている以下の場所である.
004011BC |> C605 70334000 >MOV BYTE PTR DS:[FinalCheckFlag],1
MOVは移動命令.FinalCheckFlagのメモリ空間に1を代入している.実際のソースではFinalCheckFlag=true;
となっている.解析する側としてはこのフラグを立ててやればいいんだから.CALL命令を潰した場所にフラグを立てる処理に置き換えれば良い
004011D3 E8 F8FEFFFF CALL GetDrive.DriveCheck 004011D8 84C0 TEST AL,AL 004011DA 75 1D JNZ SHORT GetDrive.004011F9 ↓ 004011D3 C605 70334000 >MOV BYTE PTR DS:[FinalCheckFlag],1 004011DA EB 1D JMP SHORT GetDrive.004011F9
*== TARGET_FILE ================
FILENAME GetDriveTypeC.exe
* FileSize: 8704 bytes
* LastMod.: 2011/02/21 14:36:27
*===============================
000005D3: E8 C6
000005D4: F8 05
000005D5: FE 70
000005D6: FF 33
000005D7: FF 40
000005D8: 84 00
000005D9: C0 01
000005DA: 75 EB