Quantcast
Channel: 看雪安全论坛
Viewing all articles
Browse latest Browse all 9556

调试逆向 【11月23日更新在11楼】【大结局】校园网那些事

$
0
0
接上【校园网那些事】,因为好久没写了,那帖子已经不能编辑了,于是,再开一帖,继续完成它吧。可能跨着楼层看,不太舒坦,也请见谅了,等全部完工后,一定发出DOC文档。也谢谢看过这文章的朋友的鼓励。

看我天天大半夜跑上来发帖的份上,给个好评呗~~~:D:
PDF格式文件改完错别字后上传~~~
PDF格式全文下载请点击:
http://www.purpleroc.com/html/382547.html


隔了那么十个月没写了,真的很抱歉了。最近又打起精神,还是想把它完成吧,也算是了了一桩心愿啊。不过可惜的是,这次是的确没环境了,很多实例不能用图片来展示了,那么,就只有靠文字和代码来给大家描绘。

而且,后面都是分析一些算法的,可能看起来不是那么好理解了,望原谅~~~

Chapter 3——窗口弹出


一直就用着自己的工具盗号、拨号上网。忽然有一天又对蝴蝶.exe感兴趣起来了。因为,在印象中,每次拨号成功后,都会在右下角弹出一个窗口,显示你账号的剩余时长之类的信息。然后,还会弹出校园网论坛。这事貌似有点猫腻。

于是,很想知道它是如何弹出网页和窗口的。然而,用宽带连接拨上号之后,马上打开网站,无论你的网址是什么,都会跳转到校园网论坛。这事,的确有点蹊跷。而且,它是如何控制客户端弹出网页和窗口的呢?通过发送特定的数据包?那么,要是我知道了这一原理,自己写出这么一个数据包,那是不是说我也可以对别人发送数据,然后使他人的电脑弹出窗口,打开特定的网页呢?

首先想到的就是抓包了,看它有哪些数据流通。这里我先用的是ethereal,还算是比较专业的一款工具了。虽然比不上sinffer pro,但还是可以满足我们的需要了。下面是我在用客户端拨号抓到的一些数据。我们来看看:

 http://www.purpleroc.com/images/image/20131108200285268526.jpg

经过前面的讲解,我们可以看出1-27步都是pppoe拨号所产生的纪录,先不管这些,所以28就是DHCP动态主机设置协议了。不出意外的话下面两个UDP数据包就是我们要找的东西了。为了确定,我再用wpe pro试下,发现直接忽略了前面的步骤直接显示有两个包,内容如下:

Ethereal中发出的数据包:

http://www.purpleroc.com/images/image/20131108200253605360.jpg

Ethereal中接收的数据包:


http://www.purpleroc.com/images/image/20131108200263976397.jpg

我们先把这些数据保存起来,发现与wpe pro所截获的数据十分相似,我们暂且相信在客户端报上号后,它只向服务器发送了一个数据包,然后得到了服务器的一个回复数据包。那么,如果它们之间进行了通信,它们都交流了些什么呢?就像前面说的它弹出了一个显示我们还有多长时间可以使用。所以,我们猜测,客户端说:“请问我这个账号还有多少天可用啊?”,然后服务器查了一下账本说“哦,你还可以用……。”当然,这也只是个人YY而已。还缺少实践去证明。

那么,怎么证明这些数据就是我们要找的数据呢?那就是伪装服务器向自己发送数据,或者向寝室里的其他电脑发送我截获的数据包。从上面可以清楚的看到源地址和目的地址、源端口和目的端口。

发送:

源地址:10.0.176.143 目的地址:172.31.15.2 发送端口:4999 接收端端口:3855

接收:

源地址:1.1.1.9 目的地址: 10.0.176.143 发送端口:3855 接收端端口:4999

这也就解释了,为什么我们在用netstat命令时,发现拨号客户端一直在监听UDP的4999和3852了。可后来仔细看了看,又觉得不对,因为我都不了解这数据包里某一位的作用分别是什么,又怎么去构造呢?

那么,还是祭出OD来进行分析,上次我们是对rasdiala下段,得到要发出的内容,这次,因为是收到网络数据包之后,客户端再对数据进行处理。显然,突破口是在接受UDP数据包这里。根据以前的方法,先看有没有recvfrom,然后再在OD中bp recvfrom下断。之后,拨号运行。程序成功中断在00408C85处,然后我们看看recvfrom的参数。

sockfd:标识一个已连接套接口的描述字。 

buf:接收数据缓冲区。 

len:缓冲区长度。 

flags:调用操作方式。是以下一个或者多个标志的组合体,可通过or操作连在一起:

那就是说,第二个参数就是我们接收到数据的存放处了。由于,调试的时候是在学校,写文是在家,所以不能一步一截图,只能凭记忆说说了。看看堆栈窗口,在第二个参数那右键,在数据窗口跟随,就可以看到我们的接受到的数据包了。再然后就是看程序对数据包做了些什么了。

首先,我们把在三个不同时刻用两个账号进行拨号,得到的数据包如下:

收到的数据包:


第一个账号拨号后截获的收到的数据包:

引用:

10 1B9C962AE65C0E 82 98 64 BC 3E 78 15 CC E7 B2 A0 11 80 00 00 00 20 D0 4948 C8 49 B8 C8 48 B8 C8 C9 08 49 48 69 D8 C869 C9 E8 2181 C8 A1 81 48 30 D9 28 166FFB A6 C7 87 27 CA7A1E 37 2B C8 48 D8 E8 39 49 E8 08 468A27 CA 8B3A567A58 58 36 3E A8 28 166FDA16 C7 0E 5B3F37 2B 48 39 48 48 08 56 2B A8 B0 602C5C5C4C69 B9 B9 C8 E8 4939 C8 59 6839 C8 C839 C8 59 68 B9 31 11 08 81 00 00 31 11 00 20 00 00 40 602C5C5C4C69 B9 B9 C8 E8 4939 C8 59 6839 C8 C839 C8 59 68 B9



第二个账号第一次拨号后截获的收到的数据包:

引用:

109AE2 10 CE4CAB 06 CB0FCD 66 32 38 32 2B37 C0 A0 11 80 00 00 00 20 D0 4948 C8 49 B8 C8 48 B8 C8 D8 08 48 48 69 49 59 69 49 68 2181 C8 A1 81 48 30 59 28 166FFB A6 C7 87 27 CA7A1E 37 2B 59 48 D9 39 59 68 08 468A27 CA 8B3A567A49 D8 36 3E A8 28 166FDA16 C7 0E 5B3F37 2B 48 39 48 48 08 56 2B A8 B0 602C5C5C4C69 B9 B9 C8 E8 4939 C8 59 6839 C8 C839 C8 59 68 B9 31 11 5E 80 00 00 31 11 00 10 00 00 40 602C5C5C4C69 B9 B9 C8 E8 4939 C8 59 6839 C8 C839 C8 59 68 B9



第二个账号相隔一会儿后拨号截获的收到的数据包:

引用:

109A89 FC B4 3E B0 B3 51 1D 84 77 4D 5685 A1 566CA0 11 80 00 00 00 20 D0 4948 C8 49 B8 C8 48 B8 C8 D8 08 48 4869 C9 D9 6958 C8 2181 C8 A1 81 48 30 59 28 166FFB A6 C7 87 27 CA7A1E 37 2B 59 48 D9 39 D8 48 08 468A27 CA 8B3A567A49 D8 36 3E A8 28 166FDA16 C7 0E 5B3F37 2B 48 39 48 48 08 56 2B A8 B0 602C5C5C4C69 B9 B9 C8 E8 4939 C8 59 6839 C8 C839 C8 59 68 B9 31 11 5E 80 00 00 31 11 00 10 00 00 40 602C5C5C4C69 B9 B9 C8 E8 4939 C8 59 6839 C8 C839 C8 59 68 B9


我们把中间那个作为中间量进行比较。不同的部分用彩色显示出来。一和二三的账号是不同的。二和三的账号相同,但报号时间不同,一二三弹出窗口的内容分别如下:

第一次:(您可用时间为1059.29 小时,约44天)(您的余额为0.00 元)

第二次:(您可用时间为607.68 小时,约25天)(您的余额为0.00 元)

第三次:(您可用时间为607.50 小时,约25天)(您的余额为0.00 元)

可以,发现,数据包中对应的变化的数字的位置的变化,居然就是我们前面的那套算法,也就是说,这个数据包是经过了自身加密算法加过密的。

那么,我们把上面的数据放到前一节中得到的解密算法中去还原出真实内容试试。

http://www.purpleroc.com/images/image/20131108200229552955.jpg

上图为我们对第一个账号拨号后得到的数据包进行解密后得到的信息。

可以看出我们收到了一些什么信息,能看得懂的第一个部分为时间,第二个部分为我们拨号窗口弹出的信息:“可用时间,余额”,第三部分为拨号器拨号成功后弹出的网站的网址。那么,是不是说我们对应改掉这些内容然后向其他电脑的相应的端口发送就能让让他们的电脑弹出我想要弹出的网址和对话框呢?如果是这样的话,那就真算是一个很大的漏洞了,而且,很具破坏力的。

为了方便演示,我们的发出包和收到的包,都用今天刚获取的。

首先我们还是看看发出去了一些什么信息(截图都是数据包进行解密后在winhex中看到的内容):

我们截包得到下面的内容:

http://www.purpleroc.com/images/image/2013110820020136136.jpg

再来看看收到的数据包里面的有些啥:

http://www.purpleroc.com/images/image/20131108200229262926.jpg

可以看到,发出去的信息中的时间和收到的时间是相同的(这点很有用,在后面的数据包验证中,这也是判定之一)。发出去的数据包中,有一段是D0341901,也就是我们拨号的账号了,发出去,应该是为了查询这个账号的费用信息(YY出来的),(……中间隔了十个月没写,可能思路和风格会有些不同哈,后面的内容,也可能没有那么多图片去展示了,毕竟,现在没有当时的环境了,只能凭印象把文章写完了~……)1.2.9则是拨号器版本信息了。也就是说,客户端按照指定的规则发出一个带有账号信息的信息,将会返回一个带有账号费用信息的数据包。该数据包由客户端处理后,显示给用户。

那,也就是说,实现的是一个查询功能咯,而且,是根据服务器发过来的数据包,弹出窗口显示相应的内容,并打开数据包中包含的网址。

好,回到上一个问题,我们要做的是让他显示我们想要的让他显示的内容。为了确定是数据包控制的,我用BlackFeather大哥给的SocketTool,把收到的数据包再对自己发送。成功弹出消息框和网页,也就说明我们的推断没错。可是呢,我断开了一下网络,然后再次拨号时,用上次的接收到的数据包对本地发送,却毫无反应了。那么问题在哪呢?另外,数据包的控制位有哪些呢?且看下回分解。

Viewing all articles
Browse latest Browse all 9556

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>