洞窟物語の改造 - 多重起動防止の解除 -
昨日のエントリに引き続き洞窟物語の改造をしてみる。
今日は多重起動防止の解除だ。オンラインゲームではないのであまり意味はないが気にしない。
多重起動防止の方法にはいくつかあってここが参考になる。
さて、前置きはここまでで早速始めようと思う。
まず、Immunity Debuggerで洞窟物語を開く。
次に、Ctrl+Nで使用しているAPI一覧を表示させ、先述したURLに挙げられているAPIを探す。
CreateMutexが見つかった。
CreateMutexの項目を右クリックし、Find references to importを選ぶと、アドレス00412472が見つかるのでその項目をダブルクリックする。
周辺の逆アセンブルコードリストを眺めると次のようになっている。
アドレス00412472のCreateMutexで作成している多重起動防止用のMutexが開けるかどうかをアドレス0041243FのOpenMutexで試しているようだ。
多重起動防止を解除するにはCreateMutexを呼ばないようにすればよいから、CreateMutexの最初の引数をPUSHしているところからCreateMutexの呼び出し後までJMPするようにすればよい。
最終的に変更箇所は以下のようになった。
; 変更前 0041246D |. 52 PUSH EDX ; /MutexName => "Doukutsu" 0041246E |. 6A 00 PUSH 0 ; |InitialOwner = FALSE 00412470 |. 6A 00 PUSH 0 ; |pSecurity = NULL 00412472 |. FF15 C4C04800 CALL DWORD PTR DS:[<&KERNEL32.CreateMute>; \CreateMutexA 00412478 |. A3 78E44900 MOV DWORD PTR DS:[49E478],EAX ; 変更後 0041246D EB 09 JMP SHORT Doukutsu.00412478 0041246F 006A 00 ADD BYTE PTR DS:[EDX],CH 00412472 |. FF15 C4C04800 CALL DWORD PTR DS:[<&KERNEL32.CreateMute>; \CreateMutexA 00412478 |. A3 78E44900 MOV DWORD PTR DS:[49E478],EAX
変更が終わったら右クリック->Copy to executable->All modificationsで現れるダイアログに対してCopy allを選ぶ。すると、ウィンドウが表示されるので右クリック->Save fileでファイルにセーブする。
多重起動出来ることが確認できた。
*== TARGET_FILE ================ FILENAME Doukutsu.exe * FileSize: 1478656 bytes * LastMod.: 2005/06/12 16:07:12 *=============================== 0001246D: 52 EB 0001246E: 6A 09