【大学课件】网络安全编程基础_第1页
【大学课件】网络安全编程基础_第2页
【大学课件】网络安全编程基础_第3页
【大学课件】网络安全编程基础_第4页
【大学课件】网络安全编程基础_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【大学课件】网络安全编程基础16、云无心以出岫,鸟倦飞而知还。17、童孺纵行歌,斑白欢游诣。18、福不虚至,祸不易来。19、久在樊笼里,复得返自然。20、羁鸟恋旧林,池鱼思故渊。【大学课件】网络安全编程基础【大学课件】网络安全编程基础16、云无心以出岫,鸟倦飞而知还。17、童孺纵行歌,斑白欢游诣。18、福不虚至,祸不易来。19、久在樊笼里,复得返自然。20、羁鸟恋旧林,池鱼思故渊。第2页第三章网络安全编程基础3.1网络安全编程概述3.2C语言发展的4个阶段3.3网络安全编程

docin/sundae_meng第3页内容提要网络安全编程主要涉及的是操作系统编程,在Windows平台下,目前主要采用C/C++语言。本章将介绍Windows操作系统的基本原理以及C语言的四个发展阶段,每一阶段都用典型的案例说明。详细说明在网络安全领域如何使用C/C++语言实现Socket编程、注册表编程、定时器编程、驻留程序编程和多线程编程。docin/sundae_meng民族团结是新疆各族人民的生命线,新疆是多民族居集的地方,只有搞好团结才能发展经济、文化和科技,新疆的稳定直接影响到国家的发展,身为一名新疆的教育工作者,深知自己肩负的重任,我来自伊犁,亲临了97年伊犁的2.5、2.6又目睹了乌鲁木齐7.5事件。通过这两次事件让我明白了国家承办内初班、内高班的用心良苦。我现在承担内初班的教学工作,在工作中不仅要教好自己的专业知识,还要渗透爱国主义教育和民族团结的意识。我们要和分裂分子争夺下一代。九年级化学第四单元课题3《离子形成》的讲解中改变传统的教学方式,用浅显易懂、紧扣时代脉搏的教学理念把传授化学知识和育人很好的结合起来,如:原子的最外层电子数决定了原子的化学性质,钠原子的最外层一个电子导致钠原子的化学性质活泼,容易和其他物质发生化学反应,这使钠原子很不爽,自然界中的一切物质无论是微观粒子还是人类,都喜欢稳定,工作稳定、收入稳定、生活稳定,这才是幸福的真谛......那么怎样才能稳定呢?这就要求我们各族人民团结、和谐、理解、快乐、健康的生活在新疆这片土地上,一方水土养一方人,用我们各族人民的智慧来建设我们的家园。而钠原子为了求稳定达到最外层8个电子,将不惜失去最外层电子,形成带一个单位正电荷的阳离子,再比如,氯原子最外层7个电子,化学性质也很活泼,为了达到最外层8个电子的稳定结构它将想尽一切办法再得到一个电子,形成了带一个单位负电荷的阴离子,这就是阴、阳离子形成的原因。共价化合物的形成过程:如HCl的形成过程,氢原子要得到一个电子达到第一层2个电子的稳定结构,而氯原子也要得到一个电子达到最外层8个电子的稳定结构,那么氢原子和氯原子相遇后,他俩都要得到电子,这就产生了矛盾,要解决矛盾,武力和战争解决不了问题,必须坐到桌前谈判,和平才能共处。这时氢原子和氯原子想出了一个两全其美的办法,它俩都提供一个电子,形成一对电子,由氢原子和氯原子共同所有,这时氢原子和氯原子都形成了稳定结构,氢原子和氯原子从此不再分离(一般情况下)这样就形成了稳定的氯化氢气体。世上也许没有绝对的对和错,但有协调和混乱之分,有统一和分裂的区别。分裂是一个可怕的词,一个国家分裂了就是战争,一个家庭分裂了就是离异,一个民族分裂了,就是苦难,整体和局部分裂了,就是残缺。我们新疆各民族如果不团结,将会给我们的子孙后代带来的是贫穷、落后和无穷的苦难。对于我们人类,金钱能带来物质享受,但算不上最高的物质幸福。最高的物质幸福是什么呢?托尔斯泰说过:对人类社会来说,是和平;对个人来说是健康。在一个时刻遭受战争和恐怖威胁的世界上,经济再发达又有什么用?如果一个人的生命机能被彻底毁坏了,钱再多又有什么用?所以我们每个人在物质上的最高奢望就是,在一个和平的世界上有一个健康的身体,过一种小康的日子。这就是我们的幸福,这就是美好的世界。作为一名普通的教育工作者,在工作中我们应该向李素丽所说的那样:“卖力的工作,只能干出称职、用心干工作,才能干出优秀”。让我们用自己的诚心、爱心来培养新疆的未来,祖国的明天。一、当代大学生形象教育的意义近年来,随着经济社会的快速发展,高校招生规模迅速扩大,高等教育由精英教育向大众教育转变,高校教学条件、教学内容、教学方式发生了重大变革,加之市场经济转型发展、社会生活节奏加快,互联网络迅速普及,信息传播速度加快,高等学校教育不断受到多元化价值观的冲击,对部分大学生产生了深刻的负面影响,主要表现为人生观和价值观扭曲、心理与行为方式异常、语言举止庸俗化和低级化等。大学生整体形象在公众心目中地位不断下滑,各种关于大学生的负面报道频频见报,大学生的精英形象正在被瓦解。由此可见,社会所期待的“大学生形象”和现实中的“当代大学生形象”之间出现了落差。这个落差将对高教事业产生深远影响,并最终影响到社会主义建设事业。因此,在高等学校开展大学生形象教育,将大学生形象塑造作为一个特定的教育内容,对大学生进行有计划、有意识的教育训练,对国家建设具有深远的意义。二、当代大学生形象的状况华南农业大学资源环境学院以全校在读学生为研究对象组织了专题调查,采取问卷调查的方式,随机向教师及学生发出问卷240份,收回有效问卷222份。经过整理和分析,对大学生形象做初步描述。调查表明,老师对大学生的形象大体持肯定态度,谈及大学生的心理素质,92%的老师给出正面评价。然而,同学们对自己的形象似乎有更高的要求。47.3%的同学并不是很满意自己目前的形象,其中11.3%不满意,45.9%的同学对自己的形象持满意态度。56.8%的同学认为个人形象是外在与内在形象的结合,并且两者同等重要,33.8%认为内在形象更为重要。调查报告列举了不符合大学生应有形象的行为表现:缺乏诚信,无故拖欠学费、无意偿还国家助学贷款、就业时提供虚假信息或随意违约、恶意霸位、课桌文学、厕所文学;在图书馆借来的图书上随意涂划、做笔记;上课迟到早退;随地乱吐痰、台上讲课台下窃窃私语、饭堂打饭不排队;宿舍通宵看电影打游戏影响室友休息等等深入分析,不难发现大学生的个人形象与日常的学习习惯有很大的联系。很多大学生本科四年从未意识到“形象”的重要性,等到临近就业时,才匆匆忙忙对自身的谈吐、着装、应变能力及礼仪礼貌等素质进行速成式改造,而效果往往不尽人意。三、当代大学生形象教育的内涵(一)培养较高的思想素养较高的思想素养是社会主义对人才教育的特殊要求,是大学生形象教育的核心内容,直接体现高校思想政治教育工作的效果。当代大学生应具有正确的人生观价值观、理想观、幸福观,热爱社会主义,有良好的思想道德修养、强烈的社会责任感和集体主义精神。(二)构建合理的知识结构合理的知识结构是大学生适应社会需要的保证,也是社会发展对大学生提出的内在要求。随着社会的进步,国家对大学生的知识结构提出了更高的要求,除了完成义务教育阶段和高等教育阶段的文化知识之外,还应充分发展个人生存发展、人际协调发展、人与社会之间的协调发展应具备的知识。(三)锻炼较强的工作能力在日趋激烈的社会竞争环境下,大学生是否具有较强的工作能力将成为在竞争中取胜的重要因素。许多大学生毕业后都对自己在校期间在能力培养上的不足感到懊悔,这种现象也反映了当今社会在用人方面“看文凭不唯文凭”的趋势。所以,随着社会的发展,“专业”思想即专业对口的思想已经淡化,“专业”不再仅仅是划分人才类型的框架,而是作为一种载体以培养工作能力。当代大学生应具有较强具有较强的思维判断能力,自主地进行理性思维,同时要具备一定的组织管理能力,在团队中或在处理某项具体事务时,能够组织协调各方面关系,发挥集体力量,带领大家完成既定工作任务。另外,当代大学生还应具有较强的动手能力,能把所学知识运用于实践。最后,当代大学生还必须具有较强的适应能力,能尽快适应不断变化的工作内容或工作环境。(四)建立良好的人际关系良好健康的人际关系能体现一个大学生的整体思想素质,是其成长与发展的重要保证。健康的人际关系主要是看其以什么样的态度、方法、途径处理人与人之间关系。大学生必须具有正确的竞争观念,与竞争者相互支持,在比学赶帮中参与竞争,以相互谅解和相互尊重的态度,宽容、谅解别人的弱点,不包庇错误,尊重他人的人格,真诚待人,另外还要有团结合作观念,在集体中加强团结和合作。当代大学生还应具有助人为乐和勇于奉献精神,始终把帮助别人和乐于奉献作为处理人际关系的一条原则,贯穿于人际活动之中。(五)树立文明的生活作风生活作风、言谈举止对大学生而言决不是“小节”问题,它是大学生形象的直接体现,也是大学生思想修养、道德修养和知识修养的综合体现。因而作为接受过高等教育的当代大学生,应树立文明的生活作风,培养与自己的教育经历和知识层次相吻合的言谈举止。其中包括文雅的语言谈吐,以礼貌和尊重态度待人,以表现出大学生特有的文明,智慧和理性;得体的行为举止,克制冲动,注重小节,仪表大方,整洁得体的服饰,朝气蓬勃的精神风貌。大学生是青年人中的佼佼者,理应成为当代青年人的表率,言谈举止要有积极的影响力和感召力。四、当代大学生形象教育的实现途径(一)加强大学生形象意识的教育大学生形象教育是一种长期性、综合性的教育,具有面广、量大、复杂的特点。大学生形象意识的树立和自身形象的塑造主要取决于个人对其意义的认识与理解。高校要引导大学生充分认识自身形象形成和发展的重要性,将形象教育渗透到每一项相关工作,落实到每一个相关环节,利用相应的有利时机,积极地对学生进行宣传、教育,提出大学生在思想素质、知识结构、能力特长、人际关系、生活作风等方面的形象要求。高校除了课堂教学外,可以充分利用讲座、演讲、墙报板报、校报校刊、文体竞赛等学校有形活动和媒介确立典范,针贬时弊,帮助大学生有意识、有目的地培养自身形象。(二)全方位多渠道进行大学生形象教育形象教育具有综合性特点,应通过多种途径和多种方法综合进行。1、依托第一课堂教育,培育具有良好文化、业务素质的内秀形象。高等学校不只是传授专业知识的殿堂,还肩负着弘扬中华民族博大精深的传统文化、培养大学生高尚道德情操、价值观念、人格修养、审美品位,进而帮助完善大学生人格的重担。因此,当代大学生除了学习本专业知识之外,还应跨越不同的学科,如自然科学与人文科学结合。当代大学生必须丰富自己的内涵,励学敦行,塑造卓越的形象。2、从教育的渠道上要做到几个结合:(1)课程教育与管理教育相结合;(2)理论课教育与实践教育相结合;(3)专职人员教育与教师教育相结合,四是校方教育与自我教育相结合,五是正规化教育与校园环境薰陶相结合。大学生形象是社会对大学生在校期间的行为做出的评价和大学生所在院校形象附着在学生身上的形象总和,高等学校要切实把握学生的实际思想状况,全面贯彻党的教育方针,从提高大学生综合素质的角度来提高对大学生形象教育的重视,将此项工作纳入学校重要议事日程,作为一项重要工程来抓,努力加强育人硬环境建设的同时,切实加强育人的软环境建设。学校各个部门也要齐抓共管,采取有力措施保障大学生形象教育的顺利实施。第三章网络安全编程基础3.1网络安全编程概述3.2C语言发展的4个阶段3.3网络安全编程

2docin/sundae_meng内容提要网络安全编程主要涉及的是操作系统编程,在Windows平台下,目前主要采用C/C++语言。本章将介绍Windows操作系统的基本原理以及C语言的四个发展阶段,每一阶段都用典型的案例说明。详细说明在网络安全领域如何使用C/C++语言实现Socket编程、注册表编程、定时器编程、驻留程序编程和多线程编程。3docin/sundae_meng网络安全编程概述从理论上说,任何一门语言可以在任何一个操作系统上编程,C语言可以在Windows下编程,同样也可以在Linux下编程。编程是一项比较综合的工作,除了熟练使用编程工具以外,还要了解系统本身的内部工作机理和编程语言。4docin/sundae_mengWindows内部机制Windows是一个“基于事件的,消息驱动的”操作系统。在Windows下执行一个程序,只要用户进行了影响窗口的动作(如改变窗口大小或移动、单击鼠标等)该动作就会触发一个相应的“事件”。系统每次检测到一个事件时,就会给程序发送一个“消息”,从而使程序可以处理该事件。每次检测到一个用户事件,程序就对该事件做出响应,处理完以后,再等待下一个事件的发生。5docin/sundae_meng八个基本概念与Windows系统密切相关的八个基本概念分别是:窗口、程序、进程、线程消息、事件、句柄、API与SDK。6docin/sundae_meng1、窗口窗口是Windows本身以及Windows环境下的应用程序的基本界面单位,但是很多人都误以为只有具有标题栏、状态栏、最大化、最小化按钮这样标准的方框才叫窗口。其实窗口的概念很广,例如按钮和对话框等也是窗口哦,只不过是一种特殊的窗口罢了。7docin/sundae_meng2、程序通常说的程序都是指一个能让计算机识别的文件接触得最多的是以exe或者com作为扩展名的文件。8docin/sundae_meng3、进程进程就是应用程序的执行实例(或称一个执行程序),进程是程序动态的描述。一个以exe作为扩展名的文件,在没有被执行的时候称之为应用程序,当用鼠标双击执行以后,就被操作系统作为一个进程执行了。当关机或者在任务栏的图标上单击鼠标右键选“退出”时,进程便消亡,彻底结束了生命。进程经历了由“创建”到“消亡”的生命期,而程序自始至终存在于你的硬盘上,不管计算机是否启动。9docin/sundae_meng4、线程线程是进程的一个执行单元,同一个进程中的各个线程对应于一组CPU指令、一组CPU寄存器以及一个堆栈。进程本来就具有动态的含义,是通过线程来体现的。10docin/sundae_meng5、消息消息是应用程序和计算机交互的途径,在计算机上几乎做每一个动作都会产生一个消息鼠标被移动会产生WM_MOUSEMOVE消息,鼠标左键被按下会产生WM_LBUTTONDOWN的消息,鼠标右键按下便产生WM_RBUTTONDOWN消息等等。11docin/sundae_meng事件句柄:6、事件从字面意思就可以明白它的含义,如在程序运行的过程中改变窗口的大小或者移动窗口等,都会触发相应的“事件”,从而调用相关的事件处理函数。7、句柄:单单一个“柄”字便可以解释它的意思了,句柄是一个指针,通过句柄就可以控制该句柄指向的对象。编写程序总是要和各种句柄打交道的,句柄是系统用来标识不同对象类型的工具,如窗口、菜单等,这些东西在系统中被视为不同类型的对象,用不同的句柄将他们区分开来。12docin/sundae_meng8、API与SDKAPI是英文ApplicationProgrammingInterface的缩写,意思是“应用程序接口”,泛指系统为应用程序提供的一系列函数接口。在编程的时候可以直接调用,而不必知道其内部实现的过程,只知道它的原型和返回值就可以了。SDK是英文SoftwareDevelopmentKit的缩写,意思是“软件开发工具包”,微软提供了许多专门的SDK开发包,比如DirectX开发包和语音识别开发包等等。13docin/sundae_meng学习Windows下编程学习语言,选择语言和工具是第一步,而且是非常重要的一步工作,目前的编程语言那么多,有C、C++、C#、Java和汇编语言等等。虽然有很多语言,只要精通一门就够了。从实用的角度来讲,C/C++是最好的选择,而微软公司的VisualC++和Insprise公司(原Borland公司)的C++Builder是其相应开发工具的两大主流。14docin/sundae_meng开发工具在开发工具上,选择比较流行的VC++6.0,而且最好是英文版本,主界面如图3-2所示。15docin/sundae_meng学习编程需要经历三大步学习编程需要经历三大步:一、读程序;二、写程序;三、积累功能代码段。1、读程序在没有阅读过一份完整的源代码之前,别指望能写出有多好的程序!读程序必须具备一定的语言基础知识,基础知识主要是指语法知识,最起码要能读懂程序的每一行意思。有没有程序的设计思想,在这个时期并不重要,只要具备一定的语法基础就可以了。学一门语言并不需要刻意去记条条框框的语法,看代码的时候,遇到了不明白的地方再去查相关的资料,补充基础知识再配合源程序的思路,这时的理解才是最深刻的。2、写程序刚开始写程序,不要奢望一下子写出很出色的程序来,“万丈高楼平底起”,编程贵在动手,只要动手去写就可以了。此外,还要依照自身的能力循序渐进地写,开始的时候写一点功能简单的、篇幅短小的代码,力求简洁、完整,然后在此基础上进行扩充,一点点的添加功能。3、积累功能代码积累非常的重要,将平时自己写的和自己已经读通的程序分类保存起来,建一个属于自己的代码库,需要相关功能的时候,就到代码库中找相关的代码。这样既提高编码的效率又提高了正确率。16docin/sundae_meng选择编程工具目前流行两大语法体系:Basic语系和C语系。同一个语系下语言的基本语法是一样。两大语系如图3-3所示。C语系中,目前两大语言如日中天:C++和Java。C++适宜做系统软件的开发、Java更适宜做网络应用开发。虽然VC++.NET已经面世很久了,但是C++的开发工具目前主流依然是VC++6.0和C++Builder6.0。Java流行的开发工具比较多,比如:IBM公司的VisualAge和WebsphereStudio,Insprise公司JBuilder等等。17docin/sundae_mengVC++6.0VC++是基于C/C++的集成开发工具,目前最常用的版本是VC++6.0。VC++有一套集成开发工具,其中包括各种编辑器、编译工具、集成调试器等等。在编写程序的过程中,各种操作都可以通过单击相应的菜单完成。18docin/sundae_meng新建的是一个控制台程序可以看到许多工程类型,这里新建的是一个控制台程序,选择“Win32ConsoleApplication”,选择工程存放的路径,然后输入工程名“proj3_1”,然后点击按钮“OK”。出现的界面如图3-5所示。在图3-5的界面下选择创建工程的模板,选择空模板“Anemptyproject”,点击按钮“Finish”,出现工程总结窗口,如图3-6所示。19docin/sundae_meng编程工具的使用案例名称:编程工具的使用程序名称:proj3_1.cpp

#include<iostream.h>voidmain(){ cout<<"HelloC++"<<endl;}

20docin/sundae_meng编程工具的使用程序proj3_1.cpp代码包括三行第一行:“#include<iostream.h>”意思是引入C++的基本输入输出函数库,在C语言中引入的是“stdio.h”库。在iostream.h文件中定义了cout的功能是输出,endl的功能是回车换行。第二行:“voidmain()”,main()函数是C/C++的主函数,void表示该函数没有返回值。第四行:“cout<<"HelloC++"<<endl;”,“cout<<”功能是向屏幕输出。21docin/sundae_mengC语言发展的四个阶段C语言经过不断的发展,在编程体系中可以将其分成四个阶段。1、面向过程的C语言。2、面向对象的C++语言。3、SDK编程。4、MFC编程(MicrosoftFoundationClass:微软基类库)。22docin/sundae_meng面向过程的C语言C语言功能非常强大,Linux/Unix操作系统就是用C语言写的,C语言直接调用操作系统提供的API函数可以编写非常前大的程序。C和C++的最主要区别是:C语言中没有类的概念,C++在C的语法基础上引入了类(Class),所以C++和C的语法是基本相同的。面向过程编程,最基本的程序用C语言编写如proj3_2.cpp所示。案例名称:使用C语言编程程序名称:proj3_2.cpp

#include<stdio.h>main(){ printf("HelloDOS\n");}23docin/sundae_meng案例3-1读取命令行参数main函数是程序的主函数,程序执行的时候先从main函数开始。该函数可以带参数,第一个参数是int型的,第二个参数是字符指针,具体使用方法如proj3_3.cpp所示。案例名称:读取命令行参数程序名称:proj3_3.cpp

#include<stdio.h>intmain(intargc,char*argv[]){ inti; for(i=1;i<argc;i++) { printf("%s\n",argv[i]); } return0;}24docin/sundae_meng面向对象的C++语言面向对象程序设计语言可以将一些变量和函数封装到类(Class)中,当变量被类封装后,称之为属性或者数据成员,当函数被类封装后,称之为方法或者成员函数。定义好的一个类,然后定义一个类的实例,这个实例就叫做对象,在C++中可以用类定义对象,使用方法如程序proj3_4.cpp所示。25docin/sundae_meng在C++中使用类案例名称:在C++中使用类程序名称:proj3_4.cpp

#include<iostream.h>classperson{public:intheart;char*name;intrun() //定义成员函数run() { heart=heart+20; returnheart; }};

26docin/sundae_mengvoidmain(){ intiRunStop; personZhangSan; ZhangS="张三"; ZhangSan.heart=72;

cout<<"姓名:"<<ZhangS<<endl; cout<<"跑步前心跳"<<ZhangSan.heart<<endl; //run()为对象的方法

iRunStop=ZhangSan.run(); cout<<"跑步后心跳"<<iRunStop<<endl;}27docin/sundae_mengSDK编程

C库提供了许多函数,可以直接拿来使用。比如利用C库提供的DeleteFile函数来删除一个文件,如程序proj3_6.cpp所示。案例名称:调用C库函数程序名称:proj3_6.cpp

#include<stdio.h>#include<windows.h>intmain(){ DeleteFile("C:\\test.txt"); printf("删除成功\n"); return0;}28docin/sundae_meng编写窗口应用程序案例名称:编写对话框程序名称:proj3_7.cpp

#include<windows.h>intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow){ MessageBox(NULL,TEXT("Hello,Windows!"),TEXT("HelloMsg"),MB_OK); return0;}29docin/sundae_meng编写窗口应用程序参数一:hInstance是当前实例的句柄。句柄是windows编程极其重要的概念。它是一个整数,用于标识程序、窗口和资源等。在这里hInstance表示应用程序本身。参数二:hPrevInstance总是为NULL,在Windows早期版本中,当多次同时运行同一个程序时,系统会创建该程序的多个“实例”,同一程序的所有实例共享代码和内存。程序需要检查hPrevInstance来判断自身的其他实例是否正在运行,以便从已经存在的实例中获取数据。在32位版本中,统一程序运行方式改变了,不在需要了!参数三:lpCmdLine是运行程序的命令行。用户可以单击”开始”菜单中的”运行“选项,然后输入命令来运行一个程序,并且可以指定运行程序所需的参数,这里的命令由lpCmdLine传入。参数四:nCmdShow用于指定程序窗口最初的显示模式,可以正常显示,也可以在初始化就最大化或者最小化。30docin/sundae_meng利用SDK函数创建窗口#include<windows.h>WNDCLASSwc;HWNDh_wnd;MSGmsg;/*消息处理函数wndProc的声明*/longWINAPIWindowProc(HWND,UINT,WPARAM,LPARAM);/*winMain函数的声明*/intPASCALWinMain(HINSTANCEh_CurInstance,HINSTANCEh_PrevInstance,LPSTRp_CmdLine,intm_Show){ /*初始化wndclass结构变量*/ wc.lpfnWndProc=WindowProc; wc.hInstance=h_CurInstance; wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszClassName="TheMainClass";

31docin/sundae_meng/*注册WndClass结构变量*/ RegisterClass(&wc);

/*创建窗口*/ h_wnd=CreateWindow("TheMainClass","OurfirstWindow", WS_OVERLAPPEDWINDOW,0,0,400,500,0,0,h_CurInstance,0);

/*显示窗口*/ ShowWindow(h_wnd,SW_SHOWMAXIMIZED);

/*消息循环*/ while(GetMessage(&msg,NULL,0,0)) DispatchMessage(&msg); return(msg.wParam);}

/*定义消息处理函数*/longWINAPIWindowProc(HWNDh_wnd,UINTWinMsg,WPARAMw_param,LPARAMl_param){ if(WinMsg==WM_DESTROY) PostQuitMessage(0); returnDefWindowProc(h_wnd,WinMsg,w_param,l_param);}32docin/sundae_mengMFC编程SDK的功能非常强大,需要记很多的函数,当面向对象编程成为主流的时候,微软将SDK的函数分类进行封装,这样就诞生了MFC(MicrosoftFoundationClass)。MFC程序的最基本的程序骨架如proj3_9.cpp所示。33docin/sundae_mengMFC编程#include<afxwin.h>classsample:publicCFrameWnd{public: sample()//构造函数

{ Create(NULL,"MyWindow"); MessageBox("MyWindow","CFrame constructor"); }};

classApp:publicCWinApp{public: BOOLInitInstance(); BOOLExitInstance();};

34docin/sundae_meng//InitInstance函数的定义//BOOLApp::InitInstance(){ MessageBox(0,"MyWindow","InitInstance", MB_OK|MB_ICONASTERISK); sample*obj; obj=newsample; m_pMainWnd=obj; obj->ShowWindow(SW_SHOWMAXIMIZED); returnTRUE;}

//ExitInstance函数定义BOOLApp::ExitInstance(){ MessageBox(0,"MyWindow","ExitInstance",MB_OK|MB_ICONHAND); returnTRUE;}//创建应用程序对象Appappobject;35docin/sundae_meng网络安全编程网络安全基础编程技术主要包括6个方面:Socket编程注册表编程文件系统编程定时器编程驻留程序编程多线程编程。36docin/sundae_mengSocket编程谈网络安全编程离开网络编程就会大失其味,凡是基于网络应用的程序都离不开Socket。Socket的意思是套接字,是计算机与计算机之间通信的接口。使用Winsock提供的API函数是最基本的网络编程技术,程序proj3_11.cpp利用Socket获得本机的IP地址和机器名。37docin/sundae_mengSocket编程案例名称:使用Socket得到IP地址程序名称:proj3_11.cpp

#include<winsock.h>#include<stdio.h>voidCheckIP(void)//CheckIP函数,用于获取本机IP地址{ WORDwVersionRequested;//WORD类型变量,用于存放Winsock版本的值

WSADATAwsaData;

charname[255];//用于存放主机名

PHOSTENThostinfo; wVersionRequested=MAKEWORD(2,0); //调用MAKEWORD()函数获得Winsock的版本,用于加载Winsock库

intmain(){ CheckIP();//调用CheckIP()函数获得并输出IP地址

return0;}38docin/sundae_mengif(WSAStartup(wVersionRequested,&wsaData)==0) { //加载Winsock库,如果WSAStartup()函数的返回值为0,说明加载成功

if(gethostname(name,sizeof(name))==0) { //判断是否成功的将本地主机名存放入由name参数指定的缓冲区中

if((hostinfo=gethostbyname(name))!=NULL) { //如果获得主机名成功的话,调用inet_ntoa()函数取得IP地址

LPCSTRip=inet_ntoa(*(structin_addr*)*hostinfo->h_addr_list); printf("本机的IP地址是:%s\n",ip);//输出IP地址

printf("本机的名称是:%s\n",name); } } WSACleanup();//卸载Winsock库,并释放所有资源

}}39docin/sundae_meng注册表编程注册表在计算机中由键名和键值组成,注册表中存储了Window操作系统的所有配置。黑客90%以上对Windows的攻击手段都离不开读写注册表。在运行窗口中输入“regedit”命令可以进入注册表,注册表的界面如图3-37所示。

40docin/sundae_meng注册表编程注册表的句柄可以由调用RegOpenKeyEx()和RegCreateKeyEx()函数得到的,通过函数RegQueryValueEx()可以查询注册表某一项的值通过函数RegSetValueEx()可以设置注册表某一项的值。RegCreateKeyEx()函数和RegSetValueEx()函数的使用方法如程序proj3_12.cpp所示。41docin/sundae_meng操作注册表#include<stdio.h>#include<windows.h>

main(){ HKEYhKey1; DWORDdwDisposition; LONGlRetCode; //创建

lRetCode=RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\WindowsNT\\CurrentVersion\\IniFileMapping\\WebSecurity", 0,NULL,REG_OPTION_NON_VOLATILE,KEY_WRITE, NULL,&hKey1,&dwDisposition);

//如果创建失败,显示出错信息

if(lRetCode!=ERROR_SUCCESS){ printf("ErrorincreatingWebSecuritykey\n"); return(0);}

42docin/sundae_meng//设置第一个键值

lRetCode=RegSetValueEx(hKey1, "Hack_Name", 0, REG_SZ, (byte*)"sixage", 100); //设置第二个键值

lRetCode=RegSetValueEx(hKey1, "Hack_Hobby", 0, REG_SZ, (byte*)"Running", 100);

//如果创建失败,显示出错信息

if(lRetCode!=ERROR_SUCCESS){ printf("ErrorinsettingSection1value\n"); return(0);} printf("注册表编写成功!\n"); return(0);}43docin/sundae_meng判断是否中了“冰河”中了“冰河”的计算机注册表都将被修改了,修改了扩展名为txt的文件的打开方式,在注册表中txt文件的打开方式定义在HKEY_CLASSES_ROOT主键下的“txtfile\shell\open\command”中,如图3-40所示。44docin/sundae_meng案例3-6更改登录用户名当用户登录系统以后,注册表中就会自动记下用户名,下次登录时再把登录名显示出来,如图3-42所示。45docin/sundae_meng案例3-6更改登录用户名当非法入侵计算机以后,同样会留下非法登录的用户名,所以需要将用户名修改会原来的值。该用户名记录在注册表的HKEY_LOCAL_MACHINE主键下的SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon子键中,键的名称是:DefaultUserName,如图3-43所示。46docin/sundae_meng更改系统登录用户案例名称:更改系统登录用户程序名称:proj3_14.cpp

#include<stdio.h>#include<windows.h>

main(){ HKEYhKey1; LONGlRetCode; lRetCode=RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\WindowsNT\\CurrentVersion\\Winlogon", 0,KEY_WRITE, &hKey1 );

if(lRetCode!=ERROR_SUCCESS){ printf("Errorincreatingappname.inikey\n"); return(0);}

47docin/sundae_menglRetCode=RegSetValueEx(hKey1, "DefaultUserName", 0, REG_SZ, (byte*)"Hacker_sixage", 20);

if(lRetCode!=ERROR_SUCCESS){ printf("ErrorinsettingSection1value\n"); return(0);

} printf("已经将登录名该成Hacker_sixage"); return(0);}48docin/sundae_meng文件系统编程文件系统编程非常的重要,可以在DOS命令行下执行的操作都可以使用程序实现。在DOS命令行下使用命令“netuserHacker/add”添加一个用户,同样可以在程序中实现,如程序proj3_15.cpp所示。案例名称:添加系统用户程序名称:proj3_15.cpp

49docin/sundae_meng#include<stdio.h>#include<windows.h>main(){ char*szCMD="netuserHacker/add"; BOOLbSuccess; PROCESS_INFORMATIONpiProcInfo; STARTUPINFOInfo; Info.cb=sizeof(STARTUPINFO); Info.lpReserved=NULL; Info.lpDesktop=NULL; Info.lpTitle=NULL; Info.cbReserved2=0; Info.lpReserved2=NULL; bSuccess=CreateProcess(NULL,szCMD,NULL,NULL,false,NULL,NULL,NULL,&Info,&piProcInfo); if(!bSuccess) printf("创建进程失败!"); return1;}50docin/sundae_meng文件拷贝和移动案例名称:文件拷贝和移动程序名称:proj3_16.cpp

#include<stdio.h>#include<windows.h>main(){ CopyFile("C:\\File1.txt","C:\\File2.txt",TRUE); MoveFile("C:\\File1.txt","C:\\File3.txt"); return1;}51docin/sundae_meng系统时间案例名称:系统时间程序名称:proj3_17.cpp

#include<windows.h>#include<stdio.h>main(){ SYSTEMTIMEsysTime; GetLocalTime(&sysTime); printf("%d年%d月%d日%d时%d分%d秒\n", sysTime.wYear,sysTime.wMonth,sysTime.wDay,sysTime.wHour, sysTime.wMinute,sysTime.wSecond); return1;}52docin/sundae_meng定时器编程著名的“CIH病毒”每年定时发作,其中需要利用定时器来控制程序的执行。定时器程序分成两大类,一类是循环执行另一类是根据条件只执行一次。在程序中加载定时器,如程序proj3_18所示。53docin/sundae_meng定时器编程案例名称:定时器编程程序名称:proj3_18.cpp

#include<windows.h>WNDCLASSwc;HWNDh_wnd;MSGmsg;

/*消息处理函数wndProc的声明*/longWINAPIWindowProc(HWND,UINT,WPARAM,LPARAM);

/*winMain函数的声明*/intPASCALWinMain(HINSTANCEh_CurInstance, HINSTANCEh_PrevInstance,LPSTR54docin/sundae_mengp_CmdLine,intm_Show){ /*初始化wndclass结构变量*/ wc.lpfnWndProc=WindowProc; wc.hInstance=h_CurInstance; wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszClassName="TheMainClass";

/*注册WndClass结构变量*/ RegisterClass(&wc);

/*创建窗口*/ h_wnd=CreateWindow("TheMainClass","OurfirstWindow", WS_OVERLAPPEDWINDOW,0,0,400,500,0,0,h_CurInstance,0);

/*显示窗口*/ ShowWindow(h_wnd,SW_SHOWMAXIMIZED);

/*消息循环*/ while(GetMessage(&msg,NULL,0,0)) DispatchMessage(&msg); return(msg.wParam);}#defineID_TIMER155docin/sundae_meng定时器编程/*定义消息处理函数*/longWINAPIWindowProc(HWNDh_wnd,UINTWinMsg, WPARAMw_param,LPARAMl_param){ staticBOOLfFlipFlop=FALSE; HBRUSHhBrush; HDChdc; PAINTSTRUCTps; RECTrc;

switch(WinMsg) { caseWM_CREATE: SetTimer(h_wnd,ID_TIMER,1000,NULL); return0;

caseWM_TIMER: MessageBeep(-1); fFlipFlop=!fFlipFlop; InvalidateRect(h_wnd,NULL,FALSE); return0; 56docin/sundae_mengcaseWM_PAINT: hdc=BeginPaint(h_wnd,&ps); GetClientRect(h_wnd,&rc); hBrush=CreateSolidBrush(fFlipFlop?RGB(255,0,0):RGB(0,0,255)); FillRect(hdc,&rc,hBrush);

EndPaint(h_wnd,&ps); DeleteObject(hBrush); return0;

caseWM_DESTROY: KillTimer(h_wnd,ID_TIMER); PostQuitMessage(0);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论