我对研究技术有极大的热情,今年18。从初中开始,就种下了自由操控电脑的欲望的种子。高一的时候,在一本信息技术教材上第一次看到编程这个词,书上拿走了一个用vb写的画二次函数图像的小例子,但是因为家里没有电脑,所以没有太在意。从高一暑假开始,我就拥有了一台电脑。我想学编程,但是我的电脑没有联网,所以经常从别人家下载信息软件回家学习。
每次都要下载一堆东西,包括在线教程,别人的经验,大学课件,还有pdf格式的电子书等等。当时我在网上搜编程资料,vc vb是最常见的。看到别人说vb最简单,我就选了vb,在家学了一个月。由于没有接触过编程,对一些高级术语也不了解,所以研究过程比较坎坷。最后只知道一些基本的语句,会用一些基本的控件。
最让我骄傲和羞耻的是,我用vb模仿推箱子3360的小游戏,在窗户上拖动三个图片框,一个是目的地,一个是游泳箱,一个是推箱子。只有else和赋值语句基本完成了推箱子游戏的模拟(让我觉得惭愧的是当时脑子里的函数概念,写了很多重复的代码。关键是我不会用vb写函数,所以学的很烂)。
我不能用vb调用api。虽然网上有一些源代码可以参考,但我并不能全部看懂。对我来说,如果我不理解他们,就意味着我什么也做不了。高二开学前十天,我下载了谭浩强的C语言教程,在家自学。
后来发现虽然我不会用C语言做类似vb的窗口控件(因为刚开始是用控制台界面学的),但是感觉很简洁,脑子里就能搞清楚程序的来龙去脉。不像vb这种面向对象的语言,一个方法就能搞定一切,我也不知道为什么。我对C语言一见钟情。我花了三天时间看完了谭浩强300多页的ppt(我的学习突飞猛进,大部分感觉很容易理解,但也有少数理解不多)。然后看了更多的示例代码,写了一些简单的小程序。
上学期我在业余时间看完了吴的《程序设计基础》,提高了我的算法和数据结构(之后我才真正踏入了编程的大门,知道学习一门编程语言最基本的就是了解它的变量定义,各种流控制语句,自定义函数,程序入口点,赋值语句基本都是如此,还有基本的输入输出函数,库函数等等。).
还在高二上学期看了《计算机组成原理》(大部分没看懂)《操作系统》(大部分看懂)和Charles petzold的《Windows程序设计》(进入Windows应用程序编程的第一步)。高二寒假期间,用vc写了一个使用sdk的聊天程序(仅限sdk编程)。界面结构很简单,一个窗口,两个编辑框,一个发送。寒假快结束的时候,我又接触到了汇编语言。
高二下学期开学的前一天晚上,我偶尔开了王爽老师的汇编语言课(为什么是偶尔?平时都是下载很多资料。我受不了这本,所以我可以读另一本。于是,我在各种资料之间建立了自己的知识网络。)本来不想学汇编,但是懂了一部分,就对汇编产生了兴趣。我在淘宝上买了一本王爽的《汇编语言》,去学校研究了一下。(当时我还在想,如果再学一次汇编语言,我会对它感兴趣的。在学校,我一有时间就看王爽的《汇编语言》。我越读越兴奋。我深深佩服王爽对知识屏蔽的详尽透彻的解释,我自己完全可以理解。
写一些纸上谈兵,但没有装实弹的程序,是不可能打下扎实的基础的。回国后,我先按照书上的例子用记事本写了汇编程序,然后用masm等工具编译连接,用Windows自带的debug自己调试。虽然只是一个运行在保护模式下的深色dos窗口,没有任何输出,但是看到自己的数据在debug中按照我想要的结果正确运行,我真的很开心。(当时也看了一些关于编程的小说,比如《疯狂的程序员》 《重生之王牌黑客》,里面主人公可以直接用debug写应用程序。从那时起,我就暗暗告诉自己,以后一定要实现这个目标。现在看来,这几乎是不可能的)
后来我写了一个程序,用16位汇编直接读取cmos来显示当前时间。处理底层硬件的过程确实很爽,但是书上还有很多东西我还没有实践过,比如直接读写硬盘扇区,引导程序,安装中断程序等等。因为我迷上了两本书:3360,一本是骆昀斌的《Windows32位环境下的汇编语言程序设计》,另一本是我在网上拿到的电子书黑客的防御2009。
黑客编程vc专辑》。
需要【本文配套书籍PDF电子高清版】的同学可以帮忙转发一波后 私信【资料】即可免费领取
高二下学期的下半阶段,我已经完全投入到技术学习中去,上课偷偷地看,下课也看,在宿舍里也看,晚上12点之前一般不睡觉,常常因睡眠不足而感到难受,达到了一种走火入魔的境界。看了这两本书,我才意识到,之前所做的东西虽然是在Windows上做的,但是和系统一点关系都没有。也正是从那时起,我才感到自己步入了Windows的殿堂。也正是因为这,我的成绩从高二一入学的班级第10名掉到了30多名。(搞技术的,成绩不提也罢) 非常感谢那两本书,让我对神秘的Windows有了一个初步的了解,给了我一些实际的编程例子参考。在读这两本书的过程中,我对c语言和汇编语言的关系了解的更加透彻,这让我以后在写c代码的过程中还能想象出编译后的汇编代码,用od查看,确实是那么回事。第一次学习hook API时,在网上下了一个例子代码,是靠修改输入表来hook的,二话不说,先编译一下看看,果然一次通过(是一个dll的代码)。然后用罗云彬介绍的方法写了个注入dll的程序,拿到虚拟机上一试,果然阻止了任务管理器结束程序(hook的TerminateProcess函数)。但是在物理机上就不行了,初步怀疑是系统的问题(虚拟机上是xp,物理机上是win7)。后来用od挂上了win7的任务管理器,发现它的输入表里根本没有TerminateProcess这一项,我想它应该不会不调用这一个函数吧,于是下断TerminateProcess,没断着。在继续跟踪调试的过程中发现它原来是直接调用了ntdll里的ZwTerminateProcess函数。既然知道了原理,那就想对策。后来才知道,我的方法叫做inline hook。修改机器码来hook函数是我自己想到的,只不过我还不知道他在这个世界已经存在而已。
高二的暑假终于到来了,自从步入Windows的殿堂后,我的兴趣就多了起来,比如说加壳脱壳,游戏外挂,内核驱动等等。我看郁金香的教程,看《加密与解密》,曾经用od手动脱过UPX,ASPack等一些简单的壳,用IDA分析过论坛里的几个小程序的加密算法,写过QQ对对碰的游戏外挂,还有零散的写过几个win32汇编小程序,都是些搬不上台面的东西。总之就是什么也玩过了,但是什么也研究得不深,始终停留在初学者的水平。玩过内核,下载的那些介绍内核编程的书也没大看下去,最终也还就是写个hello world之类的内核程序。眼看还有半月就开学了,怎么感觉什么东西也没学到。所以我决定得做点什么。那就写一个远控吧,用c语言,纯sdk编程。这个东西,我也没怎么好好的架构一下,蒙着头就开始了。首先写的是图像传输的,技术含量不高,也就是截取屏幕像素数据,压缩,传送。后来又确定了用一个大的对话框作为软件的主界面,增添了文件管理,文件传输,CMDShell以及文字对话的功能。因为没有架构好,所以每写一个功能,我都要追踪出好多bug,然后依次消灭,其实编码的时间并不多,关键是调试改进上花了很多时间。高三开学前两天,各个功能如期完成,我把控制端拷到u盘上(纯sdk编程,才大约100k!),到邻居家里去测试。(因为技术含量不够,所以不能穿透内网。而且我家里用的广电的CableModem,不能做端口映射,所以只能作为受控端测试了)。经过测试,除了图像传输有点蹩脚外,其他的功能都可用,因为之前在虚拟机上都测试过了。因为是纯sdk编程,界面也很难看,看上去很不讨人喜欢。不管怎么说,这次实际的开发让我体验到了做工程师的感觉,也算是夯实了一次c语言,也为以后的开发增长了经验。
高三开学了,在家长的压力下,我决定好好学一学校内的课程,考一所好点的大学。开学后的一个星期里还可以,后来我总是为我那残缺的技术感到惶恐。所以以生病的理由请了假,回家拿手机。从此,我决定利用高三的业余时间好好的研究内核编程。一开始我看的是《Windows内核安全编程从入门到实践》,这本书介绍的范围很广,但是都不详细,不过我不大理解的地方大部分都从张帆的《Windows驱动开发详解》以及网络上找到了答案。还有一本比较好的书《寒江独钓…》,里面的过滤驱动例子讲解的也都很详细。当然,我也不可能总是看内核的东西,我需要思维的切换。以前总是用c语言写程序,也没正儿八经的看看c++。
于是先正儿八经的看了看c++,后来在家里又学了一会的BCB,能够简单的用一些基本的控件,学这个的目的主要是快速的处理界面。后来感觉到用c++找不到想象出汇编代码的感觉,而且在论坛里看到了《c++逆向与反汇编揭秘》这本书,于是就在网上下了一本pdf格式的电子书在手机上看。认真的看了一段时间后,总算对c++的反汇编有了基本的了解。看到网上都用mfc编程,于是我也搞到一本《深入浅出mfc》,粗略看了一段时间,对mfc的机制也有了些粗浅的认识。后来到了家里,在百度文库里找了一份 vs2010 mfc教程 比书上的容易理解多了。看了一会就写出了一个基于对话框的加法计算器程序,而且界面也比以前用sdk编程的好看多了。
目前,我正在写一个拦截窗口创建的程序。内核层hook ShadowSSDT里的NtCreateWindowEx函数,应用层用mfc设计一个基于对话框的界面,能够自定义拦截规则(根据窗口名,类名,以及窗口大小)。写这个程序的初衷是阻止迅雷酷狗等软件的广告窗口,目的还是为了实践一下学到的东西。我觉得只有做出实用的程序来才算掌握了那些知识。返校时我已经把内核层的代码和应用层的代码都分别写好了,并做了简单的测试,还剩下内核层与应用层的通信代码没写好,下次回家先做完它。(下次回家也就放寒假了,我们这高三一般都是一个月回家一次。不过为了学习编程,我也经常请假回家。)
这次寒假我也要做一个软件来实践我从书上学到的东西,想来想去,还是要做一个远控(除了这东西,我好像也不知道要做什么了),不过这次要运用大量的内核编程。(给大家简单的介绍一下这个远控:
用mfc做一个基于对话框的界面,用skin皮肤库美化界面(之前没用过,现学现用吧)。在内核层要做的有隐藏进程,绕过杀软的函数钩子,清理回调钩子,还有键盘记录。主要的功能有文件管理,文件传输,执行cmd命令,截屏。采用邮件系统通信(这样可以通过手机发送邮件来进行控制),不要求实时传输的效率。
还有,这只是一个初步的设想,用邮件系统通信我还没试过。)
如果寒假里还有足够的时间,我还得研究一下免杀。以后还打算自己做几个小游戏的外挂,主要是想提高一下自己的逆向分析调试能力,然而做这些的基础还是正向的编程经验。
为了学习编程,成绩下降,家长也因此而感到失望,老师也经常找我谈话。发此帖的目的,还是要朋友们帮我参谋一下,我到底是应该继续学习编程,还是拚一年高三的生活来考一个好学校继续进修?有人说在大学里这些东西什么也学不到,但是我总觉得好大学里的学习气氛可能比较好。我很迷惘,最近一直不能静下心来去学习校内课程。未来的路到底在哪呢?朋友们给点意见吧。
自考资料网:建议开通永久VIP超级会员更划算,除特殊资源外,全站所有资源永久免费下载
1. 本站所有网课课程资料来源于用户上传和网络收集,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,助力考生上岸!
3. 如果你想分享自己的经验或案例,可在后台编辑,经审核后发布在“自考资料网”,有下载币奖励哦!
4. 本站提供的课程资源,可能含有水印,介意者请勿下载!
5. 如有链接无法下载、失效或广告,请联系管理员处理(在线客服)!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 星光不问赶路人,岁月不负有心人,不忘初心,方得始终!