1

このコードスニペットが何をしているのかを理解しようとしています。それは私が完全に理解できないbash構文です。

# Static function
get_ofuscated_link() {
local VAR=$1
local I N C R

I=0
N=${#VAR}
while (( I < N )); do
    C=$((16#${VAR:$I:2} + 0x18))
    R="$R"$(printf \\$(($C/64*100+$C%64/8*10+$C%8)))
    (( I += 2 ))
done
echo "$R"
}

このコマンドで呼び出されます

JS_VAR=$(echo "$PAGE" |  parse 'function[[:space:]]*_' '"\([^"]\+\)";' 1) || return
FILE_URL=$(get_ofuscated_link "$JS_VAR" | parse_attr href) || return

コロンがC=$行内で何をするのか、R=行が何を意味するのか疑問に思っています。

またfunction[[:space:]]*_、bashで特定の意味を持っているか、それが見ているだけのまっすぐな文字列です。

ソースファイルはplowshareから来ています

4

3 に答える 3

2

bashでは、パラメーターのサブストリングを選択できます。

x=hello
y=${x:2:2}   # y = ll

whileループは、の2桁のチャンクを反復処理していますVAR。算術展開構造内では$(( ... ))、「16#string」はstring基数16の数値として扱う表記法です。

R行は、で何らかの算術演算を実行Cし、その結果を前の値のに追加しますR

于 2012-07-29T16:12:58.770 に答える
2

コロンは${parameter:offset:length}、bashバージョンの部分文字列関数の表記の一部です。${VAR:$I:2}としてperlに変換されsubstr($VAR, $I, 2)ます。C=割り当て全体は、

$C = hex(substr($VAR, $I, 2) + 0x18);

$VAR16進数の文字列も同様で、ループは一度に2桁を取得し、マジックナンバー0x18を追加して、それを$Cに格納します。

線は十分にR=単純です。まず、その最上位構造は次のとおりです。

R="$R"stuff

これは単に文字列にいくつかのものを追加します$R。それでは、内容を見てみましょう。そのコアは次のとおりです。

$(($C/64*100+$C%64/8*10+$C%8)))

これはperlでもまったく同じですが、$((...))周囲はありません。ドル記号の二重括弧は、シェルの「算術展開」演算子です。$C数式を調べると、3桁の8進数(数字は、、、および)に変換されてから、同じ3桁の10進数に変換される$C/64こと$C%64/8$C%8わかります。$Cしたがって、これは数値を8進数として出力する奇妙な方法です。

これで問題が解決したので、追加されるものは次の$Rとおりです。

$(printf \\000)

ここで、8進数は000を置き換えます。これは、perlのと同等chr(oct("000"))です。

したがって$R、入力の16進数のペアごとに1文字の文字列として作成され$VARます。これは、0x18を減算することで難読化された文字コードの文字列を表し、この関数は0x18を追加し直します。

[[:space:]]演算子は正規表現の一部です。\sこれは、さまざまな種類の空白に一致するperlの演算子に相当するPOSIXです。確実に知るためにはparseコマンドまたは関数を確認する必要がありますが、正規表現はjavascriptソースファイルで関数定義を見つけることと関係があるようです。

于 2012-07-29T16:18:33.423 に答える
1

その名前が示すように、URLを難読化された表記に変換しています(名前にタイプミスがあり、さらにすべてを難読化しています)。

for (i = 0; i < length(url); i += 2)
{
     c = hex value of two characters of URL + 0x18
     r += character c interpreted as octal
}

したがって、が与えられる1234と、出力は*Lです。は*0x12+0x18 = 0x2A = 42 10 = 052=' *'から来ています。'L'は0x34+0x18 = 0x4C = 76 10 = 0114=' L'から来ています。

于 2012-07-29T16:15:45.680 に答える