反混淆 Javascript 十六进制编码变量
Deobfuscating Javascript Hex Encoded Variables
现在simple hex deob很简单,我很好奇有没有工具可以重命名变量的用法。例如:
是否有工具可以从数组中获取变量名称,并在代码主体内重命名用法?
是的。 String.replace(regex,function(found,selected))
方法。
h0=$('.de1').text();
h1=h0.split('$')[0].split('=')[1];
h2=h0.slice(h1.length+12);
eval('ar='+h1);
h3=h2.replace(/_0x67a5\[(\d*)\]/g,function(a,b){return '"'+ar[parseInt(b)]+'"'});
h4=h3.replace(/;(?!=['"])/g,';<br>').replace(/\x(..)/g,function(a,b){return '&#x'+b+';'}).replace(/\u(....)/g,function(a,b){return '&#x'+b+';'}).replace(/_0x(....)/g,function(a,b){return '&#x'+b+';'})
$('#abrpm').html(h4);
使用本网站,大部分代码都可以格式化并变得可读:http://jsbeautifier.org/
然而,这会在顶部留下一个巨大的数组,其中包含代码中使用的大部分 variables/strings。要在整个代码中插入其内容,您可以使用以下 JavaScript 来搜索和替换每个实例:
for (var i=0; i<keywords.length; i++) {
if (keywords[i].match(/^[a-zA-Z][a-zA-Z0-9_]*$/)) { // Could be a standalone variable
// Replace any instances the string is used in an array accessor ['x'] with a dot .x
code = code.replace(new RegExp('\['+arrayName+'\['+i+'\]\]','g'),'.'+keywords[i]);
}
// Insert as strings throughout code, escaping anything necessary
code = code.replace(new RegExp(arrayName+'\['+i+'\]','g'),'\''+
keywords[i].replace(/\/g,'\\').replace(/\r/g,'\r').replace(/\n/g,'\n').replace(/'/g,'\\'')+
'\'');
} console.log(code);
确保为该代码创建三个变量,arrayName
('_0x67a5'
的字符串)、keywords
(数组)和code
(代码数组之后)。为了准确地将代码包含在一个字符串中,我推荐使用Notepad++来替换所有的反斜杠、引号和换行符(用extended/regex查找:\r\n
,替换为:\r\n\\r\n
)。
这留下了一些以十六进制命名的变量,但它们都是特定函数的局部变量,并且更容易理解。结果可以在这里看到:http://pastebin.com/kQjz2T0P
如果你python,使用以下方法处理顶部的大数组:
import re
#first open the file and read into the variable 'text'
result = re.sub(r"\x([0-9A-F]{2})", lambda m: chr(int(m.group(1), 16)), text)
现在simple hex deob很简单,我很好奇有没有工具可以重命名变量的用法。例如:
是否有工具可以从数组中获取变量名称,并在代码主体内重命名用法?
是的。 String.replace(regex,function(found,selected))
方法。
h0=$('.de1').text();
h1=h0.split('$')[0].split('=')[1];
h2=h0.slice(h1.length+12);
eval('ar='+h1);
h3=h2.replace(/_0x67a5\[(\d*)\]/g,function(a,b){return '"'+ar[parseInt(b)]+'"'});
h4=h3.replace(/;(?!=['"])/g,';<br>').replace(/\x(..)/g,function(a,b){return '&#x'+b+';'}).replace(/\u(....)/g,function(a,b){return '&#x'+b+';'}).replace(/_0x(....)/g,function(a,b){return '&#x'+b+';'})
$('#abrpm').html(h4);
使用本网站,大部分代码都可以格式化并变得可读:http://jsbeautifier.org/
然而,这会在顶部留下一个巨大的数组,其中包含代码中使用的大部分 variables/strings。要在整个代码中插入其内容,您可以使用以下 JavaScript 来搜索和替换每个实例:
for (var i=0; i<keywords.length; i++) {
if (keywords[i].match(/^[a-zA-Z][a-zA-Z0-9_]*$/)) { // Could be a standalone variable
// Replace any instances the string is used in an array accessor ['x'] with a dot .x
code = code.replace(new RegExp('\['+arrayName+'\['+i+'\]\]','g'),'.'+keywords[i]);
}
// Insert as strings throughout code, escaping anything necessary
code = code.replace(new RegExp(arrayName+'\['+i+'\]','g'),'\''+
keywords[i].replace(/\/g,'\\').replace(/\r/g,'\r').replace(/\n/g,'\n').replace(/'/g,'\\'')+
'\'');
} console.log(code);
确保为该代码创建三个变量,arrayName
('_0x67a5'
的字符串)、keywords
(数组)和code
(代码数组之后)。为了准确地将代码包含在一个字符串中,我推荐使用Notepad++来替换所有的反斜杠、引号和换行符(用extended/regex查找:\r\n
,替换为:\r\n\\r\n
)。
这留下了一些以十六进制命名的变量,但它们都是特定函数的局部变量,并且更容易理解。结果可以在这里看到:http://pastebin.com/kQjz2T0P
如果你python,使用以下方法处理顶部的大数组:
import re
#first open the file and read into the variable 'text'
result = re.sub(r"\x([0-9A-F]{2})", lambda m: chr(int(m.group(1), 16)), text)