写在前面的话
了解歹意软件的实在代码对歹意软件剖析人员来说对错常有优势的,由于这样才干够实在了解歹意软件所要做的工作。但不幸的是,咱们并不总是能够得到“实在”的代码,有时歹意软件剖析人员或许需求相似反汇编东西或调试器之类的东西才干“估测”出歹意软件的实在行为。不过,当歹意软件运用的是“解说型言语”开发的话,例如Java、JavaScript、VBS或.NET等等,咱们就有许多种 *** 来检查它们实在的原始代码了。
不幸的是,进犯者相同知道这些剖析技能,并且为了躲避安全剖析,他们还会选用许多混杂技能来搅扰研究人员的剖析进程。进犯者能够运用反剖析技能来判别歹意代码是否在虚拟机环境中运转,或许让自己的代码只在特定环境中运转以避免调试以及逆向剖析环境(包含反混杂),而今日咱们要评论了便是一种依据JavaScript的新式反逆向剖析技能。
JavaScript正邪对垒
关于进犯者来说,JavaScript现已变成一种十分重要的进犯向量了。它一般用于进犯的Payload感染阶段,它的运用十分多样化,编码方式也不像其他言语那样遭到各种约束,并且简直一切的歹意JavaScript代码都会进行混杂处理。下图显现的是一个通过了混杂处理的JavaScriptPayload样本:
关于歹意软件剖析人员来说,之一步便是要对这种代码进行反混杂处理。从最简略的复制粘贴,到更强大一点的“脚本替换”(触及函数和变量的重命名),研究人员需求想方设法让代码愈加明晰。但是在JavaScript中,咱们能够依据函数名的调用状况来了解函数的运转机制。比如说函数arguments.callee.caller(),在这个函数的协助下,咱们能够创立一个仓库盯梢,并将履行过的函数依照次序存储在列表中。获取到函数名之后,咱们就能够将它们当作密钥来对处理过的JavaScript代码进行动态“解密”了。这项技能能够让咱们得到隐式的操控流完整性,由于假如一个函数被重命名或许函数运转次序发生了改变,那么“成果哈希”肯定是不同的。假如哈希不同,生成的密钥也就不同,这样就能够进行解密并运转通过特别加密的代码了。
为了让我们更清楚地了解我在说什么,请我们看看下面这段没有通过混杂处理的样本代码【检查原始代码】:
var _= require("underscore");
function keyCharAt(key, i) {
return key.charCodeAt( Math.floor(i %key.length) );
}
function xor_encrypt(key, data) {
return _.map(data, function(c, i) {
return c.charCodeAt(0) ^ keyCharAt(key,i);
});
}
function xor_decrypt(key, data) {
return _.map(data, function(c, i) {
return String.fromCharCode( c ^keyCharAt(key, i) );
}).join("");
}
function cow001(){
eval(xor_decrypt(arguments.callee.name,[0,0,25,67,95,93,6,65,27,95,87,25,68,34,22,92,89,82,10,0,2,67,16,114,12,1,3,85,94,69,67,59,5,89,87,86,6,29,4,16,120,84,17,10,87,17,23,24]));
}
function pyth001(){
eval(xor_decrypt(arguments.callee.name,[19,22,3,88,0,1,25,89,66]));
}
function pippo(){
pyth001();
}
pippo();
代码运转进程中会对“特定内容”进行核算(eval()函数),在代码的第21和25行,函数cow001()和pyth001()会核算XOR后的解密内容。xor_decrypt函数能够接纳两个参数:decoding_key和需求解密的Payload。接下来,代码会运用arguments.callee.name()函数来将内部阶段的每一个函数名当作解密密钥来运用,假如函数名是“原始函数名”(进犯者用来解密Payload的函数名),那么加密后的代码就会正常运转,不会报错。换句话说,假如函数名通过了重命名,那么eval()函数将得到过错的成果,并导致进犯者转化代码运转途径(运用简略的try catch句子)。
在运用JavaScript代码施行进犯之前,进犯者需求开发歹意JavaScript代码并对其进行混杂处理,这样才干准备好所谓的“进犯途径”。代码混杂的进程中,进犯者需求运用额定的脚本(比如说下面这段代码-【检查原始代码】)并依据混杂后的函数名来加密Payload,然后用新加密的Payload替换之前的代码(加密后的Payload便是加密函数名所运用的密钥)。
"use strict";
var _= require("underscore");
function keyCharAt(key, i) {
return key.charCodeAt( Math.floor(i %key.length) );
}
function xor_encrypt(key, data) {
return _.map(data, function(c, i) {
return c.charCodeAt(0) ^ keyCharAt(key,i);
});
}
function xor_decrypt(key, data) {
return _.map(data, function(c, i) {
return String.fromCharCode( c ^ keyCharAt(key,i) );
}).join("");
}
var final_payload = "console.log('Malicious Content Triggers Here !')";
var k_final = "cow001";
[1] [2] 黑客接单网
...
前语 本文合适Web安全爱好者,其中会说到8种思路,7个东西和还有1个小程序,看本文前需求了解相关的Web基础知识、子域名相关概念和Python 程序的基础知识。 感谢我的老友龙哥的技巧大放送以及Or...
朋友:有什么的免费的网站安全解决方案,或者说产品么? 黑客接单渠道:当然有啊!不光免费,还很好用呢! 朋友:那还不赶忙和我说说?我小网站买不起WAF,免费的好用的话我就用下啊! 黑客接单渠道:那等下,...
许多Web运用会有避免跨站恳求假造的战略,比方经过request恳求传一个当时页面有用或许当时会话有用的参数(假如他们没有,那就很值得研讨)。这些参数用来证明这个恳求是从预订用户宣布的,而不是进犯者那...
Osquery是一个SQL驱动操作体系检测和剖析东西,它由Facebook创立,支撑像SQL句子相同查询体系的各项目标,能够用于OSX和Linux操作体系。别的,osquery是一个多渠道软件,能够安...
假如你长时刻混迹于暗码破解的第一线,那么就十分清楚破解相同内容的不同文件格局对破解的速度的影响是十分大的。例如,破解维护RAR文档暗码所需的时刻是破解具有相同内容的ZIP文档暗码的十倍,而破解保存在O...