ダミーコード挿入による難読化に少し触れてみた。
難読化関連を調べてて、こんな論文を見つけた。
「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の日本語化パッチとかないのだろうか…。
引数を与えて実行する方法がわからないorz