ichirin2501's diary

いっちりーん。

ダミーコード挿入による難読化に少し触れてみた。

難読化関連を調べてて、こんな論文を見つけた。
「Obfuscation of Executable Code to Improve Resistance to Static Disassembly」


ほうほう、Junk Insertion ?
なるほど、ぜんぜんわからん(英語)
具体例が記述されてて、


0x08048434 8b 44 24 04 mov 4(%esp), %eax
0x08048438 03 44 24 0c add 12(%esp), %eax
0x0804843c 83 e8 06 sub $6, %eax
みたいなコードがあって、
0x08048434から3byteのoffsetで
0x08048437にjmpすると、

add $3, %al
inc %esp
and $12, %al
になる、ということで実際に試してみた。


直接アセンブリコードを書くにはまだ未熟なので、
C言語インラインアセンブラを利用したコードがこれ。
ジャンプするアドレスは完全に決め打ちした。

#include <stdio.h>
int ans;
void hoge(int a, int b, int c){
	ans = 0;
	printf("ans1:%d\n",ans);
	printf("a:%d b:%d c:%d\n",a,b,c);
	asm ("xor %eax,%eax");
	asm ("jmp 0x8048437");
	asm ("mov 0x4(%esp),%eax");
	asm ("add 0xc(%esp),%eax");
	asm ("sub $0x6,%eax");
	asm ("movl %eax,ans");

	printf("ans2:%d\n",ans);
}
int main()
{
	// a+c-6
	hoge(6,6,10);
	return 0;
}

objdumpした結果がこれ。




IDA Proで静的解析してる画面


IDA Proすげえええええええええええええ。
この程度の難読化ならさらっと解析するようです。


つぶやき:
IDA Proの日本語化パッチとかないのだろうか…。
引数を与えて実行する方法がわからないorz