欢迎光临
我们一直在努力

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

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

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

0x02?
????方法一(适用于能看懂代码又能写代码的童鞋)?
.NET Reflector定位至解密函数读懂代码,用任意一门编程语言编写同样解密算法的工具。(不详述此方法,因此方法跟自身的代码阅读能力、逆向跟踪能力有关。若是解密算法调用函数太多那么会消耗不少时间)
????方法二(适用于能读代码但不会写代码的童鞋)?
示例:?
??.NET Reflector定位至解密函数?
1477148364558812 三种方法还原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?
1477148364558812 三种方法还原ASP.NET可逆加密内容?

????方法三(适用于代码读不了更写不了的童鞋)?
示例:?
??.NET Reflector定位至解密函数,解密函数调用非常复杂,跟了几步思路也跟丢了……?
1477148364558812 三种方法还原ASP.NET可逆加密内容?
对付这类的加密那就使用最简单的方法吧——直接调用dll内的解密函数。调用方法:命令空间.类.方法?
1477148364558812 三种方法还原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+sBAAAAECVqcj9oCEGaJ0mZSN5kGAQAAAACAAAAAAAQZgAAAAEAACAAAAAhqwK0FIppu3zaId41oqAahOfebXIgpn6Y9wtCSh66xwAAAAAOgAAAAAIAACAAAAA9kwoU8mJNSwcoouLxVGh9PIU8RLsqFehwf0nmMVUeamAAAABdTYklOfQhsR4l8obq/PAZfLp12Ff1GvHiJBK1C7lJzi8d0dgs51TZvp5fOc0C2Ok6qqtXXcx07i9KlMGr1ETF23vFi0oE5wHy36bjGu0OvTo9psUMFia7wVLkchDkDoRAAAAAULGxt/L13wLHBMpv85P+ruAczDqo5NG8ufk+F3VVaEdPr7PvFK3OeHYtMOlLRSTBZk6sKilhsQRuNNM4z0GouA=="));?
%>



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

0x03总结?

??? 三种解密方法中第三种方法最为省时省力,且对那些绑定机器的加密最为简单有效。但是还是建议多使用第一种。

未经允许不得转载:杂术馆 » 三种方法还原ASP.NET可逆加密内容
分享到: 更多 (0)