================================================================= HObfusにおける変数の難読化方法 ----------------------------------------------------------------- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: [ Step 0 ] ソースコード上での準備 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: まず以下の準備をソースコードに対して行う。 元の変数名を変更してしまっても問題ない変数には、$_ を先頭につける。 --【例】-------------------------------------- $_document.currentScript.textContent.length $_window.RegExp("[^0-9a-f]","gi"); $_window.String.fromCodePoint() for($_i=0;$_i<$_n;$_i++){ $_s+=$_patt.charAt($_window.Math.floor($_window.Math.random()*$_patt.length)); } --------------------------------------------- 名前が変更不可な Math や String は、$_window.Math $_window.String のように .(property) の形にする。 元から .(property) の形だが名前が変更不可の場合は、$_ を先頭につける。 --【例】-------------------------------------- $_pax.$_docwrite(); --------------------------------------------- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: [ Step 1 ] CObfStr_jsprop ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: .(property) を [_$.(key)] で、"(string)" を _$.(key) で置換する。 key はランダム文字列で、key と value(元のproperty/string) は マッピングとして記録される。 ................................................................. このマッピングは後でCObfWord_rediff::getMapping() を使用して、 コードの中に埋め込まれる。CObfWord_rediff::getMapping()は、 結構洗練されているようで、Mappingの一般解決策として評価する価値がある。 ................................................................. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: [ Step 2 ] CJsObfWord_dollar ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '$_(identifier)' を '_(random-string)' に置換する。 最初にハイフンをつけるのは、JavaScript の Reserverd Words に 衝突しないようにするためである。 =================================================================