我想「混淆」一個JavaScript代碼(使其不可讀,以避免盜版) 我使用awk來做到這一點。對於長單詞而言,這並行,但不適用於單個單詞。awk保留字段分隔符時使用子
輸入文本:
var t=document.getElementById(u)
預期輸出:
var b7=document.getElementById(b8)
實際產出:
var b7 document getElementById b8
在awk代碼:
${cor_var} is a unix variable which contains "t" in our example
${obf_var} is a unix variable which contains "b7" (the obfuscated variable)
awk -v AWK_COR_VAR="${cor_var}" -v AWK_OBF_VAR="${obf_var}" '
# We use Non-word characters as field separator
# Like this we can extract var/func
BEGIN {FS="[^A-Za-z0-9_]+"}
{
if ($0 ~ AWK_COR_VAR) {
# On a line containing our word, we go through each field till we find our word
# and then we replace it with sub
for (x = 1; x < NF; x++) {
# Output fields with space as delimiter
if ($x == AWK_COR_VAR) {sub($x, AWK_OBF_VAR, $x)};
}
print $0;
} else {print $0}
}' $file
似乎子功能擺脫了字段分隔符。 我也試過子沒有第三個參數,這使字段分隔符,而且還改變「T」的地方不應該:
if ($x == AWK_COR_VAR) {sub($x, AWK_OBF_VAR)};
輸出:
b7=documenb7.getElementById(t)
你可以選擇另一個FS嗎?例如'='?或者當前的FS是必須的? – Kent 2013-02-28 17:43:37
也'子($ x,AWK_OBF_VAR,$ x)'可能不是你想要的。你可能想要'$ x = AWK_OBF_VAR' – Kent 2013-02-28 17:48:37
我必須保持FS原樣(非單詞字符:[^ A-Za-z0-9 _] +) – user2120594 2013-03-01 13:30:46