三种方法还原ASP.NET可逆加密内容

  • A+
所属分类:逆向工程

0x00 
    在进行安全测试的时候经常遇到ASP.NET平台的各类系统,它们加密手段有强有弱。有的只加密用户信息,有的则将数据库连接字串也进行了加密。以前不熟悉ASP.NET的时候有时解密一个连接字串都要花费数小时。下面介绍三种方法(由难到易),以便快速解密加密的内容,适合新手。 

0x01 
    工具:IIS(要配置支持ASP.NET)、.NET Reflector、记事本、任意浏览器…… 
    要求:一定的代码阅读能力 

0x02 
    方法一(适用于能看懂代码又能写代码的童鞋) 
.NET Reflector定位至解密函数读懂代码,用任意一门编程语言编写同样解密算法的工具。(不详述此方法,因此方法跟自身的代码阅读能力、逆向跟踪能力有关。若是解密算法调用函数太多那么会消耗不少时间)

    方法二(适用于能读代码但不会写代码的童鞋) 
示例: 
  .NET Reflector定位至解密函数 
三种方法还原ASP.NET可逆加密内容
  查看无复杂的调用,只有string str2 = str_key;中的str_key是未知的。跟踪得到str_key是zysoftvschool。 
  复制整个函数到demo.aspx,添加要解密的字符串。demo.aspx内容如下: 
<%@ Page Language="C#" ValidateRequest="false" %> 
<script runat ="server" > 
//===============直接复制 .NET Reflector中看到的函数================ 
public static string Decrypt(string str) 

    string str2 = "zysoftvschool"; 
    string str3 = ""; 
    int num5 = 0; 
    if (str == "") 
    { 
        return ""; 
    } 
    int length = str2.Length; 
    if (length == 0) 
    { 
        str2 = "Think Space"; 
    } 
    int num2 = 0; 
    int num3 = Convert.ToInt32(str.Substring(0, 2), 0x10); 
    int startIndex = 2; 
    while (true) 
    { 
        try 
        { 
            num5 = Convert.ToInt32(str.Substring(startIndex, 2), 0x10); 
        } 
        catch (Exception) 
        { 
        } 
        int num6 = num5 ^ Convert.ToInt32(str2[num2]); 
        if (num6 <= num3) 
        { 
            num6 = (0xff + num6) - num3; 
        } 
        else 
        { 
            num6 -= num3; 
        } 
        str3 = str3 + Convert.ToChar(num6); 
        num3 = num5; 
        startIndex += 2; 
        if (num2 < length) 
        { 
            num2++; 
        } 
        else 
        { 
            num2 = 1; 
        } 
        if (startIndex >= str.Length) 
        { 
            return str3; 
        } 
    } 

/=========================================================== 
</script> 
<% 
//调用上面的解密函数Decrypt 
Response.Write(Decrypt("要解密的字串写这里")); 
%>

浏览器访问,得到密码:***ccom102668 
三种方法还原ASP.NET可逆加密内容 

    方法三(适用于代码读不了更写不了的童鞋) 
示例: 
  .NET Reflector定位至解密函数,解密函数调用非常复杂,跟了几步思路也跟丢了…… 
三种方法还原ASP.NET可逆加密内容 
对付这类的加密那就使用最简单的方法吧——直接调用dll内的解密函数。调用方法:命令空间.类.方法 
三种方法还原ASP.NET可逆加密内容 
注意:本地解密需要把调用的xxx.dll放至Web目录的bin文件夹中!如果将写好的脚本放到目标Web目录则可以直接执行。 
Demo: 
<%@ Page Language="C#" ValidateRequest="false" Debug="true" %> 

<script runat ="server" > 
public static string Decrypt(string str) 

  string str3 = ""; 
  //下面是调用方法 
  str3 = Newcapec.eCard.Utility.ConnectionInfo.DecryptDBConnectionString(str); 
  return str3; 

</script> 
<% 
Response.Write(Decrypt("AQAAANCMnd8BFdERjHoAwE/Cl 

+sBAAAAECVqcj9oCEGaJ0mZSN5kGAQAAAACAAAAAAAQZgAAAAEAACAAAAAhqwK0FIppu3zaId41oqAahOfebXIgpn6Y

9wtCSh66xwAAAAAOgAAAAAIAACAAAAA9kwoU8mJNSwcoouLxVGh9PIU8RLsqFehwf0nmMVUeamAAAABdTYklOfQhsR4

l8obq/PAZfLp12Ff1GvHiJBK1C7lJzi8d0dgs51TZvp5fOc0C2Ok6qqtXXcx07i9KlMGr1ETF23vFi0oE5wHy36bjGu

0OvTo9psUMFia7wVLkchDkDoRAAAAAULGxt/L13wLHBMpv85P+ruAczDqo5NG8ufk 

+F3VVaEdPr7PvFK3OeHYtMOlLRSTBZk6sKilhsQRuNNM4z0GouA==")); 
%>


浏览器中访问得到解密后内容:Data Source=orcl;User Id=ccense;Password=ecard;min pool size=1;max pool size=50;Pooling=true 
三种方法还原ASP.NET可逆加密内容 

0x03 总结 
    三种解密方法中第三种方法最为省时省力,且对那些绑定机器的加密最为简单有效。但是还是建议多使用第一种方法,虽耗时耗力但可以学到更多东西。

1#看风者 | 2014-09-12 12:47

不顶没天理

 

2#insight-labs | 2014-09-12 12:52

赞一个

 

3#梧桐雨 | 2014-09-12 13:01

好帖!顶。

 

4#c4bbage | 2014-09-12 13:06

赞一个

 

5#Vigoss_Z | 2014-09-12 13:33

我来添一个吧。

还有一种情况是使用.NET自带的加密方法加密链接字符串

解密:

aspnet_regiis.exe -pd "connectionStrings" -app "/SampleWebSite"

(因是RSA加密,所以必须在同一台机器上进行;站点的web.config被加密,下载下来本机解不了。)

第二种方法:

代码:

using System;

using System.Configuration;

using System.Web.Configuration;

string provider = "RSAProtectedConfigurationProvider";

string section = "connectionStrings";

protected void btnDecrypt_Click(object sender, EventArgs e)

{

   Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);

   ConfigurationSection configSect = config.GetSection(section);

   if (configSect.SectionInformation.IsProtected)

   {

      configSect.SectionInformation.UnprotectSection();

      config.Save();

   }

}

web.config被解密。

 

6#工作专用 | 2014-09-12 16:42

神贴刘明!

 

7#Nc4 | 2014-09-12 16:46

神贴

 

8#Sunshine | 2014-09-13 09:59

嗯嗯

赞一个,平时用Reflector看看函数

 

9#核攻击 | 2014-09-13 10:04

good jb~

 

10#园长 | 2014-09-13 11:24

赞~老师好

 

11#Mody | 2014-09-13 21:02

@Vigoss_Z 不错

 

12#ヤ深蓝T透 | 2014-09-14 18:45

赞~老师好 

 

13#null | 2014-09-15 09:23

终于有人分享了~~~

 

14#逝情 | 2014-09-22 23:58

10086个赞,顺便问下,可以转载么?嘎嘎

 

15#大漠長河 | 2014-09-24 06:13

等八点半后慢慢看 没有乌云币 没法感谢 送本地景点门票一张已示支持

 

16#Coody | 2014-09-24 08:39

随然不是太懂,但是先收藏了。。。

 

17#蒙塔基的钢弹 | 2014-09-27 12:24

大赞啊,大牛!~

 

18#qing | 2014-09-28 10:08

请求帮忙解密文件 http://103.252.17.111/bin.rar   乌云币感谢

 

19#RedFree | 2014-09-28 14:52

@qing 

MTY3NzUyTzY1NDU3Nk8xNDY4NjM2TzI2MDU4MjRPNDA3Mjg0OE81ODYxMDI0Tzc5Nzg0NjRPMTA0MTk0NDhPMTMxODMzMDBPMTYyNzM0NTJPMTk2OTE3MjRPMjM0MzYwODhPMjc1MDE2MDRPMzE4OTY0MzZPMzY2MTE4NDhPNDE2NTYwMDRPNDcwMjcyOTJPNTI3MjE5MTZPNTg3NDIwNjBPNjUwODg2MDhPNzE3NTgxODBPNzg3NTYzNDBPODYwNzY1ODhPOTM3MjU5NDRPMTAxNjk3NTk2TzEwOTk5NTE4NE8xMTg2MjAzNzJPMTI3NTY4ODQ0TzEzNjg0MjYyOE8xNDY0NDA5NDRPMTU2MzY2NjUyTzE2NjYxOTE4ME8xNzcxOTMxMjBPMTg4MDk1OTA4TzE5OTMyMDIxMk8yMTA4NzU3MDRPMjIyNzUyNDAwTzIzNDk1Mjk1Mk8yNDc0ODE3ODBPMjYwMzM4ODg0TzI3MzUxNjc3Nk8yODcwMjI1ODBPMzAwODQ5NTg4TzMxNTAwNTE4NE8zMjk0ODc3NTZPMzQ0Mjk0NDk2TzM1OTQyNjYwME8zNzQ4ODUzMTZPMzkwNjY2NTM2TzQwNjc3MjYwME80MjMyMDY0NzJPNDM5OTY4NDY0Tw==

Setp1: Base64_Decode

167752O654576O1468636O2605824O4072848O5861024O7978464O10419448O13183300O16273452O19691724O23436088O27501604O31896436O36611848O41656004O47027292O52721916O58742060O65088608O71758180O78756340O86076588O93725944O101697596O109995184O118620372O127568844O136842628O146440944O156366652O166619180O177193120O188095908O199320212O210875704O222752400O234952952O247481780O260338884O273516776O287022580O300849588O315005184O329487756O344294496O359426600O374885316O390666536O406772600O423206472O439968464O

Setp2:Split by O

167752

654576

1468636

2605824

4072848

5861024

7978464

10419448

13183300

16273452

19691724

23436088

27501604

31896436

36611848

41656004

47027292

52721916

58742060

65088608

71758180

78756340

86076588

93725944

101697596

109995184

118620372

127568844

136842628

146440944

156366652

166619180

177193120

188095908

199320212

210875704

222752400

234952952

247481780

260338884

273516776

287022580

300849588

315005184

329487756

344294496

359426600

374885316

390666536

406772600

423206472

439968464

Step3:Line/167752

1   1*1-0

3|||2*2-1

8   3*3-1

15  4*4-1

24  5*5-1

34  6*6-2

47  7*7-2

62  8*8-2

78  9*9-3

97  10*10-3

117 11*11-4

139 12*12-5

163 13*13-6

190 14*14-6

218 15*15-7

248 16*16-8

280 17*17-9

314 18*18-10

350 19*19-11

388 20*20-12

427 21*21-14

469 22*22-15

513 23*23-16

558 24*24-18

606 25*25-19

655 26*26-21

707 27*27-22

760 28*28-24

815 29*29-26

872 30*30-28

932 31*31-29

993 32*32-31

1056 33*33-33

1121 34*34-35

1188 35*35-37

1257 36*36-39

1400 38*38-44

1475 39*39-46

1551 40*40-49

1630 41*41-51

1710 42*42-54

1793 43*43-56

1877 44*44-59

1964 45*45-61

2052 46*46-64

2142 47*47-67

2234 48*48-70

2328 49*49-73

2424 50*50-76

2522 51*51-79

2622 52*52-82

 

20#Viigoss | 2014-09-28 16:52

求问:使用 .NET Reflector找到解密函数,怎么跟踪找到key。

 

21#Vigoss_Z | 2014-09-28 17:41

@Viigoss 有缘。

找调用的函数,追,肯定能找到key。

 

22#Viigoss | 2014-09-29 10:59

@Vigoss_Z 一般都是DES的,找到key就能解密了。关键是追不到key。加密解密的函数是写在dll里的,但是key是不是也写在dll里的?知道不?。.net的不好找,java的好找。用Reflector能追么?求方法。

 

23#Vigoss_Z | 2014-09-29 11:20

@Viigoss Reflector可以追啊。DES对称加密。加密解密要用到同一个key,加解密函数都可以追到key。

细心点肯定能找到。


  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: