正方教务系统换数据库服务器,自己山寨正方教务系统数据库连接解密程序

此文也就是给木有太多.NET编程基础的同学一个最最最简单的思路,遇到加密的连接字符串、加密的密码的时候怎样用一种比较简单的方式去解决掉他。

突然会去看这个东西是因为乌云zone上有人发了一个求助:

imgpxy.php?url=gpj.610772041172403102%2F4031_htnom%2Fserutcip%2Fmoc.gidkcah.1cip%2F%2F%3Aptth

此洞主还绕了半圈去联系到了我,然后吗预感觉得不会特别特别难,就当再学习下看看了。

相关的dll:zjdx.dll,文件大小:13.3 MB (14,036,992 字节),反编译一看内容就是正方的东西。

随便找一个可以反编译C#的DLL的工具就可以开始了(为什么是C#?因为正方就是.NET写的啊!),不多说。直入主题。

首先肯定先找和dll名字一样的命名空间内的信息:

imgpxy.php?url=gpj.542382041172403102%2F4031_htnom%2Fserutcip%2Fmoc.gidkcah.1cip%2F%2F%3Aptth

里面内容非常的多,肯定找重点,既然要找和数据库连接相关的信息,肯定先找涉及登录的页面,比如过去出过洞的default5:

imgpxy.php?url=gpj.524182041172403102%2F4031_htnom%2Fserutcip%2Fmoc.gidkcah.1cip%2F%2F%3Aptth

到这什么都不用想,直接先奔往打开页面必须要执行的方法:private void Page_Load(object sender, EventArgs e)

里面大大的一句:OracleConnection oracleConnection = new OracleConnection(ConfigurationSettings.get_AppSettings().get_Item("MyConn") + Module1_sjf.jiemi(ConfigurationSettings.get_AppSettings().get_Item("MyPwd"), Module1_sjf.str_jm));

所以从这看出,数据库连接字符串的构成主要是web.config里面的MyConn和MyPwd。

这里的MyPwd是作为参数传递到 “jiemi”这个方法里面的(一看就是解密啊),然后在调用的这地方就可以看见有两个参数,先看看jiemi方法的定义(点击jiemi就可以跳转过去了):public static string jiemi(string PlainStr, string key)

第一个参数不说了,第二个参数肯定是解密的密钥了。

再点击Module1_sjf.str_jm的str_jm看看:public static string str_jm = "Acxylf365jw";

到这就基本可以知道怎么解密了。先看一下原版的jiemi方法:public static string jiemi(string PlainStr, string key)

{

int num = 1;

checked

{

if (Strings.Len(PlainStr) % 2 == 0)

{

string text = Strings.StrReverse(Strings.Left(PlainStr, (int)Math.Round((double)Strings.Len(PlainStr) / 2.0)));

string text2 = Strings.StrReverse(Strings.Right(PlainStr, (int)Math.Round((double)Strings.Len(PlainStr) / 2.0)));

PlainStr = text + text2;

}

int arg_6C_0 = 1;

int num2 = Strings.Len(PlainStr);

string text5;

for (int i = arg_6C_0; i <= num2; i++)

{

string text3 = Strings.Mid(PlainStr, i, 1);

string text4 = Strings.Mid(key, num, 1);

if ((Strings.Asc(text3) ^ Strings.Asc(text4)) < 32 | (Strings.Asc(text3) ^ Strings.Asc(text4)) > 126 | Strings.Asc(text3) < 0 | Strings.Asc(text3) > 255)

{

text5 += text3;

}

else

{

text5 += StringType.FromChar(Strings.Chr(Strings.Asc(text3) ^ Strings.Asc(text4)));

}

if (num == Strings.Len(key))

{

num = 0;

}

num++;

}

return text5;

}

}

这个方法里面调用了个别VB库里面才有的东西。程序本身出了一些简单的奇偶判断就是一些位运算,想看懂可能不难,但是想理解整个算法原理、为什么可逆,也不在我们今天讨论的范围内了。

在使用上面这段代码之前还有一些工作:

1.添加引用Microsoft.VisualBasic:

imgpxy.php?url=gpj.665923041172403102%2F4031_htnom%2Fserutcip%2Fmoc.gidkcah.1cip%2F%2F%3Aptth

2.修改一处代码:

text5 += Strings.Chr(Strings.Asc(text3) ^ Strings.Asc(text4)).ToString(); //其实只是避免再添加其它引用,反正都是string,其它个别要修改的地方自己看看咯,其实其它不改也可以。

也可以完全修改成只用.NET默认库里面的东西,这个不提,相信大家都可以。

那位洞主给出的加密后密码是这样的:Z%+6*2l~q2.

而key已经知道是Acxylf365jw(个人感觉这个可能针对不同版本、不同授权可能会有不同,如果哪天只是获取到了web.config,未必可以正确进行解密的工作),附上一个解密后的截图(原帖已经有人发出来了):

imgpxy.php?url=gpj.461533041172403102%2F4031_htnom%2Fserutcip%2Fmoc.gidkcah.1cip%2F%2F%3Aptth

实际上整个过程预计3到5分钟应该可以完成了,对于大家来说也不是是没特别难的事情,就当一个小小的交流!

改后的程序也附上吧,虽然没什么特别大的意义:public static string jiemi(string PlainStr, string key)

{

int num = 1;

checked

{

if (Strings.Len(PlainStr) % 2 == 0)

{

string text = Strings.StrReverse(Strings.Left(PlainStr, (int)Math.Round((double)Strings.Len(PlainStr) / 2.0)));

string text2 = Strings.StrReverse(Strings.Right(PlainStr, (int)Math.Round((double)Strings.Len(PlainStr) / 2.0)));

PlainStr = text + text2;

}

int num2 = Strings.Len(PlainStr);

string text5="";

for (int i = 1; i <= num2; i++)

{

string text3 = Strings.Mid(PlainStr, i, 1);

string text4 = Strings.Mid(key, num, 1);

if ((Strings.Asc(text3) ^ Strings.Asc(text4)) < 32 | (Strings.Asc(text3) ^ Strings.Asc(text4)) > 126 | Strings.Asc(text3) < 0 | Strings.Asc(text3) > 255)

{

text5 += text3;

}

else

{

text5 += Strings.Chr(Strings.Asc(text3) ^ Strings.Asc(text4)).ToString();

}

if (num == Strings.Len(key))

{

num = 0;

}

num++;

}

return text5;

}

}

PS:这两天发帖那哥们不见人了,莫非已经?…………

本文到此结束。

无节X吐槽:

1#

wefgod (求大牛指点) | 2013-04-26 15:47

@xsser 求感谢,哈

2#

啦绯哥 | 2013-04-26 16:55

推荐加精

3#

pangshenjie (whoami) | 2013-04-26 17:04

其实几行代码就搞定了。直接调用原版的zjdx.dll 的jiemi()函数机可以了。using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using zjdx; //要添加一下这个引用,在vs中吧zjdx.dll添加进去

using System.Linq;

using System.Text;

using Microsoft.VisualBasic;

using System;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

zjdx.mmtp test=new zjdx.mmtp();

Console.WriteLine("----- Fuck Zf ----\n");

string inpt = Console.ReadLine();

string outprint = test.jiemi(inpt, "Encrypt01"); //Encrypt01是那个解密的向量Key

Console.WriteLine(outprint);

}

}

}

其实用c#写核心也超不过5行就ok了,不过还是赞一个撸主。。。

4#

wefgod (求大牛指点) | 2013-04-26 17:19

@pangshenjie 那个dll里面的密码,和你这个程序里面的不一样啊。还是要懂去找才可以,就怕他的每个dll不一样。不过好像之前那个帖子把解密的贴出来好像就是你啊。莫非其它dll里面的key也都是一样的吗?

5#

wefgod (求大牛指点) | 2013-04-26 17:23

@pangshenjie 其实引用dll吗确实很好。但是有的东西自己找找可能还是相对比较好点,看过详细的方法比较好理解。另外,using Microsoft.VisualBasic; 在调用那个zjdx.dll的时候还是要添加这个引用吗? 而且我手上的dll,Runtime: .NET 1.1 。在4.0还不知道可以调用吗,我这是VS2008

6#

冷冷的夜 (从前有个人,他不喜欢我;后来,他死了) | 2013-04-26 17:29

@wefgod 不用调用dll,直接把dll方法copy就好了,以前写过个,不知道丢那去了

7#

老树 | 2013-04-26 20:30

534539198  求交流

8#

wefgod (求大牛指点) | 2013-04-26 20:43

@冷冷的夜 我文章上面就是那么说的。不过最好简单修改几个地方。

9#

wefgod (求大牛指点) | 2013-04-26 20:45

@老树 王老师,我木有挂科……

10#

pangshenjie (whoami) | 2013-04-26 21:04

@wefgod 正方所有的key都是通用的,其实这种情况一般能搞到数据库直接下载bin目录下的相关dll 就可以,下载回来还是要分析一下看看具体是怎么算的,我说直接引用dll 某些情况下可能比较省事~不过思路差不多,直接copy出来也可以,如果算法设计dll其他地方的一些方法的话直接引用就方便了

11#

pangshenjie (whoami) | 2013-04-26 21:06

@wefgod 引用的时候要在工程中添加一下,我用4.0的可以成功,vs2010

12#感谢(1)

Lmy (话说名字太长容易被人关注) | 2013-04-26 21:20

@wefgod @pangshenjie Python3的飞过def squarer(value, key):

if len(value) % 2 == 0:

p = int(round(len(value)) / 2.0)

value = reversed(value[-p:]) + reversed(value[:p])

k = 0

result = ''

for v in value:

if ord(v) ^ ord(key[k]) < 32 | ord(v) ^ ord(key[k]) > 126 | ord(v) < 0 | ord(v) > 255:

result += v

else:

result += chr(ord(v) ^ ord(key[k]))

k = 0 if k == len(key) else k + 1

return result

if __name__ == '__main__':

print(squarer('Z%+6*2l~q2.', 'Acxylf365jw'))

13#

wefgod (求大牛指点) | 2013-04-26 21:26

@pangshenjie 4.0可以成功啊,不过为了缩减程序的体积,其实比较好还是自己把那部分弄出来。调用dll肯定要在工程里面添加引用的,这个自不必说。印象中好像闪电大牛倒是有写过一个工具,集成了这些所有相关的解密

14#

廷廷 (想法最重要) | 2013-04-27 06:27

@wefgod 用来解密正方数据库?不懂啊

15#

wefgod (求大牛指点) | 2013-04-27 08:28

@廷廷 正方的数据库连接是加密的,在web.config

16#

wefgod (求大牛指点) | 2013-04-27 08:28

@Lmy 感谢了一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值