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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
rozeo
記事: 86
登録日時: 12年前
住所: 広島 呉 (学生寮
連絡を取る:

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

#1

投稿記事 by rozeo » 11年前

こんにちは(こんばんは)、rozeoです。

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

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

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

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 11年前

この実行ファイルは「フラグを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!の時点で終了させるべきでした。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

rozeo
記事: 86
登録日時: 12年前
住所: 広島 呉 (学生寮
連絡を取る:

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

#3

投稿記事 by rozeo » 11年前

はぁ〜…なるほど…フラグ操作ではなくNOPで埋めるというやり方もあったのか…

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

閉鎖

“C言語何でも質問掲示板” へ戻る