KCTF 2019 Q3 第二题 Writeup by Nu1L
2019-09-26 13:41:30 Author: bbs.pediy.com(查看原文) 阅读量:115 收藏

[原创] KCTF 2019 Q3 第二题 Writeup by Nu1L

14小时前 35

[原创] 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

[培训]《安卓高级研修班》彻底搞定函数抽取型壳!现在报名得源码和安卓8.1脱壳机!10月20日深圳专场不见不散!


文章来源: https://bbs.pediy.com/thread-254709.htm
如有侵权请联系:admin#unsafe.sh