思路么?
替换文件 方法其实比较简单,将原始脚本 读入字符串,
使用正则表达式提取出加密函数及内容!
然后用 执行代码,
将结果替换回 文件,完成工作!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//这是一段测试代码 //确定要解密的文件 var JsFileName="001"; var fso = new ActiveXObject("Scripting.FileSystemObject"); //读取脚本 var f1 = fso.opentextfile("E:\\temp\\js\\pj\\"+JsFileName+".js",1,true); var decodeJs =f1.ReadAll(); //console.log(decodeJs); //使用正正则表达式找出代码 decodeJs.replace(/_0x\w*?\s*?\('[^']*?'\s*?,\s*?'[^']*?'\)/g, function(carr_fun_all) { document.write(carr_fun_all); document.write("<br/>"); //找出函数名 var carr_fun_name = carr_fun_all.match(/_0x\w*/g)[0]; document.write(carr_fun_name); document.write("<br/>"); }); |
取出来了函数名了
函数carr_fun_all[]和函数名carr_fun_name已经都提取到了,那么最麻烦的就是提取出整个加密函数carr_fun_content出来。
这里有两种方法,
1、提取出加密函数,然后evel直接加密函数,相当于引用了加密函数了;
2、直接引用整个js,并执行,当前代码也可以具有了解密函数。
我们为省事,节约时间,直接执行全部js了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
//使用正则表达式找出代码 var decodeJs01=decodeJs.replace(/_0x\w*?\s*?\('[^']*?'\s*?,\s*?'[^']*?'\)/g, function(carr_fun_all) { //找出全部函数! carr_fun_all //document.write(carr_fun_all); //document.write("<br/>"); //找出函数名 carr_fun_name var carr_fun_name = carr_fun_all.match(/_0x\w*/g)[0]; //document.write(carr_fun_name); //document.write("<br/>"); //找出函数 完整的函数内容 carr_fun_content var carr_fun_content=""; //想办法找出函数 //然后直接evel直接函数 if (this[carr_fun_name] === undefined) { //_0x???未定义 //这里应该提取出 fun全部代码 放入 carr_fun_content //提取代码有点麻烦 直接执行全部js吧。 } try { if (carr_fun_content !== "") { //如果找到代码,直接eval eval(carr_fun_content); }else{ //eval(decodeJs)// //document.write("runall!"); } try { //替换解密代码里有的方法,出错的不替换(一般为内部方法) var carr_fun_results = window.eval(carr_fun_all); //document.write("<br>"+carr_fun_all+"->"+e); if (typeof(carr_fun_results) === "string") { carr_fun_results = carr_fun_results.replace(/\\/g, "\\\\") .replace(/\n/g, "\\n") .replace(/'/g, "\\'") .replace(/"/g, "\\\""); carr_fun_results = "\'" + carr_fun_results + "\'"; } return carr_fun_results; } catch (e) { //document.write("<br />error :"+e); 出错不替换 return carr_fun_all; } } catch (e) { //出错不替换 return carr_fun_all; } }); |
1 2 3 4 5 6 7 |
//例子: //原始: window[_0x56ae('1d','c5mL')][_0x56ae('1e','GKx$')]() //解密: window[location][reload]() //整理:该做这一步了 window.location.reload() |
方括号 改为 点 调用
1 2 3 4 5 6 7 8 9 10 11 12 |
// var decodeJs02=decodeJs01.replace(/\[["']\w+?["']\]/g, function(carr_brackets){ //document.write(carr_brackets); var carr_content = carr_brackets.match(/\w+/)[0]; if (!carr_content .match(/^\d+$/)) { "是否为数字" return "." + carr_content ; } else { return "[" + carr_content +"]"; } return carr_brackets; }); |
生成到文件1里面
1 2 3 |
var f2 = fso.createtextfile("E:\\temp\\js\\pj\\"+JsFileName+"-1.txt",true); f2.write(decodeJs02); f2.close(); |
- 本文固定链接: http://www.three123.com/2021-04/js-crack-jsjiami-decode/
- 转载请注明: Carr 于 Carr的仓库 发表