由于还没能熟悉看雪的编辑器,所以很多格式不能很好的调整过来,希望大家见谅哈,同时,调整了格式的文章更加方便阅读,也欢迎大家来我博客支持一下。原文来自:Tracy'Blog——【校园网那些事】,等全部写完后,也会把电子稿发布出来的。
另外,也希望大家能够在看文章的同时给出大家宝贵的建议和意见,特别是关于你对那些技术性问题的看法,文章本意是希望能够共同提高~!谢谢大家支持哦。
Chapter 6——汇编语言
因为一直对黑客技术感兴趣,硬盘中自然也少不了一些黑客方面的教程。可以说是一个指引吧,让自己知道这一方面还有多少知识等着你去学习。记得在大一的时候,因为知道大二要开C,所以国二没报Access而是选择了VB,毕竟Access也只是一个软件,还不如多接触两门语言。考完国二应该是大一的下期,之后的时间就转头去看电子版王爽的《汇编语言》,不过,你也知道,电子版的书籍看起来着实不爽,但这本书在我去过的书店都没找到过,直到那个暑假,终于在宁波图书馆买回来了。然后,在那个暑假,如饥似渴的看了一遍,但却发现,除了知道了各个指令的作用、堆栈、内存等一些概念之后,根本没能用得上,更不要说像VB那样去给自己写一两个软件了。不过也正是这段经历,对后面学习逆向打下了一些基础。
无聊中,翻了一下硬盘中躺着的那些许黑客教程,发现了《黑鹰破解教程50课》。第一次看的时候由于时间问题,看了前面几课之后就没去看过了。但也算是一个了解,知道了一些破解思路、知道了壳的概念和脱壳的常用手法。在经历过上面的各种实践后,慢慢的觉得自己对破解、对脱壳也感兴趣起来了。于是,整个寒假把整套课程看了个遍,对照着三人行老师的讲解把其中的各个例子自己再练了一遍,也算是对破解了解了个大概吧,也是那是知道了看雪。看完后觉得自己浑身充满了力量,觉得自己真的挺不错了,然而随随便便下下来一个收费软件,左捣右弄了个把礼拜(主要是三人行老师说:脱壳、破解必须要有非同一般的耐心!于是,记住了~),发现自己尽奈何不了它。于是,自觉的把高昂的头颅低了下来,继续学习吧。
Chapter 7——第一次交手之网络嗅探
在chapter5中的第二个思路中谈到了共享上网,也谈到了想在linux下不通过wine虚拟windows后拨号上网,最主要的是智能手机越来越多了。大家都希望在寝室能直接用无线路由,在学校wifi覆盖的地方直接使用自己校园网的账号密码上网。
但是,一直困扰着我们的就是这个pppoe拨号客户端了。或许有人试过,用自己开通的账号密码直接在宽带连接里面去拨号,结果是肯定拨不上的。于是乎,这个蝴蝶的作用就成立大家心里的一个谜。
首先,我们能给出这么一些猜测:
1.它只负责对原先的账号密码通过一定算法进行转换,也就是对它们进行加密之后得到的密文在服务器端验证。
2.它是软件开发公司自己开发的一套拨号程序,用的自己的协议,必须用自己的软件才能拨上号。
事实到底是什么呢?只有通过实践去检验了。记得每次成功上号之后在屏幕的左下角会弹出一个气泡来提醒,已建立连接。于是,进网上邻居的属性里看了下,发现里面多了一个以“PPPOE-”开头的拨号适配器连接
,看名字后面的一串字符可以判断是网卡型号。那么这个东西是怎么建立起来的、什么时候建立起来的呢?
继续用变量控制法,先断开连接,而后再删除以创建的连接。再打开蝴蝶,点击拨号。然后,看到了这个拨号连接在我眼皮底下建立,之后连接上了。我滴乖乖,它是如何连接上的呢?再次断开,把账号密码往里面输入。一拨号,始终错误691。嗯哼,不由自主滴,对上面的两种猜想更偏向于第一项了。(而后的实践证明,的确是第一项。)
既然,既然觉得他只是加密了,那就是说我们只要知道加密后的账号密码也就行了。怎么找呢?既然是拨号,也就是要把自己的真实账号密码发送到服务器端进行验证。也就是说,它不会在发送的途中加密、不会在服务端加密,必须是加密后发出去的。既然是加密后出去的,那我们是不是可以对自己本机发出的数据进行监视,然后找出拨号发送出去的数据包来进行分析呢?
想法是绝对没错的,于是在电脑里翻出好久没过用的sniffer pro,对网卡进行嗅探。在结合了网上各种教程再加上自己的一系列尝试之后,成功获取到了request value (密码)以及name (用户名)。知道pppoe拨号原理的同学应该知道,pppoe拨号的鉴定有两个方法,一个是明码形式的PAP、一个是加密形式的 MD5 CHAP(Message Digest Algorithm Challenge Handshake Authentication Protocol)即信息摘要算法挑战握手认证协议。看名字就很长,实现方法就更变态了。
很不巧,该死的校园网用的就是后者,更关键的是,这个request value=hash(identity+密码+challenge)(意思是:得到的request value是由一个identity的认定值连接真实密码、再连接一个每次拨号都不同的挑战值challenge,将前面三者连接号之后再进行md5加密。而且,嗅探得到的challenge居然也是通过md5加密了的),所以,想要通过这个方法把真实的密码还原出来看样子是无望了。
怎么办呢?还有什么办法能够得到这个真实的密码呢?我们早就知道了pppoe客户端的安装目录下有一个叫做pppoe.cfg的配置文件,而且知道这个东西是用来存储我们输入的用户名、密码以及自动连接和记住密码的一些选项配置信息的。它里面存放了我们想要的真实账户和密码么?用winhex打开该文件,对着一串16进制的数字苦思冥想了很久,无果而终……
难道,真的就没有办法了?
Chapter 8——第二次交手之HOOK
办法应该还是有的,只是个人技术有限吧,也或许只是暂时性的思维短路没想到。先去吃个饭吧。回头再研究,一切打不死我的,都会让我更强大的~~
吃着吃着,突然发现了这么一个问题,为什么我们在拨号的时候没有看见宽带连接的界面?而且它能够连接上去?
于是随之就想到了一个词:“函数”,而且是基于系统的API函数(学过编程的孩子应该都知道这个东西,不知道的百度吧。)我们可以直接调用函数把我们的用户名和密码对函数进行赋值,并由函数来发起这个连接,如果连接上了返回给pppoe客户端一个值,让他显示连接成功,else……
于是,灵光一现。我们可以利用传说中的“钩子”。当启用这个函数的时候,在给这个函数传递参数前,我们先截获它,并且把它的值printf出来。于是,开动……
由于技术有限,那时的自己也还没到能写出hook程序的技术层面,于是,又是在网上一顿搜索,还好找到了一些东西,拿下了微软在某个时期放出的setdll.exe(detours的dll注入程序)几经周折终于还是把它给编译出来了。又在网上找来了某个大神编译好了的HookXKapi.dll,专门获取电信的星空极速的真实密码的动态数据连接库。然后,在命令提示符里忐忑的敲下setdll /d:HookXKapi.dll rasapi32.dll。再次运行蝴蝶,一点拨号,这次弹出的不再是以往的拨号成功或者失败了,首先显示:
这是因为,HookXKapi.dll的作用是在调用rasdial时候,首先中断下来,然后把要传输进去的参数显示出来,之后在点击上面对话框中的关闭后,再把参数传给rasdial进行拨号。
于是我们就获得了真实的账号密码了,就可以直接用得到的真实密码以及自己的账户进行宽带连接了。对于很多安卓手机用户来说,要的就是这个了。其实,校园网迟迟不发安卓版的pppoe客户端,问题也就在这里了,通过安卓程序的源代码,可以很快的知道我们真实密码。这样,路由器就会在学校多起来了,直接侵犯到他们的利益了。
这个过程中,学到的东西也还算多吧,第一次自己手动hook(虽然不是自己写的程序),但也算是一次经历吧,也了解到了pppoe拨号的整个过程,也重温了sniffer pro的使用。在之后的文章中会很详细的把上面所有的方法的原理一步一步的解释清楚的。
(……未完待续……)