windows编程基础:Windows黑客编程基础
疯狂代码 http:/CrazyC/Security/Article72066.html
Windows黑客编程基础(上)
上面题目带有“黑客”两个字请大家别误会了其实没有多少是讲黑客这完全是篇菜鸟级编程杂谈
如果您已是高手就不必在此浪费时间了
前几天在网上看了“病毒”兄写WIN下编程须知文觉得在编程方面要写出篇适合初学者们看入门级
文章确很重要可惜病毒兄只在该文里介绍了线程、消息、句柄等几个基本概念很多初学者看了对编程还是感到
很
迷惑个从来没有写过人如何入门?如何在短时间内写出自己来?笔者带着这些问题写了这篇文章这
也是笔者在学习编程初期所遇到困惑在此根据笔者个人理解将其整理成文希望能引起广大菜鸟们共鸣对
初学者们有所帮助
从理论上说任何门语言都可以在任何个系统上编程只要找到该系统提供“接口”和对系统内部机制有深
入了解就可以了至少我是这么认为正如c语言可以在windows下编程也同样可以在Linux上大放异彩样
编程是项很繁杂工作除了应用编程工具的外了解系统本身内部工作机理非常重要这是你写出稳定兼容
所必不可少前提条件你要在哪种系统上编程就要对该系统机制进行研究至少你应该知道个在那个
系统上是如何运行
、了解Windows 内部机制
Windows 是个“基于事件消息驱动”操作系统
在Windows下执行个只要用户进行了影响窗口动作(如改变窗口大小或移动、单击鼠标等)该动作就会
触发个相应“事件”系统每次检测到个事件时就会给发送个“消息”从而使可以处理该事件
每个Windows 应用都是基于事件和消息而且包含个主事件循环它不停地、反复地检测是否有用户事件发
生每次检测到个用户事件就对该事件做出响应处理完再等待下个事件发生
Windows 下应用不断地重复这过程直至用户终止用代码来描述实际上也就是个消息处理过程
while循环语句
下面便简单介绍下和 Windows 系统密切相关几个基本概念:
⒈窗口:这是我要说第个概念似乎是地球人都知道事儿了窗口是Windows本身以及Windows 环境下
应用基本界面单位但是很多人都误以为只有具有标题栏、状态栏、更大化、最小化按钮这样标准方框才叫
窗口其实窗口概念很广例如按钮和对话框等也是窗口哦只不过是种特殊窗口罢了
从用户角度看窗口就是显示在屏幕上个矩形区域其外观独立于应用事实上它就是生成该窗口
应用和用户间直观接口;从应用角度看窗口是受其控制部分矩形屏幕区应用生成并控
制和窗口有关切内容包括窗口大小、风格、位置以及窗口内显示内容等用户打开个应用后程
序将创建个窗口并在那里默默地等待用户要求每当用户选择窗口中选项即对此做出响应
⒉:通常说都是指个能让计算机识别文件接触得最多便是.exe型可执行文件这个不难
理解
⒊进程:说到进程学过操作系统人都很清楚所谓进程就是应用执行例子(或称个执行)
需要注意是:进程是动态描述而上面说到是静态描述两者有本质区别举个例子从网上
Down了个瑞星杀毒软件Software到C盘但没有运行那个.exe 可执行文件叫做它是个 2进制码文件旦双击
了exe文件图标运行那个“正在运行着瑞星杀毒”便称为进程它在双击那刻被系统创建当你关机
或者在任务栏图标上单击鼠标右键选“退出”时进程便消亡彻底结束了生命进程经历了由“创建”到
“消亡”生命期而自始至终存在于你硬盘上不管你机器是否启动
⒋线程:线程是进程中个执行单元同个进程中各个线程对应于组CPU指令、组CPU寄存器以及
堆栈进程本来就具有动态含义然而实质上是通过线程来执行体现从这个意义上说Windows 中进程动
态性意义已经不是很明显了只算是给所占资源划定个范围而已(个人观点纯属个人理解不必引起争
议!)真正具有动态性意义是线程以前在大 2学习操作系统课时候就有个同学跟笔者提起这点笔者还跟
他驳得面红耳赤呢!现在想想觉得很有道理不得不佩服那位同学对Windows内部机制了解得如此清楚
平台:Windows
环境:VS6.0
语言:C
基本功能 :
获取目标主机(服务端 )的计算机名和用户名
当客户端发送指令 "getpcname“时在客户端打印计算机名
当客户端发送指令"getusername”时在客户端打印用户名
知识储备:
1 什么是C/S结构
C/S结构即客户机服务器结构,简单来说我们的木马就是种植在服务端的,可以获取服务端的信息,而我们在客户端进行一系列的操作来控制木马的活动以使我们的小马
可以对服务器进行控制。话说我们的浏览器就是一个通用的客户端呢。
2 TCP协议和UDP协议
我们的木马的客户端和服务端肯定要进行通信,两者之间不断地发送信息,信息的传递当然需要制定一些规则来确保信息的真实性,正确性,因此人们就制定了一系列的大家通用的协议来规范通信的标准,这就有了TCP和UDP(自然不止这两种了,关于协议的更详细的内容如果感兴趣自己查阅 ) 为了能进行通信,协议规定每个终端都要将各自字符集中的字符先变换为标准字符集的字符后,才进入 *** 传送,到达目的终端之后,再变换为该终端字符集的字符。也就是说我们的小马在收集好服务端的信息后也要遵循这个准则,将信息统一转换为标准的字符集进行传递,客户端再进行解析转换。
基本知识准备完毕,开始行动,具体所用的函数和库我们将在完成代码时一点点的了解。
1. 获取计算机名的函数:
参数解释:
lpBuffer是一个输出参数,是一个指向缓冲区的指针,用于接受计算机名,它的size必须足够大来保存MAX_COMPUTERNAME_LENGTH + 1 characters
lpnSize是一个输入输出参数,所谓输入即限定了lpBuffer的size,而输出即返回的计算机名的大小,不包含末尾的空字符
MSDN地址:
2. 获取用户名的函数:
和GetComputerName的参数基本相同 详细内容:MSDN :
接下来我们就来看下基本的实现的完整代码,暂时不进行通信,别着急慢慢来:
哈,最核心的代码我们已经完成了,是不是很简单?
预备知识:
1 WinSock接口:
Windows Socket的简称,也成为Windows套接字,是微软根据BSD UNIX 操作系统中流行的Berkeley套接字规范而实现的一套Windows下的 *** 编程接口。我们的小木马的 *** 通信就是基于WinSock实现的,当然还有其他的类似的库,这里就不一一介绍了。
使用时我们要引入 #include 和 #pragma comment (lib,"ws2_32")
2 WinSock服务端开发流程:
WinSock的初始化(对应函数WSAStartupup( ) )——> 建立套接字socket(对应函数socket( ) )——>绑定IP和端口 (对应函数bind( ))——> 监听端口 (对应函数listen( ) )——> 接受请求(对应函数accept( ) )——> 发送或者接收信息 (对应函数(send( ) / recv( ) )——> 关闭套接字 (对应函数closesocket( ) )——> 结束动态链接库
(对应函数( WSACleanup( ) )
该函数的之一个参数指明程序请求使用的Socket版本,其中高位字节 指明副版本、低位字节指明主版本;
操作系统利用第二个参数返回请求的Socket的版本信息。
af 指定通信协议簇,对于TCP/IP协议,该参数为PF_INET
type 指定要创建的套接字类型
protocol 指定使用的通信协议,具体和第二个参数有关,第二个参数为SOCK_STREAM则该参数为IPPROTO_TCP ,
若第二个参数为SOCK_DGRAM,则该参数为IPPROTO_UDP
s 服务器端套接字
name制定一个sockaddr结构
namelen指定缓冲区的长度
这里有必要介绍一下sockaddr结构——
sin_family 指代协议族
sin_port 存储端口号(使用 *** 字节顺序)
sin_addr 存储IP地址,使用in_addr这个数据结构
sin_zero 是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。
之一个参数很明显就是处于监听状态的套接字
backlog 客户连接请求队列
s:套接口描述字,该套接口在listen()后监听连接。
addr:(可选)指针,指向一缓冲区,其中接收为通讯层所知的连接实体的地址。Addr参数的实际格式由套接口创建时所产生的地址族确定。
addrlen:(可选)指针,指向存有addr地址长度的整形数。
buf是个指向发送的缓冲区的指针,也就是个地址
len是要发送的数据大小,一般是和buf的大小有关
flag 一般设置为0
s 是要读的套接字描述符。
buf 是要读的信息。
len 是缓 冲的更大长度。
flags 一般设置为0 ( 当然还有其他的参数,这里不详细的讲了 自己man一下吧)
所需要的函数基本讲完了,接下来真正的动手写代码吧,上代码
客户端的代码实现和服务器端比较类似 ,直接看完整的代码:
下面看一下运行的结果吧:
C++黑客编程揭秘与防范第2版pdf扫描版下载(C++黑客编程揭秘与防范)是一本黑客编程数据,由冀云编著。本书是《C++黑客编程揭秘与防范》的升级版,全书在前书的基础上新添加了一些内容,同时也删除了一些过时的内容。书中以Win32应用层下安全开发为中心,介绍Windows系统下的安全开发,内容几乎涵盖了反病毒领域的所有知识,当你认真阅读完之后你也就成功具备了成为一名反病毒工程师的基本素养。小编看到有不少的朋友都在寻找这份书籍的电子版,于是整理分享了出来。有需要的朋友快来绿色先锋下载收藏C++黑客编程揭秘与防范第2版pdf扫描版吧!完整版高清的哦!
内容介绍
市面上关于黑客入门的书籍较为繁多,比如黑客图解入门、黑客工具详解、黑客木马攻防等。但是,对于很多读者来说,可能并不是单单掌握简单的工具使用就能满足的。很多读者学习黑客知识是为了真正掌握与安全相关的知识。与安全相关的知识涉及面比较广,包括数据安全、存储安全、系统安全、Web安全、 *** 安全等,《C++黑客编程揭秘与防范第2版》围绕Windows系统下应用层的开发来介绍一些关于安全方面的知识。
《C++黑客编程揭秘与防范第2版》介绍了操作系统的相关操作,比如进程、线程、注册表等知识。当读者掌握了关于进程、线程、注册表等相关的开发知识后,就可以把一些常规的操作进程、注册表、文件等用代码进行实现,这样,一些日常的操作可与学习的编程知识相结合。除了操作的知识外,本书还介绍了关于 *** 应用程序的开发,了解Winsock的开发后,读者就会明白在应用层客户端与服务器端通信的原理。当然,《C++黑客编程揭秘与防范第2版》除了介绍Win32开发外,还介绍了PE结构、调试接口、逆向等相关的知识。本书的最后部分介绍了关于恶意程序、专杀工具、扫描器等工具的开发。读者只要将前面章节的知识掌握后,后面的实例部分就水到渠成了。
章节目录
第1章 黑客编程入门 1
1.1 初识Windows消息 1
1.1.1 对消息的演示测试 1
1.1.2 对MsgTest代码的解释 3
1.1.3 如何获取窗口的类名称 4
1.2 Windows消息机制的处理 5
1.2.1 DOS程序与Windows程序执行流程
对比 5
1.2.2 一个简单的Windows应用程序 7
1.3 模拟鼠标键盘按键的操作 13
1.3.1 基于发送消息的模拟 13
1.3.2 通过API函数模拟鼠标键盘按键的
操作 16
1.4 通过消息实现进程间的通信 19
1.4.1 通过自定义消息进行进程通信 19
1.4.2 通过WM_COPYDATA消息进行进程
通信 21
1.5 VC相关开发辅助工具 24
1.5.1 Error Lookup工具的使用 24
1.5.2 Windows Error Lookup Tool工具的使用 25
1.5.3 VC6调试工具介绍 26
1.6 总结 33
第2章 黑客 *** 编程 34
2.1 Winsock编程基础知识 34
2.1.1 *** 基础知识 34
2.1.2 面向连接协议与非面向连接协议所
使用的函数 36
2.1.3 Winsock *** 编程知识 36
2.1.4 字节顺序 41
2.2 Winsock编程实例 43
2.2.1 基于TCP的通信 43
2.2.2 基于UDP的通信 45
2.2.3 口令暴力猜解 47
2.3 非阻塞模式开发 54
2.3.1 设置Winsock的工作模式 54
2.3.2 非阻塞模式下的简单远程控制的开发 55
2.4 原始套接字的开发 64
2.4.1 Ping命令的使用 64
2.4.2 Ping命令的构造 65
2.4.3 Ping命令的实现 67
2.5 总结 68
第3章 黑客Windows API编程 69
3.1 文件相关API函数 69
3.1.1 文件相关操作API函数 69
3.1.2 模拟U盘病毒 73
3.1.3 免疫AutoRun病毒工具的编写 75
3.2 注册表编程 77
3.2.1 注册表结构简介 78
3.2.2注册表操作常用API函数介绍 79
3.2.3 注册表下启动项的管理 82
3.3 服务相关的编程 86
3.3.1 如何查看系统服务 86
3.3.2 服务控制管理器的实现 87
3.4 进程与线程 93
3.4.1 进程的创建 94
3.4.2 进程的结束 99
3.4.3 进程的枚举 100
3.4.4 进程的暂停与恢复 104
3.4.5 多线程编程基础 108
3.5 DLL编程 114
3.5.1 编写一个简单的DLL程序 114
3.5.2 远程线程的编程 120
3.6 总结 129
第4章 黑客内核驱动开发基础 130
4.1 驱动版的“Hello World” 130
4.1.1 驱动版“Hello World”代码编写 130
4.1.2 驱动程序的编译 133
4.1.3 驱动文件的装载与输出 133
4.1.4 驱动程序装载工具实现 134
4.2 内核下的文件操作 136
4.2.1 内核文件的读写程序 136
4.2.2 内核下文件读写函数介绍 139
4.3 内核下的注册表操作 145
4.3.1 内核下注册表的读写程序 145
4.3.2 内核下注册表读写函数的介绍 148
4.4 总结 150
第5章 黑客逆向基础 151
5.1 x86汇编语言介绍 151
5.1.1 寄存器 151
5.1.2 常用汇编指令集 154
5.1.3 寻址方式 159
5.2 逆向调试分析工具 160
5.2.1 OllyDbg使用介绍 160
5.2.2 OD破解实例 164
5.3 逆向反汇编分析工具 168
5.4 C语言代码逆向基础 177
5.4.1 函数的识别 177
5.4.2 if…else…结构分析 186
5.4.3 switch结构分析 188
5.4.4 循环结构分析 191
5.5 逆向分析实例 195
5.5.1 wcslen函数的逆向 195
5.5.2 扫雷游戏辅助工具 198
5.6 总结 201
第6章 加密与解密 202
6.1 PE文件结构 202
6.1.1 PE文件结构全貌 202
6.1.2 PE结构各部分简介 203
6.2 详解PE文件结构 204
6.2.1 DOS头部详解IMAGE_DOS_HEA-
DER 204
6.2.2 PE头部详解IMAGE_NT_HEAD-
ERS 206
6.2.3 文件头部详解IMAGE_FILE_HEAD-
ER 207
6.2.4 可选头详解IMAGE_OPTIONAL_
HEADER 209
6.2.5 节表详解IMAGE_SECTION_HEAD-
ER 212
6.3 PE结构的3种地址 214
6.3.1 与PE结构相关的3种地址 214
6.3.2 3种地址的转换 215
6.4 PE相关编程实例 218
6.4.1 PE查看器 218
6.4.2 简单的查壳工具 221
6.4.3 地址转换器 224
6.4.4 添加节区 227
6.5 破解基础知识及调试API函数的
应用 233
6.5.1 CrackMe程序的编写 233
6.5.2 用OD破解CrackMe 235
6.5.3 文件补丁及内存补丁 239
6.6 调试API函数的使用 243
6.6.1 常见的3种断点 *** 243
6.6.2 调试API函数及相关结构体介绍 246
6.7 打造一个密码显示器 256
6.8 KeyMake工具的使用 260
6.9 总结 262
第7章 黑客高手的HOOK技术 263
7.1 HOOK技术知识前奏 263
7.2 内联钩子—Inline Hook 264
7.2.1 Inline Hook的原理 264
7.2.2 Inline Hook的实现 265
7.2.3 Inline Hook实例 269
7.2.4 7字节的Inline Hook 273
7.2.5 Inline Hook的注意事项 274
7.3 导入地址表钩子——IAT HOOK 277
7.3.1 导入表简介 278
7.3.2 导入表的数据结构定义 278
7.3.3 手动分析导入表 280
7.3.4 编程枚举导入地址表 283
7.3.5 IAT HOOK介绍 284
7.3.6 IAT HOOK实例 284
7.4 Windows钩子函数 287
7.4.1钩子原理 288
7.4.2 钩子函数 288
7.4.3 钩子实例 290
7.5 总结 294
第8章 黑客编程实例剖析 295
8.1 恶意程序编程技术 295
8.1.1 恶意程序的自启动技术 295
8.1.2 木马的配置生成与反弹端口技术 303
8.1.3 病毒的感染技术 309
8.1.4 病毒的自删除技术 313
8.1.5 隐藏DLL文件 316
8.1.6 端口复用技术 323
8.1.7 远程cmd通信技术 326
8.2 黑客工具编程技术 331
8.2.1 端口扫描技术 331
8.2.2 嗅探技术的实现 341
8.3 反病毒编程技术 344
8.3.1 病毒专杀工具的开发 344
8.3.2 行为监控HIPS 366
8.3.3 U盘防御软件 371
8.3.4 目录监控工具 376
8.4 实现引导区解析工具 379
8.4.1 通过WinHex手动解析引导区 379
8.4.2 通过程序解析MBR 383
8.4.3 自定义MBR的各种结构体 383
8.4.4 硬盘设备的符号链接 384
8.4.5 解析MBR的程序实现 385
8.5 加壳与脱壳 387
8.5.1 手动加壳 387
8.5.2 编写简单的加壳工具 389
8.6 驱动下的进程遍历 390
8.6.1 配置VMware和WinDbg进行驱动
调试 390
8.6.2 EPROCESS和手动遍历进程 392
8.6.3 编程实现进程遍历 395
8.7 HOOK SSDT 396
8.7.1 SSDT 396
8.7.2 HOOK SSDT 398
8.7.3 Inline HOOK SSDT 400
8.8 总结 403
附录 反病毒公司部分面试题 404
参考文献 406
使用说明
1、下载并解压,得出pdf文件
2、如果打不开本文件,请务必下载pdf阅读器
3、安装后,在打开解压得出的pdf文件
4、双击进行阅读试读
除了华为Mate30 Pro 5G、Mate X等5G手机之外,今天下午的新品发布会上,华为还带来了5G随行WiFi系列,包括:华为5G随行WiFi Pro(8000mAh电池、双向超级快充、反向无线...
小宝宝逐渐辅食添加以后,要保证营养成分全方位,平菇中拥有 很多的维他命D和膳食纤维素,合适小宝宝服用促进消化,推动钙的消化吸收,过早辅食添加也不太好,那麼小宝宝多少可以吃平菇?下边产生详细介绍。...
新买的电脑,开机默认小键盘灯是不亮的,每次输入密码前还要点一下NumberLock按键,很贫苦,下面说说若何设置开机自启。 方式一:开机输入密码时的巧方式 1、开机后到登录窗口输入密码时按下NumLo...
信任我们学习SEO技能的底子意图是为了挣钱,一起提高本身价值和三观,做互联网推行运营是现在的一个趋势,凡是一个有眼光的人都不会放过这一个时机,而SEO归于最省钱的推行运营办法,十分适宜现在的草根站长,...
01 新注册公司没业务 可以不用记账、报税? 温馨提示:工商、税务已经于 2015年6月1日与中国人民银行个人信用征信系统联网!公司末注销的情况下,必须做账报税。否则法人及股东将有信用...
龙王三太子背后藏有钢筋龙脊 春节档电影《新神榜:哪吒重生》发布三太子角色预告,龙王三太子与“新哪吒”李云祥狭...