xhao屁孩 发表于 2022-11-13 01:16

htpidk 发表于 2022-11-13 22:56

本帖最后由 htpidk 于 2022-11-14 01:03 编辑


关键的密码对比函数


因为调用的是虚函数,静态调试不知道虚函数地址,所以用OD得到这个函数的地址


通过传参可以确定进入箭头分支



这里多点几个函数进去就能看到很多调用COM方法时的代码,所以能确定是用的某个COM组件里的方法来对比密码,其实到这里基本就能确定调用的是ScriptControl对象了

知道这些后用OD调试简单很多,下cocreateinstance断点,对照COM对象的CLSID,确定接口iunknown的地址,然后在这个接口第一个方法queryinterface下断,找到idispatch的接口地址,实际用到的IScriptControl是继承自idispatch接口的,在虚函数表里第27和29个偏移处的addcode和executestatement两个添加JS代码的方法下断,最后断在executestatement,在这个方法下断,段下后就能看到JS代码
function i(key) {
    return g(key)
}

function g(_0x5d078) {
    var _0x2cede8 = '%E5%8A%A0%E6%B2%B9%E5%99%A2!';
    var _0x147883 = _0x5d078['split']('i');
    var _0x521613 = _0x5d078['length'];
    if (_0x521613 == (0x8ce98 ^ 0x8ce9e)) {//0x8ce98 ^ 0x8ce9e=6
      _0x2cede8 = '%E6%81%AD%E5%96%9C%E4%BD%A0';
      try {
            console['log'](kk);
            if (_0x147883 == '') {//_0x521613=6
                _0x2cede8 = '%E6%88%90%E5%8A%9F%E4%BA%86%E4%B8%80%E5%8D%8A!';
            }
      } catch (_0x43299d) {
            if (_0x147883['length'] > (0x8ecbc ^ 0x8ecbc) && _0x147883 == 'e') {//0xf287c ^ 0xf287d=1
                _0x2cede8 = _0x2cede8 + '%E6%88%90%E5%8A%9F%E4%BA%86!';
            }
      }
    }
    return _0x2cede8;
}
这就很好明白了,首先密码长度要为6,然后密码用i分割取到数组,第二个字符要为e,所有满足这个条件的密码都可以,另外流程会触发异常进入catch里(console.log和kk未定义?),例如2iei34


ShuShuLaiLo 发表于 2022-11-13 19:51

L"0x5d078['length'];
if(_0x521613==(0x8ce98^0x8ce9e))
{
        _0x2cede8='%E6%81%AD%E5%96%9C%E4%BD%A0';
        try
        {console['log'](kk);
        if(_0x147883=='')
        {_0x2cede8='%E6%88%90%E5%8A%9F%E4%BA%86%E4%B8%80%E5%8D%8A!';}}
catch(_0x43299d)
{
        if(_0x147883['length']>(0x8ecbc^0x8ecbc)&&_0x147883=='e')
        {_0x2cede8=_0x2cede8+'%E6%88%90%E5%8A%9F%E4%BA%86!';}
}
}
return _0x2cede8;
}"


译文:
L"0x5d078['length'];
if(_0x521613== 6 )
{
        _0x2cede8='恭喜你';
        try
        {        console['log'](kk);
                if(_0x147883=='')
                {_0x2cede8='成功了一半!';}
        }
        catch(_0x43299d)
        {
                if(_0x147883['length']> 0 &&_0x147883=='e')
                {_0x2cede8=_0x2cede8+'成功了!';}
        }
        }
        return _0x2cede8;
        }"

到这一步咋办呢?{:1_904:}

jdjking 发表于 2022-11-13 10:12

fateygyyan 发表于 2022-11-13 10:33

stop179 发表于 2022-11-13 10:33

温总 发表于 2022-11-13 10:47

易语言=中文版VB

weikun444 发表于 2022-11-13 11:10

只出来个恭喜你,没有成功了字样,估计是后便还有计算,无奈,不懂算法{:1_909:}

DarkLInkBrit 发表于 2022-11-13 12:11

看起来有多重判断 下载试试:handshake

liuhui12138 发表于 2022-11-13 12:12

尝试一下

lemon123654 发表于 2022-11-13 12:34

hkhkhk 发表于 2022-11-13 13:16

如何从0学习呢,有没有推荐的课程
页: [1] 2 3 4 5 6
查看完整版本: 易语言的第一天CM