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