一些混淆的JQuery代码(或其他编程原因故意编码为十六进制)包含一堆看起来像
的任意字符串"\x2e\x68\x65\x2d\x76\x69\x65\x77"
将例如解码为字符串" .he-view"。
我想通过一个转换所有" \ xhh"的脚本来传递此代码。将字符转换为可读的ASCII字符。
在我等待答案的同时,我打算写一个lex过滤器。
更确切地说:代码包含JS代码中的上述十六进制编码字符串。过滤器应该回显周围的代码,只需将十六进制字符串转换为适当的位置,以便结果保持可读性和语法正确性。
这里再次执行任务:
AAA,BBB,CCC "\x2e\x68\x65\x2d\x76\x69\x65\x77" DDD EEE
应该产生
AAA,BBB,CCC ".he-view" DDD EEE
实际上,它不起任何作用,无论周围的代码是JS,JQuery还是其他什么。问题是寻找一个过滤器来转换所有这些十六进制字符串""成可读的ASCII。其余的代码应该通过,现在再次明确说明。
此外,我发现十六进制字符串也出现在成对的单引号中(\')。
当然,工具/脚本应该用作过滤器,也就是说,给它输入文件,并且它会将转换后的文件吐出来,这样就可以调用它," hex-strings"转换为可读的ASCII。
FWIW,这里是必须转换的文件的摘录:
switchImg: function (b, c) { var d = b.data("\x61\x6e\x69\x6d\x61\x74\x65"); d = d ? animation : "\x72\x61\x6e\x64\x6f\x6d"; if (d == "\x72\x61\x6e\x64\x6f\x6d") { var f = ["\x66\x61\x64\x65\x49\x6e", "\x66\x6c\x69\x70\x49\x6e\x48"]; d = f[Math.floor(Math.random() * f.length)] }; var e = b.find("\x69\x6d\x67");
答案 0 :(得分:1)
至少在bash中,你可以简单地使用echo
内置命令:
echo -e "\x2e\x68\x65\x2d\x76\x69\x65\x77"
输出:
.he-view
检查help echo
是否有手册。
答案 1 :(得分:1)
我现在解决问题的方法是编译成过滤器的lex(flex)脚本:
%option noyywrap
%{
#include <stdio.h>
#include <string.h>
#define A yytext[i]
#define B yytext[i+1]
#define F yytext[0]
#define L yytext[strlen(yytext)-1]
main()
{
while (yylex());
}
%}
%%
\"([\\]x[0-9a-f][0-9a-f])*\"|\'([\\]x[0-9a-f][0-9a-f])*\' { int i=1;
printf("%c",F);
while(yytext[i]!=F) {
i++;i++;/* skip 2, backslash and x*/
printf("%c",16*(A <'a'? (A-'0'): (A-'a'+10))|\
(B <'a'? (B-'0'): (B-'a'+10)));
i++;i++; /* skip the two hex digits */
}
printf("%c",L); /* append \" or \' */
}
. { ECHO ; }
%%