关键词不能为空

当前您在: 主页 > 英语 >

黑客编程

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-03-03 12:48
tags:

-

2021年3月3日发(作者:ruj)


黑客编程基础


good





一、了解


Windows


内部机制







Windows


是一个“基于事件的,消息驱动的”操作系统。




Windows


下执行一个程序,只要用户进行了 影响窗口的动作(如改变窗口大小或移动、


单击鼠标等)该动作就会触发一个相应的“事 件”


。系统每次检测到一个事件时,就会给程


序发送一个


“消息”



从而使程序可以处理该事件。


每个


Windows


应用程序都是基于事 件和


消息的,而且包含一个主事件循环,


它不停地、反复地检测 是否有用户事件发生。


每次检测


到一个用户事件,程序就对该事 件做出响应,处理完再等待下一个事件的发生。







Windows


下的应用程序不断地重复这一过程,直至用户 终止程序,用代码来描述实际


上也就是一个消息处理过程的


wh ile


循环语句。



下面便简单介绍一下与



Windows


系统密切相关的几个基本概念:



< /p>


⒈窗口:这是我要说的第一个概念。似乎是地球人都知道的事儿了,窗口是


Windows


本身


以及


Wi ndows


环境下的应用程序的基本界面单位,但是很多人都误以为只有具有标题栏、


状态栏、最大化、最小化按钮这样标准的方框才叫窗口。


其实窗 口的概念很广,例如按钮和


对话框等也是窗口哦,只不过是一种特殊的窗口罢了。



从用户的角度看,


窗口就是显示在屏幕上的 一个矩形区域,


其外观独立于应用程序,


事实上


它就是生成该窗口的应用程序与用户间的直观接口;


从应用程序的角度看,


窗口是受其控制


的一部分矩形屏幕区。


应用 程序生成并控制与窗口有关的一切内容,


包括窗口的大小、


风格 、


位置以及窗口内显示的内容等。


用户打开一个应用程序后,< /p>


程序将创建一个窗口,


并在那里


默默地等 待用户的要求。每当用户选择窗口中的选项,程序即对此做出响应。




⒉程序:


通常说的程序都是指一个能 让计算机识别的文件,


接触得最多的便是


.exe


型的可执


行文件,这个不难理解。




⒊进程:


说到进程,


学过


《操作系统》


的人都很清楚,

所谓进程就是应用程序的执行实例


(或


称一个执行程序)< /p>


。需要注意的是:进程是程序动态的描述,而上面说到的程序是静态的描

< br>述,两者有本质的区别。举个例子,从网上


Down


了一 个瑞星杀毒软件到


C


盘但没有运行,


那 个


.exe


可执行文件叫做程序,


它 是一个二进制码的文件。


一旦双击了


exe

文件图标运行程


序,那个“正在运行着的瑞星杀毒”便称为进程,它在双击的那一刻 被系统创建,当你关机


或者在任务栏的图标上单击鼠标右键选“退出”时,进程便消亡, 彻底结束了生命。进程经


历了由“创建”到“消亡”的生命期,而程序自始至终存在于你 的硬盘上,不管你的机器是


否启动。



⒋线程:线程是进程中的一个执行单元,同一个进程中的各个线程对应于一组


CPU


指令、


一组


CPU


寄存器以及一堆栈。进程本来就具有动态的含义,然而实质上是通过线程来执行


体现的, 从这个意义上说,


Windows


中进程的动态性意义已经不 是很明显了,只算是给程


序所占的资源划定一个范围而已


(个人 观点,


纯属个人理解,


不必引起争议!



,真正具有动


态性意义的是线程。


以 前在大二学习操作系统课的时候就有个同学跟笔者提起这点,


笔者还

跟他驳得面红耳赤呢!现在想想,觉得很有道理,不得不佩服那位同学对


Windo ws


内部机


制了解得如此清楚。



之所以在此花那么多的篇幅说线程,


是因为下面将要介绍到多线程编 程技巧,


如果不理解这


点,那就很难应用到实践上,希望大家明 白。




⒌消息:

我们几乎做每一个动作都会产生一个消息,


在用鼠标指点江山的今天,


鼠标被移动


会产生


WM_MOUSEMOVE


消息,


鼠标左键被按下会产生


WM_LBUT TONDOWN


的消息,


鼠标


右键按下 便产生


WM_RBUTTONDOWN


消息等等。所有的这些都 可以通过


GetMessage



Se ndMessage


等函数得到


,


以后 的操作中我们会经常接触到这些函数。



⒍事件:


何谓事件?从它的字面意思我们就可以明白它的含义,

如在程序运行的过程中改变


窗口的大小或者移动窗口等,都会触发相应的“事件”< /p>





⒎句柄: 单单一个“柄”字便可以解释它的意思了,


我们天气热摇扇子的时候只要抓住扇柄


便可以控制整个扇子的运动了,


在程序中也差不多是这个意思。


通常一个句柄就可以传递我


们所要做的事情。


有经验的读者肯定清楚,


编写程序总是要和各种句柄打交道的,


句柄是系


统用来标识不同对象类型的工具,


如窗口、

< p>
菜单等,


这些东西在系统中被视为不同类型的对


象 ,用不同的句柄将他们区分开来。



看看


C++


教材中是如何给句柄下定 义的:


“在


Win32


里,句柄是指向 一个无值型对象(


void


*


)的指 针,是一个


4


字节长的数据”


。虽然我 对它的本质是什么还是很迷惑,


但我知道句柄


并不是一个真正意 义上的指针。


从结构上看,


句柄的确是一个指针,


尽管它没有指向用于存


储某个对象的内存位置(很多书都这么说,这正是我的 迷惑所在)


,而实际上句柄指向的是


一个包含了对该对象进行的 引用的位置。


在编程时,


只要抓住了对象的句柄就可以对该对象


进行操作了(我在《一个简单木马程序的编写与伪装策略》中说到的对

< br>QQ


密码的截获就是


要找到


QQ


登陆窗口的句柄后才开始截密行动的)


。下面再举个例子来说明 句柄的运用:编


一个程序,使


QQ


登陆 窗口的号码框和密码框均变黑,相关代码及解释:



void __fastcall TForm1::FormCreate(TObject *Sender)


{


HWND


hCurWindow



HC,HE;//


定义三个窗口句柄 变量,


hCurWindow


用于存放


QQ


用户登陆


窗口的句柄,


HC



HE


分别存放号码框和密码框的句柄。



if((hCurWindow=


Fi ndWindow(NULL,







用户登录


< /p>


{//


很明显,调用


FindWindo w


()函数去获得


QQ


登陆窗口的句柄



String str;


f(


}


TCHAR wClassName[255];//


类名变量



HC=GetWindow(hCurWindow, GW_CHILD);//


得到号码框的句柄



HE=GetWindow(HC, GW_HWNDNEXT);//


接着得到密码框的句柄



GetClassName(HE, wClassName, sizeof(wClassName));//


得到类名



GetClassName(HC, wClassName, sizeof(wClassName));//


得到类名


< /p>


EnableWindow(HE,false);//


使窗口失 效



EnableWindow(HC,false);//< /p>


使窗口失效



}


以上代码在


C++ Builder


下 编译通过,只要运行次程序,


QQ


登陆窗口的号码框和密码框马 上


变黑色








加< /p>




Timer






上< /p>






copy



void


__fastcall


TForm1::Timer1Timer(TObject *Sender)


函数中,并在后边加上这一句代码:



SendMessage(hCurWindow,WM_CLOSE,0,0); , ?


使


QQ


一启动就关闭,


让别人永远也用不了


QQ



挺有趣儿的哦




< br>API



SDK



API


是英文



Application Programming Interface

< p>
的简称,


意为


“应用程序接口”

< br>,


泛指系统为应用程序提供的一系列接口函数。


其实质是 程序内的一套函数调用,


在编程的时


候可以直接调用,


而不必知道其内部实现的过程,


只知道它的原型和返回值就可以了,


此外,


手头经常放着一本“


Windows API


大全”之类的书也是必不可少的,不然你根本不知道哪些


API


是干什么用的,瞎编也编不出什么东西来。在后面我们会介绍调用


API


编程的例子,调



AP I


编程工作虽然烦琐,但由于


API


函 数都被封装在


dll


库里,程序只有在运行的时候才

< p>
调用的,因此程序的体积小而且运行效率高。







SDK


是英文



Software


Development


Kit


的缩写


,

指“软件开发工具包”


,在防火墙的设计


中就经常涉及到< /p>


SDK




有关 基本的概念就谈这些,那些


C/C++


的基本语法、什么是面向 对象等知识请大家查阅相关


的书籍,


此类书籍各大书店已汗牛充 栋,


不再多叙。


下面直接谈谈语种和编程工具的选择问


题,这也是初学者们最迷惑的问题。




二、编程语言以及工具的选择:



从上面的介绍我们对


Windows


有了进一步的了解,现在就该开始行动了,选择要学的语言


和工具是第一步,而且是非常 重要的一步工作,笔者建议一切以简单、


易接受为原则,


不然< /p>


你会自信心大减的,何必偏要跟自己过不去自讨苦吃呢?



在开始的时候很多人都感到迷惑,


目前的编程语言那么多,

< p>


c



c++

< p>


c#



java



汇编、


html


等 等,


究竟学哪些好呢?最开始我该学什么呢?甚至有人将


vc< /p>



c++ builder


也列为两种不 同


的语言!


这些都是对编程语言缺乏了解造成的。


笔者开始的时候也犯过同样的错误,


曾经给


自己写过 一份计划书:


先学


c


语言,接着学


c++



c#


、< /p>


java



汇编、


vb



vc



c++ builder


??,


哪一种语言用多少时间去专攻 等等,


现在回想起来觉得多么的可笑!


只要学得精,

< p>
一门就够


了。从实用的角度来讲,


C++


是最好的选择(个人意见,其实每一种语言都很好)


,而


VC



C++


Build er


是其相应开发工具的两大主流,笔者极力推荐初学者使用


C ++


Builder


,因为


很容易上 手,如果一下子就用


VC


的话,也许会打击你的自信心:






三、谈谈促进编程能力提高的两个途径



如果你是一个黑客技术的狂热者的话,


到雅虎去搜索黑客教程的时候就会发现,


很多的中文


教程在谈到如何进行黑客编程时,十有八九都会介绍以下两 大最佳途径:一、读程序;二、


写程序,并且都提出了教程作者的看法,下面我想谈谈这 方面的个人观点。




⒈读程序:


我将读程序放在前面是有原因的。


在你没有阅读过一份完整的源代码 之前,


你别


指望能写出有多好的程序来!


这是对每一位初学者的忠告也是警告,


而且必须具备一定的语


言基础知识,


这里的基础知识主要是指语法知识,


最起码要能读 懂别人的程序的每一行意思。


有没有程序的设计思想,


在这个时 期并不重要,


只要具备一定的语法基础就可以了,


思想可


以通过阅读完别人的源程序后分析得来。



记 得在大一学习


C


语言的时候,


我们都很 重视语法的学习,


整天都看教材、


做练习,

而且赶


在老师的讲课前预习,


课后又复习巩固,

< p>
将一些语法点记得滚瓜烂熟,


可后来一到做课程设


计的时候,坐在电脑面前简直是老鼠拖鸡蛋—无从下手了,而且不断的问自己:


“我平时 的


努力哪去了?语法都会了呀,


怎么还是做不出程序来?”


相信很多人都像笔者以前那样,



误地以为 学会了语法就等于掌握了编程。




编 程的能力包括经验、技巧、耐心等几个因素,而并非想象中的那样简单,


更不要以为编程


就是简简单单的写程序!



其实学一门 语言并不需要刻意去记那些条条框框的语法,


在看代码的时候,


遇到了不明白的


地方再去查相关的资料,


一点一点补充基础知识 再配合源程序的思路,


这时的理解才是最深


刻的,我可以肯定地 说,这个时候对语法的接受程度绝对比你刚开始时的死记要强!



读程序也不能单纯地读,


要真正做到


“俯而读,


昂而思”



好的代码是百读不厌的,


比如


Shotgun


的那道构造洪水

< br>Ping


攻击的代码,我至少读了


20

< br>遍。笔者喜欢将从网上搜集来的代码打印


到纸上


(尽管学 校的打印费贵得要命,


打一份代码就得花去十几块甚至几十块大洋


~~~





后边看边做好眉批,


遇到一个新函数记下它的功能,


一些忘记 了的知识在旁边标出来,


还可


以写上对程序的看法等等。特别是 遇到了一些新的


API


函数,最好标出来,对你以后编程的


时候也许会用得着,


最后别忘了分析一下程序的思路,


这样对你以后编写类似的程序很有帮


助的。




⒉写程序:


问题可谈到点子上了,学 那么多语言,


读那么多程序最终还不是为了写程序,做


出适合需 要的软件来?“君子性非异也,善加于物也”


,笔者认为一切从借鉴开始,先是修


改别人的程序,等到有了一定的程度再写出属于自己的程序。



刚开始写程序,不要奢望一下子写出很出色的程序来,


“万丈高楼平底 起”


,编程贵在动手,


只要你动手去写了,就算只有一句“


printf(



Hello!

< p>


);


”也是一次进步!此外,还要依照自


身的能力循序渐进地写,


开始的时候写一点功能简单的、


篇幅短小的代码,


力求简洁、


完整,


“麻雀虽小,但五脏俱全”


,然后在此基础上进行扩充,一点一点添加功能,下 面笔者摘录


一位国内一流编程高手、


“豪杰超级解霸”的作者梁 肇新的编程心得,请大家看看一个成功


的程序员是如何写程序的,希望对广大菜鸟有所启 发:



写程序的方法:在


Win98< /p>


的环境中,先写主干,用最少的代码实现最基本的功能。然后一


点 点添加功能,


每加一点都要调试。


尽量少用动态分配、


全局变量。充分利用操作系统直接


提供的


API




Win98


下调试通过之后,


再在


Win95


下 调试通过,


然后是


Win97



WindowsME



WinNT4.0


。这样才能写出稳定、快速的程序。



给程序员的建议:



1


、不要急于求成,这样往往欲速不达。



2

< p>
、不要什么东西都想学,什么都没掌握。



3


、每天都要自我总结,分析自己的错误率和废码率,不断加强自我管理。


4


、代码格式很重要。代码要规范、严谨,效率要高。< /p>



5


、不要盲从简单的开发工具(这点笔 者不是很同意,最起码要有一定的功底的人才敢这么


说)




6


、有了成果要公开,不要舍不得,不然 很快会过时的



终于到了《


Windows


黑客编程 基础》的下集,在这期里我们注重于实践,特别是作者介绍


的几个基本技巧,

< p>
菜鸟们要是学会了,


编一个功能简单的黑客程序不是很难的,


单单是修改


注册表的技巧,就几乎能做到像“万花谷”般恶毒的程序了,好! 废话少说,是好是坏,请


大家随小编我走一趟就知道了,诸位请


--



四、黑客编程的几个基本技巧



以下将要谈到的几个基本技巧很重要,


虽然对于编程高手来说这 是在玩小孩子把戏,


但对于


一位初学者,


掌握以下几个技巧将为你的编程扫清道路,


而且很容易编写出有趣的程序,

< p>


养你对编程的兴趣。



技巧⒈学会修改注册表。



相信大家都 知道当浏览了一些网页恶意代码,


IE


标题、

< br>默认主页等被改得面目全非,


这就是


通过改动注册表来更 改系统设置的例子。


Windows


中的注册表是个好东东,它 是


windows


系统的灵魂,是许多软件记录数据的地方(当 然也包括


windows


本身)



windows


通过它记


录大量的数据,< /p>


然后在下一次启动时再读取相应的数据来设置系统。


通过控制注册 表就可以


控制整个系统,


所以很多的黑客程序都在注册表上动手 脚


(尤其是木马程序和作恶剧程序)



学会修改注册表可以实现一些有趣而强大的功能。


我们完全可以通过编程来操作注册表,



到与手动更改注册表编辑器产生一样的效果。


“超级兔子”中的大部分功能就是通过修改注


册表来完成的。操作注册表有专门 的


API


函数,大家可以参考有关资料,下面笔者以

< p>
C++


Builder


为例说明如何在程序中操 作注册表:



程序二:编程修改


IE< /p>


标题内容



新建一个工程,在

< p>
Unit1.h


文件中包含


Registry


单元:



#include



然后就可以在


.cpp


文件操作注册表了,接着来!在窗体的


OnCreate()


里加入以下代码(你可


以在


try{}


里面加入任何操作注册表的代码)




TRegistry* Registry;



Registry = new TRegistry();


创 建一个


TRegistry


类型的对象


Registry


,用于修改注册表。



try{


Registry->RootKey = HKE Y_CURRENT_USER;//


设置主键,这是必不可少的,设置好主键后,就< /p>


可以操作这个主键下所有的键值了。



if( Registry->OpenKey(


调用


OpenKey




打 开括号里所指的键



{


Regist ry->WriteString(


Title


”台湾是中国的 一部分,世界上只有一个中国!



);//



WriteString


() 往注册表里写入


IE


标题


< p>
Registry->CloseKey();//


关闭该键



}


else


{//


如果打开失败的话


< p>
Registry->CreateKey(


就调用


CreateKey


()



建上述键



Registry->WriteString(

< p>
台湾是中国的一部分,世界上只有一个中国!



再写



IE


标题内容



Registry->CloseKey();//


最后关 闭该键,这个也不能忽视,它跟上面的


OpenKey


成对使用 的



}//End of try


__finally


{//


要是出错,跳到这里处理



Registry->CloseKey();//


关闭所要打开的 键



delete Registry;//

< br>销毁


Registry


对象,释放资源。



}


编译运行上面的代码就可以将

< br>IE


的标题改为


“台湾是中国的一部分,


世界上只有一个中国!



了。笔者写了个小程序,可以 测出当前的


IE


标题和默认主页是什么,并可随意修改他们,< /p>


还可以禁止别人修改你的默认主页和注册表编辑器


-


-


-


-


-


-


-


-



本文更新与2021-03-03 12:48,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/700056.html

黑客编程的相关文章