- 2008-10-02 (木) 17:41
難読化というのは読んで字の如く「ソースコードを読むのを難しくする」事です。
java,C#,VB.NETなどの中間言語を用いるものは簡単にデコンパイルできるので結構難読化を施されたアプリケーションもありますが、ネイティブアプリケーションで難読化が施されたアプリケーションは少ないかと。
理由としてはPackerの方が手軽でデバッグ時の問題が起こりにくいからではないかと思います。
今回はネイティブアプリケーションの難読化に絞って、うだうだ書きますw
まずネイティブアプリケーションの難読化には二種類あり、違いは高級言語の時点で難読化するか、それともasmコードに変換後に難読化すると言うことです。図にするとこんな感じ。

前者の方が後者に比べ技術的には難易度が高いですが、今回の中国の発表で求められているのはこっちです。
後者の方は物にもよりますが結構簡単に作れるんじゃないかなーと思います。
前者の例はsumaさんが最近の記事で書いてるのでそっちを参照してくださいw
というわけで、asmコードに変換後に難読化する例としては、関数を呼ぶコードをこんな感じとすると。
push 0
push eax
call 00401715
これを難読化して、こんな感じ。
sub esp,0×8
mov [esp],eax
mov [esp+4],0
call 00401715
さらにさらに、movをpush、popで代用すると
sub esp,0×8
push eax
pop [esp]
push 0
pop [esp+4]
call 00401715
取り敢えず、読みにくくなったかもしれませんが、実行速度は確実に落ちますw
実際の所、コンパイラも結構アクロバティックなコードを吐いたりしてるのでasmコードに変換後に難読化する必要性があるのかな?と思いますが、素直なコードも吐きますので、そこをなんとかする意味では面白いかもしれませんね。
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://security.symphonic-net.com/krack/%e9%9b%a3%e8%aa%ad%e5%8c%96%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6/trackback
- Listed below are links to weblogs that reference
- 難読化について from Security Ark