首页
社区
课程
招聘
[旧帖] [分享]网络验证破解实例(了解网络验证过程和破解方法思路) 0.00雪花
发表于: 2012-5-14 17:18 4277

[旧帖] [分享]网络验证破解实例(了解网络验证过程和破解方法思路) 0.00雪花

2012-5-14 17:18
4277
求会员求转正,不是原创,表表诚意。
此贴分析思路清晰,语言明了,因为正在查找网络验证资料看后有感,拿来分享,谢谢围观。

不是原创的正题:

很久没搞破解了。最近黑了一套.NET的商业程序,给自己用。由于是网络验证。就尝试破解了一下。由于是内部的程序,破解的难度不大。要大了。我也破不了。随笔,写成心的,作为技术交流。高手掠过。先查看壳,可以看到无壳,.NET的程序。
(图片是Peid查壳显示无壳.net程序)

既然是网络验证的程序,那要开启Sniffer 类的程序,来抓取数据包,我这里用的HTTP Analyzer.运行程序,来看看她的验证,输入邮箱和密码,提示“Sorry,wrong username,password or computer ID”

(使用的软件截图)

我们看看HTTP Analyzer获取到的数据。

(使用的软件截图)

POST /verify_license.php?email=fuck@you.com&password=ST4GBVNE&mid=BFEBFBFF00010676 HTTP/1.1

我们提交了$email,$password,$mid这3个变量到verify_license.php 文件

$email 是我们输入的邮箱号码,$password 是我们输入的密码,$mid 是程序获取你的机器码。

verify_license.php根据计算,我们提交的验证码错误,于是返回值“NOT”。

弱弱的分析了一下验证机制,接下我们来分析一下程序,看他的验证码模块的代码。

用ildasm 载入程序。

选择“FILE”选项的“DUMP”。

她的验证是verify_license.php,那我们就搜索一下“verify_license.php”。可以看到,就一次。

我们来看下代码。

      // HEX: 00 00 00 00 17 00 00 00 A4 00 00 00 BB 00 00 00 03 00 00 00 0E 00 00 01

      IL_00be:  /* 1C   |                  */ ldc.i4.6

      IL_00bf:  /* 8D   | (01)00001F       */ newarr     [mscorlib/*23000001*/]System.String/*0100001F*/

      IL_00c4:  /* 13   | 0D               */ stloc.s    V_13

      IL_00c6:  /* 11   | 0D               */ ldloc.s    V_13

      IL_00c8:  /* 16   |                  */ ldc.i4.0

      IL_00c9:  /* 72   | (70)0070A3       */ ldstr      http://26836659.blgocn.com/verify_license.php\?  //这里是验证的网址,我改成我的BLOG了。

      + "email=" /* 700070A3 */

      IL_00ce:  /* A2   |                  */ stelem.ref

      IL_00cf:  /* 11   | 0D               */ ldloc.s    V_13

      IL_00d1:  /* 17   |                  */ ldc.i4.1

      IL_00d2:  /* 02   |                  */ ldarg.0

      IL_00d3:  /* 7B   | (04)00010E       */ ldfld      class [System.Windows.Forms/*23000002*/]System.Windows.Forms.TextBox/*01000055*/ de/*02000049*/::e /* 0400010E */

      IL_00d8:  /* 6F   | (0A)000076       */ callvirt   instance string [System.Windows.Forms/*23000002*/]System.Windows.Forms.Control/*01000039*/::get_Text() /* 0A000076 */  获取文本内容,应该是我们的邮箱

      IL_00dd:  /* A2   |                  */ stelem.ref

      IL_00de:  /* 11   | 0D               */ ldloc.s    V_13

      IL_00e0:  /* 18   |                  */ ldc.i4.2
IL_00e1:  /* 72   | (70)007115       */ ldstr      "&password=" /* 70007115 */ 输入的密码

      IL_00e6:  /* A2   |                  */ stelem.ref

      IL_00e7:  /* 11   | 0D               */ ldloc.s    V_13

      IL_00e9:  /* 19   |                  */ ldc.i4.3

      IL_00ea:  /* 02   |                  */ ldarg.0

      IL_00eb:  /* 7B   | (04)00010C       */ ldfld      class [System.Windows.Forms/*23000002*/]System.Windows.Forms.TextBox/*01000055*/ de/*02000049*/::c /* 0400010C */

      IL_00f0:  /* 6F   | (0A)000076       */ callvirt   instance string [System.Windows.Forms/*23000002*/]System.Windows.Forms.Control/*01000039*/::get_Text() /* 0A000076 */

      IL_00f5:  /* A2   |                  */ stelem.ref

      IL_00f6:  /* 11   | 0D               */ ldloc.s    V_13

      IL_00f8:  /* 1A   |                  */ ldc.i4.4

      IL_00f9:  /* 72   | (70)00712B       */ ldstr      "&mid=" /* 7000712B */ 机器码

      IL_00fe:  /* A2   |                  */ stelem.ref

      IL_00ff:  /* 11   | 0D               */ ldloc.s    V_13

      IL_0101:  /* 1B   |                  */ ldc.i4.5

      IL_0102:  /* 06   |                  */ ldloc.0

      IL_0103:  /* A2   |                  */ stelem.ref

      IL_0104:  /* 11   | 0D               */ ldloc.s    V_13

      IL_0106:  /* 28   | (0A)00007D       */ call       string [mscorlib/*23000001*/]System.String/*0100001F*/::Concat(string[]) /* 0A00007D */

      IL_010b:  /* 28   | (0A)000026       */ call       class [System/*23000003*/]System.Net.WebRequest/*0100002F*/ [System/*23000003*/]System.Net.WebRequest/*0100002F*/::Create(string) /* 0A000026 */

      IL_0110:  /* 74   | (01)000027       */ castclass  [System/*23000003*/]System.Net.HttpWebRequest/*01000027*/

      IL_0115:  /* 13   | 04               */ stloc.s    V_4

      IL_0117:  /* 11   | 04               */ ldloc.s    V_4

      IL_0119:  /* 72   | (70)0000E3       */ ldstr      "POST" /* 700000E3 */  POST 提交

      IL_011e:  /* 6F   | (0A)000029       */ callvirt   instance void [System/*23000003*/]System.Net.WebRequest/*0100002F*/::set_Method(string) /* 0A000029 */

      IL_0123:  /* 11   | 04               */ ldloc.s    V_4
IL_0125:  /* 16   |                  */ ldc.i4.0

      IL_0126:  /* 6A   |                  */ conv.i8

      IL_0127:  /* 6F   | (0A)000039       */ callvirt   instance void [System/*23000003*/]System.Net.WebRequest/*0100002F*/::set_ContentLength(int64) /* 0A000039 */

      IL_012c:  /* 11   | 04               */ ldloc.s    V_4

      IL_012e:  /* 6F   | (0A)00003E       */ callvirt   instance class [System/*23000003*/]System.Net.WebResponse/*01000028*/ [System/*23000003*/]System.Net.WebRequest/*0100002F*/::GetResponse() /* 0A00003E */

      IL_0133:  /* 13   | 05               */ stloc.s    V_5

      IL_0135:  /* 11   | 05               */ ldloc.s    V_5

      IL_0137:  /* 6F   | (0A)00003F       */ callvirt   instance class [mscorlib/*23000001*/]System.IO.Stream/*01000025*/ [System/*23000003*/]System.Net.WebResponse/*01000028*/::GetResponseStream() /* 0A00003F */

      IL_013c:  /* 13   | 06               */ stloc.s    V_6

      IL_013e:  /* 11   | 06               */ ldloc.s    V_6

      IL_0140:  /* 73   | (0A)000040       */ newobj     instance void [mscorlib/*23000001*/]System.IO.StreamReader/*01000029*/::.ctor(class [mscorlib/*23000001*/]System.IO.Stream/*01000025*/) /* 0A000040 */

      IL_0145:  /* 13   | 07               */ stloc.s    V_7

      IL_0147:  /* 11   | 07               */ ldloc.s    V_7

      IL_0149:  /* 6F   | (0A)000041       */ callvirt   instance string [mscorlib/*23000001*/]System.IO.TextReader/*0100001C*/::ReadToEnd() /* 0A000041 */

      IL_014e:  /* 13   | 08               */ stloc.s    V_8

      IL_0150:  /* 11   | 08               */ ldloc.s    V_8

      IL_0152:  /* 72   | (70)007137       */ ldstr      "NEW USER" /* 70007137 */

从new user开始了

      IL_0157:  /* 28   | (0A)000083       */ call       bool [mscorlib/*23000001*/]System.String/*0100001F*/::op_Equality(string,                                                                                                                         string) /* 0A000083 */

这里用到一个

op_equality函数,.NET我是不清楚,不过,在VB中,op_equality 里面见过,是比较两个串是否相等

      IL_015c:  /* 2D   | 0E               */ brtrue.s   IL_016c

他先比较是不是new user,然后,后面跟着一句,是brture.s,就是如果相等的话就跳

      IL_015e:  /* 11   | 08               */ ldloc.s    V_8

      IL_0160:  /* 72   | (70)007149       */ ldstr      "VALID" /* 70007149 */

然后,就比较是不是VALID,如果不相等就跳。VALID后面跟着的是brfalse了,这是推测的。来测试下看看。

      IL_0165:  /* 28   | (0A)000083       */ call       bool [mscorlib/*23000001*/]System.String/*0100001F*/::op_Equality(string,

                                                                                                                           string) /* 0A000083 */

      IL_016a:  /* 2C   | 0F               */ brfalse.s  IL_017b

      IL_016c:  /* 02   |                  */ ldarg.0

      IL_016d:  /* 17   |                  */ ldc.i4.1

      IL_016e:  /* 7D   | (04)000111       */ stfld      bool de/*02000049*/::h /* 04000111 */

      IL_0173:  /* 02   |                  */ ldarg.0

      IL_0174:  /* 28   | (0A)0000EB       */ call       instance void [System.Windows.Forms/*23000002*/]System.Windows.Forms.Form/*01000011*/::Close() /* 0A0000EB */

      IL_0179:  /* 2B   | 13               */ br.s       IL_018e

      IL_017b:  /* 72   | (70)007155       */ ldstr      "Sorry, wrong username, password or computer ID" /* 70007155 */  如果错误的话,跳转到我们开始的错误提示。

      IL_0180:  /* 72   | (70)006FE9       */ ldstr      "Login" /* 70006FE9 */

      IL_0185:  /* 16   |                  */ ldc.i4.0

      IL_0186:  /* 1F   | 10               */ ldc.i4.s   16

      IL_0188:  /* 28   | (0A)0000DD       */ call       valuetype [System.Windows.Forms/*23000002*/]System.Windows.Forms.DialogResult/*0100003C*/ [System.Windows.Forms/*23000002*/]System.Windows.Forms.MessageBox/*01000086*/::Show(string,

修改本地的 c:\windows\system32\drivers\etc\hosts   

127.0.0.1    26836659.blogcn.com   //这里是验证的网址,我改成我的BLOG了。   

本地架设一个APM环境,在跟目录下建立一个“verify_license.php”文件,里面的内容改为VALID ,测试成功。

我们输入任何用户名。都可以成功登陆了。测试了下程序,注册使用。

OK。结束。

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
2
文章来源最好注明;
有些图片没有上传;
楼主最好结合自己实践操作中的步骤叙述。
2012-5-15 09:01
0
雪    币: 74
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习了,真的太强了
2012-5-16 08:30
0
雪    币: 278
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
还是直接将返回内容写回程序,做成无需网络验证的方便。
2012-5-20 02:33
0
游客
登录 | 注册 方可回帖
返回
//