root-me.org中WebClient – Native code的解题思路

昨天研究了研究CTF,然后顺便找了找在线练习的网站啥的,然后发现root-me.org挺有意思的,顺便点开Web客户端的练习,里面有个,Native-code啥啥的,用脚丫子想应该也是考js的,然后我一想我js这么牛逼就拿他练手吧!于是点开链接
http://www.root-me.org/en/Challenges/Web-Client/Javascript-Native-code
紧接着弹出了个对话框,
rootme-nc01

我一看这还不简单,查看源码然后秒秒钟的事儿么!然后一打开源码我傻了:

<script language="javascript">
É=-~-~[],ó=-~É,Ë=É<<É,þ=Ë+~[];Ì=(ó-ó)[Û=(''+{})[É+ó]+(''+{})[ó-É]+([].ó+'')[ó-É]+(!!''+'')[ó]+({}+'')[ó+ó]+(!''+'')[ó-É]+(!''+'')[É]+(''+{})[É+ó]+({}+'')[ó+ó]+(''+{})[ó-É]+(!''+'')[ó-É]][Û];Ì(Ì((!''+'')[ó-É]+(!''+'')[ó]+(!''+'')[ó-ó]+(!''+'')[É]+((!''+''))[ó-É]+([].$+'')[ó-É]+'''+''+'\'+(ó-É)+(É+É)+(ó-É)+'\'+(þ)+(É+ó)+'\'+(ó-É)+(ó+ó)+(ó-ó)+'\'+(ó-É)+(ó+ó)+(É)+'\'+(ó-É)+(É+ó)+(þ)+'\'+(ó-É)+(É+ó)+(É+ó)+'\'+(ó-É)+(ó+ó)+(ó-ó)+'\'+(ó-É)+(ó+ó)+(É+É)+'\'+(É+ó)+(ó-ó)+'\'+(É+É)+(þ)+'\'+(ó-É)+(ó-ó)+(É+ó)+'\'+(ó-É)+(É+ó)+(ó+ó)+'\'+(ó-É)+(ó+ó)+(É+É)+'\'+(ó-É)+(ó+ó)+(É)+'\'+(ó-É)+(É+É)+(É+ó)+'\'+(ó-É)+(þ)+(É)+'\'+(É+É)+(ó-ó)+'\'+(ó-É)+(É+ó)+(É+É)+'\'+(ó-É)+(É+É)+(É+ó)+'\'+(É+É)+(ó-ó)+'\'+(ó-É)+(É+ó)+(É+ó)+'\'+(ó-É)+(É+ó)+(þ)+'\'+(ó-É)+(ó+ó)+(É+É)+'\'+(É+É)+(ó-ó)+'\'+(ó-É)+(É+É)+(É+É)+'\'+(ó-É)+(É+É)+(É+ó)+'\'+(É+É)+(ó-ó)+'\'+(ó-É)+(ó+ó)+(ó-ó)+'\'+(ó-É)+(É+É)+(ó-É)+'\'+(ó-É)+(ó+ó)+(ó)+'\'+(ó-É)+(ó+ó)+(ó)+'\'+(ó-É)+(É+É)+(É+ó)+'\'+(É+É)+(þ)+'\'+(É+ó)+(ó-É)+'\'+(þ)+(ó)+'\'+(ó-É)+(É+ó)+(ó-É)+'\'+(ó-É)+(É+É)+(ó+ó)+'\'+(É+ó)+(ó-ó)+'\'+(ó-É)+(É+É)+(ó-É)+'\'+(þ)+(É+ó)+'\'+(þ)+(É+ó)+'\'+(É+É)+(þ)+'\'+(ó-É)+(ó+ó)+(É+É)+'\'+(ó-É)+(É+ó)+(þ)+'\'+(ó-É)+(ó+ó)+(É+É)+'\'+(ó-É)+(É+ó)+(þ)+'\'+(ó+ó)+(ó-É)+'\'+(ó+ó)+(É)+'\'+(ó+ó)+(ó)+'\'+(ó-É)+(É+ó)+(É+É)+'\'+(ó-É)+(É+ó)+(þ)+'\'+(ó-É)+(É+ó)+(É+É)+'\'+(É+É)+(þ)+'\'+(É+ó)+(ó-É)+'\'+(ó-É)+(þ)+(ó)+'\'+(ó-É)+(É+É)+(ó-É)+'\'+(ó-É)+(É+ó)+(É+É)+'\'+(ó-É)+(É+É)+(É+ó)+'\'+(ó-É)+(ó+ó)+(É)+'\'+(ó-É)+(ó+ó)+(É+É)+'\'+(É+ó)+(ó-ó)+'\'+(É+É)+(þ)+'\'+(ó-É)+(É+É)+(É)+'\'+(ó-É)+(ó+ó)+(É)+'\'+(ó-É)+(É+É)+(ó-É)+'\'+(ó-É)+(ó+ó)+(ó+ó)+'\'+(ó-É)+(É+ó)+(þ)+'\'+(É+É)+(þ)+'\'+(É+ó)+(ó-É)+'\'+(þ)+(ó)+'\'+(ó-É)+(þ)+(É+ó)+'\'+(ó-É)+(É+É)+(É+ó)+'\'+(ó-É)+(É+ó)+(É+É)+'\'+(ó-É)+(ó+ó)+(ó)+'\'+(ó-É)+(É+É)+(É+ó)+'\'+(ó-É)+(þ)+(ó)+'\'+(ó-É)+(É+É)+(ó-É)+'\'+(ó-É)+(É+ó)+(É+É)+'\'+(ó-É)+(É+É)+(É+ó)+'\'+(ó-É)+(ó+ó)+(É)+'\'+(ó-É)+(ó+ó)+(É+É)+'\'+(É+ó)+(ó-ó)+'\'+(É+É)+(þ)+'\'+(ó-É)+(É+É)+(ó+ó)+'\'+(ó-É)+(É+É)+(ó-É)+'\'+(ó-É)+(É+ó)+(ó-É)+'\'+(ó-É)+(É+ó)+(É+É)+'\'+(É+ó)+(ó+ó)+'\'+(É+ó)+(ó+ó)+'\'+(É+ó)+(ó+ó)+'\'+(É+É)+(þ)+'\'+(É+ó)+(ó-É)+'\'+(þ)+(ó)+'\'+(ó-É)+(þ)+(É+ó)+''')())()
</script>

卧槽!这尼玛都啥!!然后昨天搞了搞没搞明白就放弃了,今天闲着无聊又打开看了看,直觉告诉我突破点在元算符,首先找到了两个分号,把他们隔开。
rootme-nc02
目测É、ó、Ë、þ、Ì都有自己的值,我alert一下试试。
rootme-nc03
可以看到很明显就是一坨怪异的字符通过一些怪异的运算符得到了一些怪异的值,现在知道了Ì大概就是执行啥啥代码的意思,然后我就索性把后面那俩Ì全换掉看能出来啥。当然文件末尾也要删除对应的一坨括号())(),最后出现了这么一堆东西。
rootme-nc04

return'1417516016215715516016450471051561641621451724015414540155157164401441454016014116316314547517315114650141757547164157164157616263154157154475117314115414516216450471421621411661574751731751451541631451731411541451621645047146141151154565656475173175'

然后我直接alert出来,

<script>
alert('1417516016215715516016450471051561641621451724015414540155157164401441454016014116316314547517315114650141757547164157164157616263154157154475117314115414516216450471421621411661574751731751451541631451731411541451621645047146141151154565656475173175');
</script>

rootme-nc05
最后结果就很明显了,嗯。还是有点意思的~

发表评论