類人猿人類学の 2 番目の問題 - 混乱を招く動的 Cookie 検出
単純な document.cookie、location.reload などは書き込まれません。
1. コードフォーマットの検出
これは、文字列の正規一致のパフォーマンスの低さを利用し、より多くの文字列に適応し、より「普遍的」に見える式を悪意を持って作成します。これにより、一致時間が長くなり、スタックの効果が得られます。
var _0x18813f = _0x5b4f47["constructor"]("return /\" + this + \"/")()["compile"]("^([^ ]+( +[^ ]+)+)+[^ ]}");
解決策: 圧縮コード
2. global と navigator.vendorSub を検出します
解決:
グローバルを削除して、キャッチ ロジックを実行させることができます
3.setIntervalの検出
nodejs の setInterval はブラウザと同じではありません。ブラウザの setInterval によって渡される最初のパラメータは文字列にすることができますが、nodejs の最初のパラメータは関数である必要があります
解決:
setInterval を空に設定します
setInterval = function (a,b){
}
考え
ここでの元のコードは次のとおりです。これにより、_0x4464ae 関数が最初に実行され、次に戻り値が setInterval に渡されるため、setInterval は空にすることができます。
もしそうならソースコード
setInterval(_0x4464ae, 1000);
ここでsetInterval を空に直接設定することはできません。setInterval をフックする必要があります。フック コードは次のとおりです。
setInterval = function (a,b){
if(typeof a ==='string'){
return Function(a)()
}
a()
}
setInterval がタイミング ループの実行を開始すると、プログラムは停止しないため、このコード ロジックは次のように記述する必要があります (関数は 1 回実行されます)。直接空白の場合、_0x4464ae 関数は実行されず、qz 変数は存在しません。 、そして別の段落があります コードが qz で判断すると、間違ったロジックに従います
4. Console.log出力の検出
eval の 1 つは次のコードを実行します
console = new Object()
console.log = function (s) {
while (1){
for(i=0;i<1100000;i++){
history.pushState(0,0,i)
}
}
}
console.toString = '[object Object]'
console.log.toString = 'ƒ toString() { [native code] }'
このようにして、console.log
メソッドを呼び出すと、大量の履歴レコードが追加され続けるため、ブラウザがフリーズし、呼び出し時に、console.dir
それが関数ではないことを示すプロンプトが表示されます。
解決策: プログラムの先頭でプリストアするconsole.log
MyConsole = console.log
環境を補う
この場合、次のコードを追加することで直接取得でき、最初のページで返されたコードを変更する必要はありません。
navigator = {
vendorSub:''
}
MyConsole = console.log
document = {
cookie:''
}
location = {
reload:function(){}
}
delete global;
setInterval = function (a,b){
if((typeof a)=='string'){
return Function(a)()
}
a()
}