Ⅰ. はじめに
リバースエンジニアリングのテクニックの1つです。
パターン化しているので覚えておいて損はありません。
主に ASProtect というパッカーが利用する方法です。
Ⅱ. JMPの隠蔽方法
通常の場合
アセンブリでJMPする場合は以下のように書きます。
JMP x
隠蔽の例
push x
retn
push x とすると x がスタックに積まれます。
retn するときはスタックの一番上に積まれた x にジャンプします。
よって、上記2つのコードは全く同じ動作をします。
また、アセンブリ言語レベルで任意のコードを実行する場合、PUSHを利用したほうが楽になります。
JMP の場合 JMP 先のアドレスとの差を計算して第一オペランドに与える必要がありますが、PUSH を利用すると計算の必要が無くなる為です。