首页
社区
课程
招聘
[原创]第三题 影分身之术
2019-3-20 22:16 3582

[原创]第三题 影分身之术

2019-3-20 22:16
3582

(作者:Pizza)
delphi程序内置webbroswer, 通过工具获取网页html代码.

<HTML>
    <HEAD>
        <SCRIPT>
            function sptWBCallback(spt_wb_id, spt_wb_name, optionstr) {
                url = '#sptWBCallback:id=';
                url = url + spt_wb_id + ';eventName=' + spt_wb_name;
                if (optionstr) url = url + ';params=optionstr';
                location = url;
            }
            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, {}))
        </SCRIPT>
    </HEAD>
    <BODY style="OVERFLOW: hidden; BORDER-TOP: 0px; BORDER-RIGHT: 0px; BORDER-BOTTOM: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; BORDER-LEFT: 0px; PADDING-RIGHT: 0px"
    scroll=no>
        CTF 2019?
        <CENTER>
            <BR>
            <BR>
            <BR>
            <INPUT id=pswd size=39>
            </INPUT>
            <BR>
            <BR>
            <BR>
            <INPUT onclick=ckpswd(); type=button value=checkMyFlag>
        </CENTER>
    </BODY>

</HTML>

eval执行后得到

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";
    }
}

当输入以simpower91为开头时, 以剩余部分为参数调用sptWBCallback.

 

查阅资料得知sptWBCallback用于程序与网页交互.

3.2、让其中的元素执行webbrowser之外的delphi代码
本来,这有很复杂的解决办法,但那部分属于ATL的知识比较难掌握,因此绕了一下:
让那些需要执行delphi的HTML元素,调用一个函数叫做triggerExEvent,参数是HTML元素的名称,然后是若干参数。
triggerExEvent是javascript函数,有不确定个参数,但第一个肯定是表示元素的名称。 triggerExEvent将参数组成字符串,然后前面冠以"#OnTriggerExEvent:",作为url,然后导航。
在webbrowser的onNavigator2事件里,判断url中是否包含"#OnTriggerExEvent:",如果包含怎作如下处理:
a、cancel这次导航;
b、将"#OnTriggerExEvent:"之后的信息截取,作为参数传递给webbrowser的新增一个事件OnTriggerExEvent事件,其参数有两个:1、控件名称;2、一个字符串参数。
这样,用户可以在OnTriggerExEvent事件里处理HTML的点击等事件了
例如,我为webbrowser派生新类,叫做webbrowserEx,它有一个事件叫做OnTriggerExEvent
有个js文件包含这样的函数:
function triggerExEvent(cmpnt_id,event_nm,optionstr)
{
url='#triggerExEvent:id=';
url=url+cmpnt_id+';eventnm='+event_nm;
if(optionstr) url=url+';params=optionstr';
location=url;
}

 

搜索字符串#sptWBCallback:定位到sub_492088, 程序解析出参数后下访问断点跟踪跟进了虚拟机. 算法大概是

map(lambda x:(ord(x)+0x7F) & 0xFF, data) == [0xe0, 0xb0, 0xb1, 0xb2]

flag:simpower91a123


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞1
打赏
分享
最新回复 (1)
雪    币: 2415
活跃值: (458)
能力值: ( LV5,RANK:76 )
在线值:
发帖
回帖
粉丝
jiaduo 1 2019-3-25 15:32
2
0
跟踪到了虚拟机,后面的步骤卡住了。。
游客
登录 | 注册 方可回帖
返回