Rsaencrypt和奇怪的Javascript函数(e,t,r,n,c,a,l)

时间:2017-10-14 11:28:13

标签: javascript encryption rsa

我在代码中发现了一个奇怪的脚本:

<script type="text/javascript">
n = 'D70ED106DEF035D7DB732C7C0B91F403B6C4A7F2FD5581483A700202482EF829302ED828F68AAAAC093AEFEB64B51882FD3AF350394182AD3E09D3C4FCA1D326A28F4D21759755130B8BB529F5A395DE829B13B070FCCCD507EDA5623EC22B91E080F35AC48E8A4EFD1BB64A1B79BEEF9A325598C430F5D8475297705B727BDD8E5CE1CDFF3BBE8D860B673CDB37681F82D9CF9DDE9E40E638B24E47DBBA9775410B1C0717B3B45F021AB4B633E2CE314DEA93576F318F671AB36509C0936FB7C5108324617D6EFD83B8369C75B7F7743A78E8CC98872C4FF1D83BFC0B7892F20BB869AC9185D82AA6D601F2036F18698661994EE02FDE7EDF6850C09EF05A445A965B4DC5B59CCCF3EB04F8B9AF5895DB7246F24546E34382A4CC221D3C680465906AB38DA8C13CAB72217B2145391E9A446A18116AF05F4DA10632E5C1F1A65DCE313E7DD081C2D374254CE2FD717B0EB346B2B8DD58487C3553398F6EABB816A6A4F1FA94BAE116EEEEC1EAABF4067A2D9B9C02275B61BC3FFB9F324BC0788E941120E772FACE5B16C46B4830DB0E842D1495385AA299D682E2981DF0B952A3B41CCA3DE2FEDD3C70AF63B57303B24F731F1C422D59701C25FEFE47D67CBC72EADD82D23B0374EEE5787D66DC15D68F873FE0BC49347274DF40B047D00BCB7E4068FDAAB74497F5A606AA1E67ED13A30C851AFF014A4F1C7DB9AB629BB693';
e = '010001';
</script>
<script>!function(e,t,r,n,c,a,l){function i(t,r){return r=e.createElement('div'),r.innerHTML='<a href="'+t.replace(/"/g,'&quot;')+'"></a>',r.childNodes[0].getAttribute('href')}function o(e,t,r,n){for(r='',n='0x'+e.substr(t,2)|0,t+=2;t<e.length;t+=2)r+=String.fromCharCode('0x'+e.substr(t,2)^n);return i(r)}try{for(c=e.getElementsByTagName('a'),l='/cdn-cgi/l/email-protection#',n=0;n<c.length;n++)try{(t=(a=c[n]).href.indexOf(l))>-1&&(a.href='mailto:'+o(a.href,t+l.length))}catch(e){}for(c=e.querySelectorAll('.__cf_email__'),n=0;n<c.length;n++)try{(a=c[n]).parentNode.replaceChild(e.createTextNode(o(a.getAttribute('data-cfemail'),0)),a)}catch(e){}}catch(e){}}(document);</script></script>

n 值随每页重新加载而变化。

我从自由职业者那里获得了我的网页模板,并且首先要在发布之前检查它,这对我来说很奇怪,因为我无法在data-cfemail.__cf_email__这样的代码中找到属性也没有像{ {1}}

请告诉我它的作用?它可能是恶意的吗?必须测试它做什么?

2 个答案:

答案 0 :(得分:3)

代码以

开头
e /*document*/ .getElementsByTagName('a')

因此,它获取页面上的所有链接,迭代它们,如果链接包含

/cdn-cgi/l/email-protection#

然后呢:

a.href='mailto:'+o(a.href,t /*the position of the upper inside the link*/+l.length /*the length of the upper*/)

代码中的另一个循环迭代

e.querySelectorAll('.__cf_email__')

并将这些元素文本替换为:

o( 
  a /* one of the upper elems*/ .getAttribute('data-cfemail'),
  0
 )

所以有趣的是实际上是神秘的o功能。迭代传递的字符串并转换2byte对:

String.fromCharCode( '0x'+e.substr(t,2) /*the pair*/^n );

而n是:

n='0x'+e.substr(t,2)|0

所以基本上它基于前两个字节执行xor操作。所以这个:

A1 B2 C3 D4

将导致

B2 ^ A1
C3 ^ A1
D4 ^ A1

然后使用小技巧将此结果缩短为动态URL,然后返回。所以基本上这是某种电子邮件保护,它使用非常基本的xor加密来加密内容。就是这样。

要测试该行为,只需在链接到以下内容的链接中添加链接:

//the start link we need:
/cdn-cgi/l/email-protection#
//the xor encryption disabler as ( a ^ 0 = a)
00
//test@example.com in hex
74657374406578616d706c652e636f6d

你会看到它会链接到test@example.com。

Test environment

所以我可以得出结论:这个脚本是一种无害的电子邮件链接加密,如果你没有使用这种加密的任何链接或文本,它可能是早期版本遗留下来的一些代码。

我没有发现任何迹象表明两个变量n和e改变了任何东西......

答案 1 :(得分:0)

对不起,是不是来自mr.robot复活节彩蛋网站? http://www.conficturaindustries.com/

screen from site with this script

您确定这是您的代码吗?

它的电子邮件编码sript,如果你查看结果页面代码,你将找不到任何电子邮件,只有当你专注于视觉网站显示时它才会作为链接提供