僕の考えた解析され辛いデバッガー検出


#include <stdio.h>
#include <windows.h>

typedef BOOL(*IS_DEBUGGER_PRESENT)(void);

int debug_flag = -12;
IS_DEBUGGER_PRESENT proc;

void proc_set(){
	char name[] = "IrFffpa`m{Zyi~kad";
	int i,size=strlen(name);

	i = 0;
	while(i < size){
		name[i] ^= i;
		i++;
	}
	proc = (IS_DEBUGGER_PRESENT)GetProcAddress(GetModuleHandle("kernel32.dll"),name);
	memset(name,0,size);
}

void check(int n){
	debug_flag += proc()+1;
	if(n>0){
		check(n-1);
	}
}

main(){
	BYTE a[4];
	do{
		proc_set();
		check(8);
		*(int*)&a[3+debug_flag] = 0x12345678;
	}while(a[1]!=0x56);
	printf("ok");
	getchar();
	return 0;
}

前提知識:C言語全般、win32API基礎、IsDebuggerPresentはデバッガーを検出すると1を返す関数でkernel32.dllの中に含まれている事。

まず、procとdebug_flagをグローバル領域(動的ではなく固定割り当て)にする事で、探索必要領域を広げ見つけ辛くさせる。

GetProcAddress経由でIsDebuggerPresentのアドレスを取得する事で、使用している外部関数の列挙から逃れる。

GetProcAddress関数を呼ぶ際に使う”IsDebuggerPresent”文字列は暗号化した状態で保持し、なおかつ無駄な関数呼び出しをすることでデコード後もメモリーに残らなくする。
(暗号化が適当なのは仕様、一応書きやすいようASCII文字範囲から抜けないようにという意図がある)

IsDebuggerPresentを呼び出した前後では判定を行わない、なおかつflagを直接if文で使わず配列への代入位置とし間接的な判定を行うことで、万が一場所が割れても安易にif文を変更できないようにした。

デバッガー検出した場合に終了するのではなくループさせ続ける事で、判定箇所を特定し辛くした。
(オーバーフローの危険性があるが、むしろその方が解析ミスを疑わせられるためあえてこうしてある)

ちなみに、このデバッガー検出を突破する方法は、IsDebuggerPresent側を改造して常に0を返させればいいだけ。
解析改造とは常にイタチゴッコである。

AIManager@ver0.88

アプリ更新時はほぼ定型文なので、機械的に出来る部分は自動化したいんだけどwordpressでそういうことをやる方法が判らない。

AIManager@ver0.88
・AI詳細画面で”ダウンロードURL”を表示するように

以前書いたとおり、URLを表示する機能を付けてみただけ。
この程度の変更なのにUI変更で時間をかけてしまう自分に欝。
(コーディングが大変という意味ではなく、レイアウトに悩むという意味で)

作ってから気づいたけど、これでまたスレに投下する大義名分が(ry
あれ、本当にAIManagerってAI関連コミニティの邪魔にしかなってなくね?
使う側としては便利は便利なんだけど……

公開するかも判らないけど


#include "th123_dll.h"

int main(){
	player *data = get_player_data(0);
	yield();
	while(true){
		printf("%f %fn",data->x,data->y);
		yield();
	}
	return 0;
}

こんな感じの事やってます。

って、これだけでわかる人はいないと思うので解説すると
以前手を付けたth123_aiのDLL化をもうちょっと進めて、C++言語でAIを作れるようなDLLを作れないかなーという試作。

RoAddr.dllみたいにしようかとも思ったけれど、そんな事をすれば不正に使う人が出てどうたらこうたらと叩かれるのは目に見えているので、あくまでAIで出来る事だけ出来る形に収めるつもり。
だから単にC言語上から利用できるth123_aiであり、それ以上でも以下でもない。
あ、以下では無いは誤りか、いくつかの機能オミットするつもりだし。

需要? そんなのしらんがな
ま、最悪コードリファクタリングの一環ということにしてもいいし、手を出す事自体は無駄ではないはず、たぶん。

あと51日で

th123_ai(元th105_ai)生誕一周年だってよ!
最初はこんな大規模になるとは思っても見なかった。
いやぁ、我ながら随分遠くまで来たもんだ。
え? まだ二ヶ月近くあるのに気が早すぎるって?
こまけぇことはいいんだよ!

ちなみに、記念すべきファーストリリース
>379 名前:名前が無い程度の天候[sage] 投稿日:2008/12/21(日) 13:51:28 [昼] ID:PFFoibwc0
>>>378
>なるほど、なんとなく判った
>
>というわけで試しに作ってみた
>ttp://sweetie089.hp.infoseek.co.jp/cgi-bin/index.cgi/garakuta/ai.zip
>aiの書き換えは不能、中身はガン待ちアリス

懐かしいなぁ
この頃はまだ緋闘劇組相手でも初見なら100%勝てる程度のAIを作って見せる!とか意気込んでたんだよなー
だが現実の自作AIではVEにも勝てるか怪しい、製作者(笑)

別に一周年だからといって何かやる気もないし、一周年だからといってVerが1.00になることもない。
まぁあくまで心の問題って事で