当前位置: 首页 > 后端技术 > Java

伤害仲永?看完之后,可以少走很多弯路!一个高中生自学编程的经历

时间:2023-04-02 01:17:58 Java

我对研究技术有很大的热情,今年18岁。从初中开始,就种下了自由支配电脑的愿望的种子。高一第一次看到编程这个词是从一本信息技术课本上,随手拿走了书上用vb写的画二次函数图像的小例子,但是手头没有家里有电脑,所以没太在意。从高一暑假开始,我就拥有了一台电脑。想学编程,但是电脑没法上网,所以经常去别人家下载资料软件,自己在家学习。每次下载一堆东西,有网上的教程,有别人的经验,有大学课件,还有pdf格式的电子书等等。当时在网上搜编程资料,最多的就是vc和动词。看到有人说vb最简单,就选了vb。我在家学习了一个月。研究的过程很坎坷,最后也只认识了一些最基本的句子,用了一些基本的控件。最让我感到自豪和羞愧的是,我用VB模仿了推箱子的小游戏:在窗体上拖三个图片框,一个是目的地,一个是游泳框,一个是推箱子。盒子。推箱子游戏的模拟基本上只用ifelse和赋值语句就完成了(让我觉得丢脸的是当时脑子里的函数概念,写了很多重复的代码,关键是我不会'不知道怎么用vb写函数,学起来很垃圾)。我永远不会用vb调用api。虽然网上有一些源码可以参考,但是我也看不懂。对我来说,如果我不明白,就意味着我什么也做不了。高二开学前十天,下载了谭浩强的C语言教程在家自学。后来发现虽然用C语言做不出像VB那样的窗口控件(因为一开始是用console界面学的),但是感觉很简单,能在里面搞清楚程序的来龙去脉我的想法,不像VB的面向对象的语言,一种方法可以搞定一切,我也不知道为什么。我对C语言一见倾心。我花了3天的时间看完了谭浩强300多页的ppt(学得突飞猛进,大部分都通俗易懂,有几部分不是很懂),然后又看了更多的Examplecode,以及写一些简单的小程序。高二最后一个学期,利用课余时间看了吴文虎的《程序设计基础》,让我在算法和数据结构上有所进步(从此真正进入了编程的大门,知道了基础学习编程语言最重要的是了解它的变量定义方式,各种流程控制语句、自定义函数、程序入口点、赋值语句基本相同,还有基本的输入输出函数、库函数等).高二最后一个学期还读了《操作系统》(大部分没看懂)《操作系统》(大部分看懂了)和Charlespetzold的《Windows程序设计》(走进Windows应用程序编程之门)。期间用vc用sdk(也只有sdk编程)编程方式写了一个聊天程序。界面结构很简单,一个窗口,两个编辑框,一个发送按钮。寒假结束,我又接触到了汇编语言。高二开学前一天晚上,无意中打开了王爽老师的汇编语言教程(为什么偶尔?平时下载很多资料,这本看不懂,再看另一本一个,就是这样。我在各种材料的跳跃和补充之间建立了自己的知识网络),一开始不想学汇编,但我了解了一部分,所以对它产生了兴趣,并购买了淘宝本上一套王双的《汇编语言》,去学校学习了(当时我一直在想,如果再学汇编语言,那我就离大师又近了一步)。在学校,一有空就看王爽的《汇编语言》。纸上谈兵是肤浅的,没有真枪实弹写一些程序是打不牢基础的。回家后,先按照书上的例子在记事本里写好汇编程序,然后用masm等工具编译连接,用Windows自带的debug调试,虽然只是一个darkrunin保护模式。一个dos窗口,没有任何输出,但是在debug中看到我的数据按照我想要的结果正确运行,真的很开心。(那时候看了一些关于编程的小说,比如《疯狂的程序员》《重生之王牌黑客》,后面的主角可以直接用debug写出应用程序,从那时候开始就暗暗告诉自己,以后也要实现这个目标。看着atitnow,这几乎是不可能的)后来用16位汇编写了一个直接读取cmos显示当前时间的程序。和底层硬件打交道的过程真的很爽,但是书上还是有很多东西要看。还没有实践过,比如直接读写硬盘扇区,启动引导程序,安装中断程序等等,因为迷上了两本书:一本是罗云斌的《Windows32位环境下的汇编语言程序设计》,一本是我的书在网上。我得到了电子书《黑客防线2009 黑客编程vc专辑》。【本文配套书PDF电子高清版】高二下半年,我全身心投入到技术学习中。上课偷偷看,下课偷偷看,在宿舍偷偷看。我通常在晚上12点之前不睡觉。经常因为睡眠不足而感到不自在,达到一种痴迷的状态。看了这两本书,我才明白,以前做的事情虽然是在windows上做的,但是跟系统一点关系也没有。也是从那时起,我觉得自己步入了Windows的殿堂。也正是因为这样,我的成绩从高一班的第10名跌落到30多。(做技术的,成绩不提也没关系)我很感谢那两本书,让我对神秘的Windows有了初步的了解,也给了我一些实用的编程实例作为参考。在阅读这两本书的过程中,我对c语言和汇编语言的关系有了更透彻的了解,这让我在以后写c代码的过程中可以想象编译后的汇编代码,用od来查看,确实如此。第一次学习hookAPI的时候,在网上下载了一个示例代码,通过修改输入表来hook。二话不说,我先编译了一下,通过了(一个dll代码)。然后用罗云斌介绍的方法写了一个dll注入的程序,拿到虚拟机上试了一下,果然阻止了任务管理器终止程序(hook的TerminateProcess函数)。但是在物理机上是行不通的。初步怀疑是系统问题(虚拟机xp,物理机win7)。后来用od挂了win7的任务管理器,发现它的输入表里没有TerminateProcess项。我以为它不会调用这个函数,所以我断开了TerminateProcess,它没有。在继续跟踪调试的过程中,发现是直接调用了ntdll.h中的ZwTerminateProcess函数。知道了原理,再想想对策。后来才知道我的方法叫inlinehook。修改机器码来hook函数是我想到的,只是不知道他已经存在于这个世界上了。高二的暑假终于到了。自从踏入Windows的殿堂,我的兴趣就增加了,比如打包解包,游戏插件,内核驱动等等。看了Tulip的教程,看了《加密与解密》,用od手动去掉了UPX、ASPack等一些简单的壳,用IDA分析了论坛几个小程序的加密算法,写了一个QQ游戏插件——中,还有零零散散写的几个win32汇编小程序,都是提不上台面的东西。总之,什么都玩过,但是什么都没有深入研究,一直停留在初学者的水平。玩了内核之后,下载的那些介绍内核编程的书也没看多少。最后只是写了个helloworld这样的内核程序。眼看着还有半个月就要开学了,感觉自己什么都没学到。所以我决定我必须做点什么。然后写一个遥控器,用c语言,纯sdk编程。我对这个东西没有很好的结构,所以我开始蒙着头。首先要写的是图像传输,技术含量不高,就是截取屏幕像素数据,压缩,传输。后来确定用一个大对话框作为软件的主界面,增加了文件管理、文件传输、CMDShell和文本对话等功能。因为没有好的架构,每次写一个功能,都要追查一大堆bug,然后一个一个的剔除。其实编码的时间并不多,关键是要花很多时间在调试和改进上。高三开学前两天,各项功能如期完成。我把控制端复制到U盘里(纯sdk编程,才100k左右!),去邻居家测试。(因为技术含量不够,无法穿透内网。而且我家用的CableModem不能做端口映射,所以只能作为受控终端来测试)。经测试,除了图传有点卡,其他功能都可以,因为之前在虚拟机上测试过。因为是纯sdk编程,界面也很丑,看着很不爽。不管怎么说,这次实际开发让我体会到了做工程师的感觉,也算是打下了扎实的C语言基础,也为以后的开发增加了经验。高三开始了,迫于父母的压力,我决定好好学习学校的课程,考上更好的大学。上学的第一周还可以,之后我总是对自己残缺的技术感到恐惧。于是我请了病假,回家拿手机。从那时起,我决定利用高三的课余时间好好学习内核编程。一开始,我读的是《Windows内核安全编程从入门到实践》。这本书介绍的范围很广,但并不详尽。不过大部分没看懂的地方都在张凡的《Windows驱动开发详解》和网上得到了解答。还有一本好书《寒江独钓...》,详细解释了filterdriverexamples。当然不能一直盯着内核看,需要转换一下思路。以前都是用C语言写程序,没认真看C++。于是我先认真看了看C++,然后自己在家学了一段时间BCB,一些基本的控件也能轻松上手。学习这个的目的主要是为了快速处理接口。后来觉得用C++想不出汇编代码,在论坛看到《c++逆向与反汇编揭秘》这本书,就在网上下载了一本pdf格式的电子书,用手机看。仔细看了一会儿,终于对C++的反汇编有了一个基本的了解。在网上看到mfc是用来编程的,于是也弄了本《深入浅出mfc》,看了一会,对mfc的机制有了一些粗浅的了解。后来回到家,在百度文库里找了一个vs2010mfc的教程,比书上的容易理解多了。看了一会儿,写了一个基于对话框的加法计算器程序,界面比之前用sdk写的漂亮多了。目前,我正在编写一个拦截窗口创建的程序。内核层hook了ShadowSSDT中的NtCreateWindowEx函数,应用层使用mfc设计了一个基于对话框的界面,可以自定义拦截规则(根据窗口名、类名、窗口大小)。写这个程序的初衷是为了屏蔽迅雷酷狗等软件的广告窗,目的是把所学的东西练练手。我认为只有通过制作实际的程序才能掌握知识。回到学校的时候,我已经把内核层的代码和应用层的代码分别写好了,做了简单的测试。内核层和应用层的通信代码还没有写。下次回家我会先完成它。它。(下次回家是寒假,我们高三一般一个月回家一次,但为了学编程,经常请假回家。)这个寒假我也想制作一个软件来练习我从书中学到的东西。学校里学的东西,想来想去还是要做一个遥控器(除了这个东西,我好像也不知道干什么),但是这次需要用到很多内核编程。(简单介绍一下这个遥控器:用mfc做一个基于对话框的界面,用skin皮肤库美化界面(以前没用过,现在就用吧)。还有隐藏的过程在做内核层,Bypassantivirusfunctionhooks,clearcallbackhooks,keyloggers,主要功能包括文件管理,文件传输,cmd命令执行,截屏,邮件系统通信(这样就可以通过手机发邮件来控制了),对实时传输的效率有要求。另外,这只是一个初步的想法。我没有尝试过使用邮件系统进行通信。)如果寒假时间充足,我必须研究反病毒.以后打算自己做几个游戏小插件,主要是为了提高自己的逆向分析和调试能力,但是做这些的基础还是有一定的编程经验。为了学习编程,我的成绩下降了,父母也因此很失望,老师也经常找我谈话。发这个帖子的目的是请朋友们帮我做个顾问。是继续学编程,还是高三花一年时间考个好学校继续深造?有人说大学里学不到这些东西,但我总觉得好的大学的学习氛围可能更好一些。我很迷茫,最近一直无法静下心来学习校内课程。未来在哪里?朋友给点建议。