黑客编程基础汇总

上传人:s9****2 文档编号:489511233 上传时间:2022-09-06 格式:DOCX 页数:9 大小:31.09KB
返回 下载 相关 举报
黑客编程基础汇总_第1页
第1页 / 共9页
黑客编程基础汇总_第2页
第2页 / 共9页
黑客编程基础汇总_第3页
第3页 / 共9页
黑客编程基础汇总_第4页
第4页 / 共9页
黑客编程基础汇总_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《黑客编程基础汇总》由会员分享,可在线阅读,更多相关《黑客编程基础汇总(9页珍藏版)》请在金锄头文库上搜索。

1、黑客编程基础 good一、了解 Windows 内部机制Windows 是一个“基于事件的,消息驱动的”操作系统。在 Windows 下执行一个程序,只要用户进行了影响窗口的动作(如改变窗口大小或移动、 单击鼠标等)该动作就会触发一个相应的“事件”。系统每次检测到一个事件时,就会给程 序发送一个“消息”从而使程序可以处理该事件。每个Windows应用程序都是基于事件和 消息的,而且包含一个主事件循环,它不停地、反复地检测是否有用户事件发生。每次检测 到一个用户事件,程序就对该事件做出响应,处理完再等待下一个事件的发生。Windows 下的应用程序不断地重复这一过程,直至用户终止程序,用代码来描

2、述实际 上也就是一个消息处理过程的while循环语句。下面便简单介绍一下与 Windows 系统密切相关的几个基本概念:1窗口:这是我要说的第一个概念。似乎是地球人都知道的事儿了,窗口是Windows本身 以及 Windows 环境下的应用程序的基本界面单位,但是很多人都误以为只有具有标题栏、 状态栏、最大化、最小化按钮这样标准的方框才叫窗口。其实窗口的概念很广,例如按钮和 对话框等也是窗口哦,只不过是一种特殊的窗口罢了。从用户的角度看,窗口就是显示在屏幕上的一个矩形区域,其外观独立于应用程序,事实上 它就是生成该窗口的应用程序与用户间的直观接口;从应用程序的角度看,窗口是受其控制 的一部分矩

3、形屏幕区。应用程序生成并控制与窗口有关的一切内容,包括窗口的大小、风格、 位置以及窗口内显示的内容等。用户打开一个应用程序后,程序将创建一个窗口,并在那里 默默地等待用户的要求。每当用户选择窗口中的选项,程序即对此做出响应。2程序:通常说的程序都是指一个能让计算机识别的文件,接触得最多的便是.exe型的可执 行文件,这个不难理解。3. 进程:说到进程,学过操作系统的人都很清楚,所谓进程就是应用程序的执行实例(或 称一个执行程序)。需要注意的是:进程是程序动态的描述,而上面说到的程序是静态的描 述,两者有本质的区别。举个例子,从网上Down 了一个瑞星杀毒软件到C盘但没有运行, 那个.exe可执

4、行文件叫做程序,它是一个二进制码的文件。一旦双击了 exe文件图标运行程 序,那个“正在运行着的瑞星杀毒”便称为进程,它在双击的那一刻被系统创建,当你关机 或者在任务栏的图标上单击鼠标右键选“退出”时,进程便消亡,彻底结束了生命。进程经 历了由“创建”到“消亡”的生命期,而程序自始至终存在于你的硬盘上,不管你的机器是 否启动。4线程:线程是进程中的一个执行单元,同一个进程中的各个线程对应于一组CPU指令、 一组CPU寄存器以及一堆栈。进程本来就具有动态的含义,然而实质上是通过线程来执行 体现的,从这个意义上说, Windows 中进程的动态性意义已经不是很明显了,只算是给程 序所占的资源划定一

5、个范围而已(个人观点,纯属个人理解,不必引起争议!),真正具有动 态性意义的是线程。以前在大二学习操作系统课的时候就有个同学跟笔者提起这点,笔者还 跟他驳得面红耳赤呢!现在想想,觉得很有道理,不得不佩服那位同学对Windows内部机 制了解得如此清楚。之所以在此花那么多的篇幅说线程,是因为下面将要介绍到多线程编程技巧,如果不理 解这点,那就很难应用到实践上,希望大家明白。5.消息:我们几乎做每一个动作都会产生一个消息,在用鼠标指点江山的今天,鼠标被移动 会产生WM_MOUSEMOVE消息,鼠标左键被按下会产生WM_LBUTTONDOWN的消息, 鼠标右键按下便产生WM_RBUTTONDOWN消

6、息等等。所有的这些都可以通过GetMessage, SendMessage等函数得到,以后的操作中我们会经常接触到这些函数。6事件:何谓事件?从它的字面意思我们就可以明白它的含义,如在程序运行的过程中改变 窗口的大小或者移动窗口等,都会触发相应的“事件”。7.句柄:单单一个“柄”字便可以解释它的意思了,我们天气热摇扇子的时候只要抓住扇柄 便可以控制整个扇子的运动了,在程序中也差不多是这个意思。通常一个句柄就可以传递我 们所要做的事情。有经验的读者肯定清楚,编写程序总是要和各种句柄打交道的,句柄是系 统用来标识不同对象类型的工具,如窗口、菜单等,这些东西在系统中被视为不同类型的对 象,用不同的句

7、柄将他们区分开来。看看C+教材中是如何给句柄下定义的:“在Win32里,句柄是指向一个无值型对象 (void *)的指针,是一个4字节长的数据”。虽然我对它的本质是什么还是很迷惑,但我知 道句柄并不是一个真正意义上的指针。从结构上看,句柄的确是一个指针,尽管它没有指向 用于存储某个对象的内存位置(很多书都这么说,这正是我的迷惑所在),而实际上句柄指 向的是一个包含了对该对象进行的引用的位置。在编程时,只要抓住了对象的句柄就可以对 该对象进行操作了(我在一个简单木马程序的编写与伪装策略中说到的对QQ密码的截 获就是要找到 QQ 登陆窗口的句柄后才开始截密行动的)。下面再举个例子来说明句柄的运 用

8、:编一个程序,使QQ登陆窗口的号码框和密码框均变黑,相关代码及解释: void _fastcall TForm1:FormCreate(TObject *Sender)HWND hCurWindow, HC,HE;定义三个窗口句柄变量,hCurWindow用于存放QQ用户登 陆窗口的句柄,HC、HE分别存放号码框和密码框的句柄。if(hCurWindow=FindWindow(NULL,QQ用户登录)!=OII(hCurWindow=FindWindow(NULL,OICQ 用户登录)!=0)/很明显,调用FindWindow ()函数去获得QQ登陆窗口的句柄String str;str.sp

9、rintf(0x%x,hCurWindow);TCHAR wClassName255;类名变量 HC=GetWindow(hCurWindow, GW_CHILD);/得到号码框的句柄 HE=GetWindow(HC, GW_HWNDNEXT);/接 着得到密码框的句柄 GetClassName(HE, wClassName, sizeof(wClassName);/得 到类名 GetClassName(HC, wClassName, sizeof(wClassName);/得 到类名 EnableWindow(HE,false);使窗口失效EnableWindow(HC,false);使窗口

10、失效以上代码在C+ Builder下编译通过,只要运行次程序,QQ登陆窗口的号码框和密码框马 上变黑色你还可以添 加 一个 Timer 控 件, 将上面的代 码 copy 到 void _fastcall TForml:TimerlTimer(TObject *Sender)函数中,并在后边加上这一句代码:SendMessage(hCurWindow,WM_CLOSE,0,0); ,?使 QQ 一启动就关闭,让别人永远也用不了 QQ,挺有趣儿的哦8.API 与 SDK: API 是英文 Application Programming Interface 的简称,意为“应用程序接 口”,泛指系统

11、为应用程序提供的一系列接口函数。其实质是程序内的一套函数调用,在编 程的时候可以直接调用,而不必知道其内部实现的过程,只知道它的原型和返回值就可以了, 此外,手头经常放着一本“Windows API大全”之类的书也是必不可少的,不然你根本不知 道哪些API是干什么用的,瞎编也编不出什么东西来。在后面我们会介绍调用API编程的 例子,调用API编程工作虽然烦琐,但由于API函数都被封装在dll库里,程序只有在运行 的时候才调用的,因此程序的体积小而且运行效率高。SDK 是英文 Software Development Kit 的缩写,指“软件开发工具包”,在防火墙的设计 中就经常涉及到 SDK。

12、有关基本的概念就谈这些,那些C/C+的基本语法、什么是面向对象等知识请大家查阅 相关的书籍,此类书籍各大书店已汗牛充栋,不再多叙。下面直接谈谈语种和编程工具的选 择问题,这也是初学者们最迷惑的问题。二、编程语言以及工具的选择:从上面的介绍我们对Windows有了进一步的了解,现在就该开始行动了,选择要学的语言 和工具是第一步,而且是非常重要的一步工作,笔者建议一切以简单、易接受为原则,不然 你会自信心大减的,何必偏要跟自己过不去自讨苦吃呢?在开始的时候很多人都感到迷惑,目前的编程语言那么多,有c、C+、c#、java、汇编、 html等等,究竟学哪些好呢?最开始我该学什么呢?甚至有人将vc、c

13、+ builder也列为两 种不同的语言!这些都是对编程语言缺乏了解造成的。笔者开始的时候也犯过同样的错误, 曾经给自己写过一份计划书:先学c语言,接着学c+、c#、java、汇编、vb、vc、c+ builder , 哪一种语言用多少时间去专攻等等,现在回想起来觉得多么的可笑!只要学得精,一门就够 了。从实用的角度来讲, C+ 是最好的选择(个人意见,其实每一种语言都很好),而 VC 和C+ Builder是其相应开发工具的两大主流,笔者极力推荐初学者使用C+ Builder,因为 很容易上手,如果一下子就用VC的话,也许会打击你的自信心:)。三、谈谈促进编程能力提高的两个途径 如果你是一个

14、黑客技术的狂热者的话,到雅虎去搜索黑客教程的时候就会发现,很多的中文 教程在谈到如何进行黑客编程时,十有八九都会介绍以下两大最佳途径:一、读程序;二、 写程序,并且都提出了教程作者的看法,下面我想谈谈这方面的个人观点。1读程序:我将读程序放在前面是有原因的。在你没有阅读过一份完整的源代码之前,你别 指望能写出有多好的程序来!这是对每一位初学者的忠告也是警告,而且必须具备一定的语 言基础知识,这里的基础知识主要是指语法知识,最起码要能读懂别人的程序的每一行意思。 有没有程序的设计思想,在这个时期并不重要,只要具备一定的语法基础就可以了,思想可 以通过阅读完别人的源程序后分析得来。记得在大一学习

15、C 语言的时候,我们都很重视语法的学习,整天都看教材、做练习, 而且赶在老师的讲课前预习,课后又复习巩固,将一些语法点记得滚瓜烂熟,可后来一到做 课程设计的时候,坐在电脑面前简直是老鼠拖鸡蛋无从下手了,而且不断的问自己:“我 平时的努力哪去了?语法都会了呀,怎么还是做不出程序来?”相信很多人都像笔者以前那 样,错误地以为学会了语法就等于掌握了编程。编程的能力包括经验、技巧、耐心等几个因素,而并非想象中的那样简单,更不要以为 编程就是简简单单的写程序!其实学一门语言并不需要刻意去记那些条条框框的语法,在看代码的时候,遇到了不明 白的地方再去查相关的资料,一点一点补充基础知识再配合源程序的思路,这

16、时的理解才是 最深刻的,我可以肯定地说,这个时候对语法的接受程度绝对比你刚开始时的死记要强!读程序也不能单纯地读,要真正做到“俯而读,昂而思”。好的代码是百读不厌的,比 如Shotgun的那道构造洪水Ping攻击的代码,我至少读了 20遍。笔者喜欢将从网上搜集来 的代码打印到纸上(尽管学校的打印费贵得要命,打一份代码就得花去十几块甚至几十块大 洋),然后边看边做好眉批,遇到一个新函数记下它的功能,一些忘记了的知识在旁边 标出来,还可以写上对程序的看法等等。特别是遇到了一些新的 API 函数,最好标出来, 对你以后编程的时候也许会用得着,最后别忘了分析一下程序的思路,这样对你以后编写类 似的程序很有帮助的。2写程序:问题可谈到点子上了,学那么多语言,读那么多程序最终还不是为了写程序,做 出适合需要的软件来?

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号