首页
社区
课程
招聘
[原创] KCTF 2019 Q3 第二题 Writeup by Nu1L
2019-9-25 21:58 5588

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

2019-9-25 21:58
5588

第二题

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虚拟机自动化脱壳的方法

收藏
免费 1
打赏
分享
最新回复 (1)
雪    币: 441
活跃值: (419)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
叶小北 2019-10-4 21:44
2
0
请教下师傅是怎么解密的
游客
登录 | 注册 方可回帖
返回