ページ 11

他トピックスで気になった

Posted: 2013年11月26日(火) 22:09
by rozeo
こんにちは(こんばんは)、rozeoです。

あるトピ→
http://dixq.net/forum/viewtopic.php?f=3&t=14215

で話題の中でみけCATさんがMakeoutlog.exeというファイルを作っていました。
これはDXライブラリのlog出力のフラグを外部からTRUEにしているようですが、このような外部からフラグ操作などを行う実行ファイルとは一体どういったソースを書いているのでしょうか?

みけCATさん個人への質問のような感じになりましたがよろしくお願いします。

Re: 他トピックスで気になった

Posted: 2013年11月26日(火) 22:27
by みけCAT
この実行ファイルは「フラグをTRUEにする」ではなく、「フラグをFALSEにする処理を潰す」という処理をしています。
改造対象の「クイックソート解説アプリ.exe」をOllyDbgなどで解析してSetOutApplicationLogValidFlagを呼んでいる場所を特定し、
そこをNOP=0x90で埋めます。

ソースコード自体はこちらになります。

コード:

#include <windows.h>

int main(int argc,char* argv[]) {
	HANDLE* fp;
	if(argc<2) {
		MessageBox(NULL,"Please drop the file!","error",MB_OK | MB_TOPMOST | MB_ICONSTOP);
		return 1;
	}
	fp=CreateFile(argv[1],GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
	if(fp==INVALID_HANDLE_VALUE) {
		MessageBox(NULL,"File open error!","error",MB_OK | MB_TOPMOST | MB_ICONSTOP);
	}
	if(SetFilePointer(fp,0xE84,NULL,FILE_BEGIN)==0xFFFFFFFF) {
		MessageBox(NULL,"File seek error!","error",MB_OK | MB_TOPMOST | MB_ICONSTOP);
	} else {
		DWORD written=0;
		unsigned char buf[5]={0x90,0x90,0x90,0x90,0x90};
		if(!WriteFile(fp,buf,5,&written,NULL) || written!=5) {
			MessageBox(NULL,"File write error!","error",MB_OK | MB_TOPMOST | MB_ICONSTOP);
		} else {
			MessageBox(NULL,"Success!","make output log",MB_OK | MB_TOPMOST | MB_ICONINFORMATION);
		}
	}
	CloseHandle(fp);
	return 0;
}
オフトピック
File open error!が表示されたあとにFile seek error!が表示されるのはバグですね…
本来はFile open error!の時点で終了させるべきでした。

Re: 他トピックスで気になった

Posted: 2013年11月26日(火) 22:38
by rozeo
はぁ〜…なるほど…フラグ操作ではなくNOPで埋めるというやり方もあったのか…

ありがとうございます。ためになりました。