07/11/12 21:47:38
>>751
>・バイナリ中の関数の並びをシャッフル
意味なし。クラッカは並び順じゃなくて参照順で探す事のほうが多い。
>・関数名を適当なキーでハッシュ化したものと置き換え
スクリプト言語とかシンボル名埋め込まれる出力でも無い限り無意味。
C++とか.NETとかだとデバッグビルド以外消えるんじゃなかったっけ?
>・適当に生成した、全く使用されないオブジェクトファイルを混ぜる
元々言語のライブラリ混ざってますがな。
あとはシャッフルと同じ理由で没。
乱数列みたいなオブジェクトですらないバイナリの場合なら逆アセンブルをささやかに妨害できる程度だけど、参照した瞬間に破られる。
というわけだ。すまん、それ全部殆ど意味が無いっぽい。
一応解析の邪魔する方法として有名なのを幾つか挙げると
「デバッガ検出ルーチン」と「パッカー」を組み合わせて圧縮/暗号化されたバイナリで配布し、実行時に小型のコードでメモリ上に展開して実行する方法。
デバッガ検出とあわせれば、展開済みバイナリの生成が「多少」面倒になる。
手軽なところだと、AsProtectやUPX(+トークン破壊)等が有るかな。
変り種でオリジナルの中間言語インタプリタを作ってその中に本体実装する方法。
中間言語の逆コンパイラが存在しないから、オリジナルの言語解析されるまでは耐える可能性がある。
手軽にやるなら、吉里吉里+暗号化XP3とかな。
プロテクトをどれだけ凝ったところで
一文毎解析してチェックルーチンを回避されたらアウトだよな
と思うのだけど、バイナリパッチさせないための対策ってある?
ぱっと思い付くのとしては
・自家サーバに本体置いておく
・専用ハード付きで売って、そのハードの中に本体置いておく
くらい。