[原创]crackMe by simpower91
2018-10-20 18:28
5651
[原创]crackMe by simpower91
团队名称:战神伽罗
团长QQ:35769382
参赛题目:crackMe by simpower91
答案:kanxueCTF2018bySimpower91
设计说明:
1.首先将密码封装在javascript中,通过javascript将自身进行加密。
2.通过简单的汇编代码变形算法
(加减固定数值)
,将javascript代码编译到可执行区域,通过指令跳转和对硬编码的变形对javascript代码进行恢复。
3.将恢复的代码注入到IE内核当中,并显示出来,没有壳。
破解思路
1.静态文本编辑器可以看到一部分javascript代码。首先用od加载,搜索字符,可以看到一部分javascript代码,把代码复制出来之后发现不完整,启动起来之后,会将主要代码擦除。
2.然后在这附近下断点,往下滚动,可以看到函数内部有一些奇怪的指令变形,这就是存放剩余javascript的地方了:
3.在变形指令跳回处下断,单步跟踪之后,找到javascript的剩余部分:
发现jmp下面有好多很大的数字,怀疑是字符串做了变形,反复对比结尾(上一张图片),结尾有个 7F 00,估计就是字符串,于是将这段数据每个字节-7F,果然得到了ASCII码,就是剩下的javascript代码。
跟前半部分组合起来就是:
eval(function(s,p,a,c,k,e,d){for(i=0;i<k.length;i++)k[i]=k[i].replace(s, '');e=function(c){eval(document.write(String.fromCharCode(13)));return(eval(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(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('$$$','8 4() { 1 = 6.3.e.f; 9 (1 == "b") { 2("5!") } 7 { 2("g!<" + 1 + "> a d c 0 ;-)") }}',62,17,'GUID$$$@a$$$@alert$$$@all$$$@ckpswd$$$@congratulations$$$@document$$$@else$$$@function$$$@if$$$@is$$$@kanxueCTF2018bySimpower91$$$@my$$$@not$$$@pswd$$$@value$$$@wrong$$$'.split('@'),0,{}))
4.javascript解密:
用记事本编写解密代码:
<textarea id="enc"></textarea><br>
<input type=submit onclick="jsdecode()">
<script>
function jsdecode() {
var code = enc.value;
code = code.replace(/^eval/, '');
decode = eval(code);
document.write(decode);
}
</script>
保存为html文件,然后用浏览器打开,即可解密。
得到真正的javascript代码:
function ckpswd() {
a = document.all.pswd.value;
if (a == "kanxueCTF2018bySimpower91") {
alert("congratulations!")
} else {
alert("wrong!<" + a + "> is not my GUID ;-)")
}
}
密码就在里面了。
题目运行效果:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2018-12-21 12:04
被kanxue编辑
,原因:
上传的附件: