首先,我在信息安全方面完全是个傻瓜。今天早上我收到了一封让我好奇的电子邮件。这是一种钓鱼页面,Gmail的垃圾邮件过滤器没有检测到。所以我下载了内容来查看它的代码。我发现的是简单的HTML/JavaScript页面,页脚上有这样的内容:
function XF(){return new Array('0cd0a85cd81679c246c5a0bb377e5f3b789d0612531b507f4a9dd98ba372219feb0d35d42db5970a21c95428a46ddb18bd664c405e1dd9074f6e0ffdda0cd7f9365337e1baca81c9d73803789c0192093adef61debca1f9525309693700fe45464d57327a2fb449f05b4c0736a71bcf1ffcc66a09e439358cf0d1abf9763f1548ac13a8aed69a52e8a3f15d0d5294f41877d4b5408e95c1286f390bb1bf19c6581b3c17075ebf4733b7224bf275cc8911fc15b359bd195d4f2220ad2ca3991f096f22e32d0ae0a749d921f7bb331a7a07fa31e98f2ea6edf4c996bf82e2eea6664033f1e890023d1bb2fc8b3dbf9ca70bfb9b9063f583d2927f2eeb82c08d130e7c04c2ea8a388750694fbef8a3257944f838446cbfbdd827275e20938288fcb5876608d8d444931c5b03c441e6086aee1111ed0a8366a64e75c38afddf4a6bf70f3583ca7bdf5402f281e62405899c38bcdf51c497cdfdc5951850f5a53d0d0fa7373fa458df3f63ebfff78a2b2a159ad48e1575f55f2adf8a3fc3202dfd15a7c1efe0efec1ceaa69406b3db509bbe596d3ee97e2c365ba7f48fd01ad3035beba46ae443aee287739033c9c9fcf8ec0daf8247931d667a6ab8d8c60cbe627f4b37a5a6ee7bf5de687cdb15c3b6778e6b9af28af9b2306c3f93ffd5588347e293fc61a75263317e3ef10e59f7798a936625d98dae2904186de3aefa1e877af65', ...}更新1:以下是PasteBin中的全部代码。
为了最小化代码,我刚刚通过了数组的第一个元素。我可以猜到这是一个十六进制数组,但我想知道如何解码它的内容,看看它在做什么。
任何帮助都将不胜感激。
更新2:我能够将部分代码转换回字符串,我意识到它实际上是一个被占用的脚本。检查:https://jsfiddle.net/g9hsaj3o/
发布于 2016-05-17 13:25:33
只是一些小事情,还没有完全弄清楚。请随时对此进行扩展和评论。
在我们美化代码之后,我们得到:http://pastebin.com/CdZ5BTfj
我们看到:
var C4 = new Array(0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74...然后是一个函数
function DC() {
var Wb = C4.length,
_yu = new Array(Wb),
i;
for (i = 0; i < Wb; i++) _yu[i] = String.fromCharCode(C4[i]);
document.open();
document.clear();
document.write(_yu.join(""));
document.close();
};因此,这只是执行HEX -> ASCII转换,并将解码后的字符串写入文档。这反过来又评估为
<script>
function _ii(Cc) {
var Dc, yx, _099, _ln, o, _x02, _jh;
Dc = new Array(4);
_jh = XF();
_ln = _jh.length;
yx = _r0(Cc, _s88n(_jh[_ln - (0x4c ^ 0x4e)]), 0x03e8);
_099 = ZZ(_xsii(_jh[_ln - (0x2b ^ 0x2f)]), yx);
_x02 = ZZ(_xsii(_jh[_ln - (0x98 ^ 0x9B)]), yx);
o = JJ(_jh, _099, _x02, Dc);
if ((Dc.join("")) == _jh[_ln - 1]) {
document.write(o.join(""));
document.close();
} else {
msg.innerHTML = " ";
alert('Senha inválida!');
};
_ip = false;
};
</script>这是它变得有趣的地方,因为其他混淆的函数被调用。这是使用"XF()“返回的神奇数组的地方:
function XF() {
return new Array('0cd0a85cd816....6ec24dde78ca48', 'd6860accfa237d675ba73acc5e486168', 'f81845c6e66b62e5fc758da50dc73d68', 'a96751384baa020ef306acaed4e7851683989674', 'eb3494af236b53ec970b830e308ff41d');
};因为我们只需要获取再次写入document中的解密字符串,所以我们可以轻松地修改代码以输出字符串。
但是,为此,我们需要_ii()中使用的"cc“对象。我们看到有一个函数调用_ii():
function A0(Cc) {
if (!_ip) {
msg.innerHTML = ms2;
window.setTimeout(function() {
_ii(Cc);
}, 0);
_ip = true;
};
};但是,谁来代替A0,用什么论据呢?我们查看HTML并看到
<form name="F1" onsubmit="A0(document.F1.P1.value)" action="javascript:A0(document.F1.P1.value)">而且还
<a href="javascript: A0(document.F1.P1.value);">因此,我们需要表单F1和子对象P1的值。
然而,我现在还没有找到正确的理由。也许是个硬编码的值。当我使用参数"abc"执行函数的修改版本,从而输出写入文档的字符串时,我现在只收到垃圾。

如果我们找出正确的参数,这可能会正确地解密到一个新的恶意软件。到目前为止,我看到的代码只是散列(MD5或SHA1)和加密之类的东西。真正的恶意软件必须在XF()函数的数组中。
(修改职能:)
function _ii(Cc) {
console.log("inside");
var Dc, yx, _099, _ln, o, _x02, _jh;
Dc = new Array(4);
console.log("good");
_jh = XF();
console.log("outside");
_ln = _jh.length;
console.log("good");
yx = _r0(Cc, _s88n(_jh[_ln - (0x4c ^ 0x4e)]), 0x03e8);
_099 = ZZ(_xsii(_jh[_ln - (0x2b ^ 0x2f)]), yx);
_x02 = ZZ(_xsii(_jh[_ln - (0x98 ^ 0x9B)]), yx);
o = JJ(_jh, _099, _x02, Dc);
console.log(o.join(""));
/*if ((Dc.join("")) == _jh[_ln - 1]) {
document.write(o.join(""));
document.close();
} else {
msg.innerHTML = " ";
alert('Senha inválida!');
};*/
_ip = false;
};表单是安全的打开,没有任何链接图片存在。我们有以下一页:

留在文本框中的文本似乎是“请输入您的密码”。因此,这似乎是我们真的必须知道密码,以解密文本。但密码是什么?我以为这是个骗局?直到知道,密码似乎没有被发送到某个第三方服务器。只有正确的密码才能解密其他东西(或者我没能解密密码,它做了其他事情)
https://security.stackexchange.com/questions/123519
复制相似问题