-
-
[原创] KCTF 2019 Q3 第二题 Writeup by Nu1L
-
2019-9-25 21:58
5209
-
[原创] KCTF 2019 Q3 第二题 Writeup by Nu1L
第二题
Delphi程序,有部分符号
又是那个JS+VM
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(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('a 6() { f="n"; 3 = 8.5.l.q; c (3.d(f) ==0) { g=3.h; b=f.h; o(3.p(b,g)); } 9 { 4("r!<" + 3 + "> e j i 2 ;-)"); m "1"; }}a k(){ 4("7!");}',62,28,'|1234|GUID|a|alert|all|ckpswd|congratulations|document|else|function|i|if|indexOf|is|key|l|length|my|not|ok|pswd|return|simpower91|sptWBCallback|substring|value|wrong'.split('|'),0,{}))
解密代码
function ckpswd() {
key="simpower91";
a = document.all.pswd.value;
if (a.indexOf(key) ==0) {
l=a.length;
i=key.length;
sptWBCallback(a.substring(i,l));
} else {
alert("wrong!<" + a + "> is not my GUID ;-)");
return "1234";
}
}
function ok(){ alert("congratulations!");}
看上去是simpower91+Flag,但是好像不对,怀疑运行时改了
经过静态分析,js代码被替换过,sim被替换成了Sim,所以是Simpower91+flag
patch反调试,程序通过clts异常触发SEH,进入vmp,在一个回调函数的位置下断点,可以看到vm的逻辑,程序先比较后面的长度是否为4,然后加0x7f,再与clts下面的机器码的值进行比较,xor清零,最后得到Simpower91a321
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法