10 2023 档案

摘要:使用`CRC32`还可实现图片去重功能,如下`FindRepeatFile`函数,运行后通过对所有文件做`crc`校验并将校验值存储至`CatalogueDict`字典内,接着依次提取`CRC`特征值并将其存储至`CatalogueList`列表内,接着通过统计特征值出现次数并将该次数放入到`CountDict`字典内,最后循环这个字典,并以此输出文件特征与重复次数,将重复值放入到`RepeatFileFeatures`列表内。 阅读全文
posted @ 2023-10-31 08:24 lyshark 阅读(310) 评论(0) 推荐(0) 编辑
摘要:Boost ASIO库是一个基于C++语言的开源网络编程库,该库提供了成熟、高效、跨平台的网络API接口,并同时支持同步与异步两种模式,ASIO库提供了多重I/O对象、异步定时器、可执行队列、信号操作和协程等支持,使得开发者可以轻松地编写可扩展的高性能网络应用程序,同时保持代码简洁、易于维护。在学习`ASIO`库之前,我们先来实现一个简单的地址解析功能,Boost库中提供了`ip::tcp::resolver`对象,该对象可用于解析给定主机名和端口号的`IP`地址,学会使用这个对象即可实现对特定主机域名地址的解析功能,如下封装实现了`GetDNSAddress`该函数传入一个域名,并输出该域名所对应的`IP`地址列表,并返回给`std::vector`容器内,其实现原理如下所示。 阅读全文
posted @ 2023-10-31 08:20 lyshark 阅读(527) 评论(0) 推荐(0) 编辑
摘要:在当今的Web安全行业中,识别目标网站的指纹是渗透测试的常见第一步。指纹识别的目的是了解目标网站所使用的技术栈和框架,从而进一步根据目标框架进行针对性的安全测试,指纹识别的原理其实很简单,目前主流的识别方式有下面这几种。这些指纹识别方式都是通过分析目标网站的特定特征或行为,从中推断所使用的框架或技术。它们可以帮助渗透测试人员了解目标网站的技术栈和框架,从而进行针对性的安全测试和漏洞扫描。本节内容中我们将采用第二种方式通过哈希鉴定来确定目标指纹信息,此种方法需要有完善的特征库,这些库我们可以自行寻找制作,也可以使用已有的库经过转换后获取。 阅读全文
posted @ 2023-10-30 13:11 lyshark 阅读(518) 评论(0) 推荐(0) 编辑
摘要:AES算法是一种对称加密算法,全称为高级加密标准(Advanced Encryption Standard)。它是一种分组密码,以`128`比特为一个分组进行加密,其密钥长度可以是`128`比特、`192`比特或`256`比特,因此可以提供不同等级的安全性。该算法采用了替代、置换和混淆等技术,以及多轮加密和密钥扩展等机制,使得其加密效果优秀,安全性高,被广泛应用于各种领域中,如数据加密、文件加密、网络安全等。AES算法加密和解密使用的密钥是相同的,该算法加密和解密速度较快,适用于对大量数据进行加密解密的场景。在实际应用中,通常采用混合加密方式,即使用RSA算法加密对称加密算法中的密钥,再使用对称加密算法加密数据,以保证数据的机密性和加密解密的效率。 阅读全文
posted @ 2023-10-30 13:01 lyshark 阅读(1217) 评论(0) 推荐(2) 编辑
摘要:Web服务器本质上是一个提供Web服务的应用程序,运行在服务器上,用于处理HTTP请求和响应。它接收来自客户端(通常是浏览器)的HTTP请求,根据请求的URL、参数等信息生成HTTP响应,并将响应返回给客户端,完成客户端的请求。Web服务器可以使用多种编程语言和技术实现,通过对套接字的处理并遵循HTML等浏览器兼容格式即可实现。如果需要自行实现一个Web服务器则本质上就是需要完成套接字的处理,并在处理时增加遵循HTTP格式的头部数据即可,如下是一个简单的支持Web服务器的套接字程序,该程序运行后会在本机的`80`端口侦听,当用于通过浏览器访问时则会自动传输一段话。 阅读全文
posted @ 2023-10-29 11:22 lyshark 阅读(318) 评论(0) 推荐(0) 编辑
摘要:RSA算法是一种非对称加密算法,由三位数学家`Rivest`、`Shamir`和`Adleman`共同发明,以他们三人的名字首字母命名。RSA算法的安全性基于大数分解问题,即对于一个非常大的合数,将其分解为两个质数的乘积是非常困难的。RSA算法是一种常用的非对称加密算法,与对称加密算法不同,RSA算法使用一对非对称密钥,分别为公钥和私钥,公钥和私钥是成对生成的,公钥可以公开,用于加密数据和验证数字签名,而私钥必须保密,用于解密数据和生成数字签名。因此,RSA算法的使用场景是公钥加密、私钥解密,或者私钥加密、公钥解密。 阅读全文
posted @ 2023-10-29 11:20 lyshark 阅读(821) 评论(0) 推荐(1) 编辑
摘要:CRC文件校验是一种用于验证文件完整性的方法,通过计算文件的CRC值并与预先计算的CRC校验值进行比较,来判断文件是否发生变化,此类功能可以用于验证一个目录中是否有文件发生变化,如果发生变化则我们可以将变化打印输出,该功能可用于实现对特定目录的验证。首先实现文件与目录的遍历功能,递归输出文件或目录,在Python中有两种实现方式,我们可以通过自带的os.walk函数实现,也可以使用os.listdir实现,这里笔者依次封装两个函数,函数ordinary_all_file使用第一种方式,函数recursion_all_file使用第二种,这两种方式都返回_file列表,读者可使用列表接收输出数据集。 阅读全文
posted @ 2023-10-28 15:27 lyshark 阅读(494) 评论(0) 推荐(0) 编辑
摘要:OpenSSL 是一种开源的加密库,提供了一组用于加密和解密数据、验证数字证书以及实现各种安全协议的函数和工具。它可以用于创建和管理公钥和私钥、数字证书和其他安全凭据,还支持`SSL/TLS`、`SSH`、`S/MIME`、`PKCS`等常见的加密协议和标准。OpenSSL 的功能非常强大,可以用于构建安全的网络通信、加密文件和数据传输,还可以用于创建和验证数字签名、生成随机数等安全应用。它被广泛用于Web服务器、操作系统、网络应用程序和其他需要安全保护的系统中。 阅读全文
posted @ 2023-10-28 08:17 lyshark 阅读(781) 评论(0) 推荐(0) 编辑
摘要:Selenium是一个自动化测试框架,主要用于Web应用程序的自动化测试。它可以模拟用户在浏览器中的操作,如打开网页、点击链接、填写表单等,并且可以在代码中实现条件判断、异常处理等功能。Selenium最初是用于测试Web应用程序的,但也可以用于其他用途,如爬取网站数据、自动化提交表单等。Selenium支持多种编程语言,如Java、Python、C#等,同时也支持多种浏览器,如Chrome、Firefox、Safari等。 阅读全文
posted @ 2023-10-27 16:06 lyshark 阅读(388) 评论(0) 推荐(0) 编辑
摘要:BeautifulSoup库用于从HTML或XML文件中提取数据。它可以自动将复杂的HTML文档转换为树形结构,并提供简单的方法来搜索文档中的节点,使得我们可以轻松地遍历和修改HTML文档的内容。广泛用于Web爬虫和数据抽取应用程序中。 阅读全文
posted @ 2023-10-27 09:22 lyshark 阅读(736) 评论(0) 推荐(2) 编辑
摘要:Request库可以用来发送各种`HTTP`请求,该框架的特点是简单易用,同时支持同步和异步请求,支持`HTTP`协议的各种方法和重定向。它还支持`Cookie`、`HTTPS`和认证等特性。 `Request`库的使用非常广泛,可以用于网络爬虫、API调用、网站测试等场景。 阅读全文
posted @ 2023-10-26 16:33 lyshark 阅读(320) 评论(0) 推荐(0) 编辑
摘要:NPCAP 库是一种用于在Windows平台上进行网络数据包捕获和分析的库。它是WinPcap库的一个分支,由Nmap开发团队开发,并在Nmap软件中使用。与WinPcap一样,NPCAP库提供了一些API,使开发人员可以轻松地在其应用程序中捕获和处理网络数据包。NPCAP库可以通过WinPcap API进行编程,因此现有的WinPcap应用程序可以轻松地迁移到NPCAP库上。自定义数据包过滤其核心原理是使用`pcap_compile`函数,该函数用于编译一个过滤表达式并生成过滤程序。该函数可以把用户指定的过滤表达式编译成可被BPF(Berkeley Packet Filter)虚拟机处理的内部表示格式,从而可以快速过滤捕获的数据包,仅保留指定条件的数据包。 阅读全文
posted @ 2023-10-26 16:18 lyshark 阅读(514) 评论(0) 推荐(0) 编辑
摘要:NPCAP 库是一种用于在`Windows`平台上进行网络数据包捕获和分析的库。它是`WinPcap`库的一个分支,由`Nmap`开发团队开发,并在`Nmap`软件中使用。与`WinPcap`一样,NPCAP库提供了一些`API`,使开发人员可以轻松地在其应用程序中捕获和处理网络数据包。NPCAP库可以通过`WinPcap API`进行编程,因此现有的WinPcap应用程序可以轻松地迁移到NPCAP库上。与WinPcap相比,NPCAP库具有更好的性能和可靠性,支持最新的操作系统和硬件。它还提供了对`802.11`无线网络的本机支持,并可以通过`Wireshark`等网络分析工具进行使用。 NPCAP库是在`MIT`许可证下发布的,因此可以在免费和商业软件中使用。 阅读全文
posted @ 2023-10-26 08:29 lyshark 阅读(5190) 评论(0) 推荐(4) 编辑
摘要:Scapy 是一款使用纯Python编写的跨平台网络数据包操控工具,它能够处理和嗅探各种网络数据包。能够很容易的创建,发送,捕获,分析和操作网络数据包,包括TCP,UDP,ICMP等协议,此外它还提供了许多有用的功能,例如嗅探网络流量,创建自定义协议和攻击网络的安全测试工具。使用Scapy可以通过Python脚本编写自定义网络协议和攻击工具,这使得网络安全测试变得更加高效和精确。网络端口扫描用于检测目标主机上开放的网络端口。端口扫描可以帮助安全专业人员识别存在的网络漏洞,以及识别网络上的服务和应用程序。在进行端口扫描时,扫描程序会发送特定的网络数据包,尝试与目标主机的每个端口进行通信。如果端口处于打开状态,则扫描程序将能够成功建立连接。否则,扫描程序将收到一条错误消息,表明目标主机上的该端口未开放。 阅读全文
posted @ 2023-10-25 16:54 lyshark 阅读(2144) 评论(0) 推荐(1) 编辑
摘要:原生套接字抓包的实现原理依赖于`Windows`系统中提供的`ioctlsocket`函数,该函数可将指定的网卡设置为混杂模式,网卡混杂模式(`Promiscuous Mode`)是常用于计算机网络抓包的一种模式,也称为监听模式。在混杂模式下,网卡可以收到经过主机的所有数据包,而非只接收它所对应的`MAC`地址的数据包。一般情况下,网卡会根据`MAC`地址过滤数据包,只有`MAC`地址与网卡所对应的设备的通信数据包才会被接收和处理,其他数据包则会被忽略。但在混杂模式下,网卡会接收经过它所连接的网络中所有的数据包,这些数据包可以是面向其他设备的通信数据包、广播数据包或多播数据包等。混杂模式可以通过软件驱动程序或网卡硬件实现。启用混杂模式的主要用途之一是网络抓包分析,使用混杂模式可以捕获网络中所有的数据包,且不仅仅是它所连接的设备的通信数据包。因此,可以完整获取网络中的通信内容,便于进行网络监控、安全风险感知、漏洞检测等操作。 阅读全文
posted @ 2023-10-25 09:12 lyshark 阅读(1417) 评论(0) 推荐(4) 编辑
摘要:GeoIP2是一种IP地址定位库,它允许开发人员根据`IP`地址查找有关位置和地理位置的信息。它使用`MaxMind`公司的IP地址数据库,并提供一个方便的Python API。GeoIP2可以用于许多不同的应用程序,例如网站分析、广告定位和身份验证。GeoIP2提供了许多不同的信息,例如国家、城市、邮政编码、经纬度、时区等等。它还可以使用IPv6地址进行查询。 阅读全文
posted @ 2023-10-24 18:04 lyshark 阅读(960) 评论(0) 推荐(3) 编辑
摘要:相对于外部绘图技术的不稳定性,内部绘制则显得更加流程与稳定,在`Dx9`环境中,函数`EndScene`是在绘制`3D`场景后,用于完成将最终的图像渲染到屏幕的一系列操作的函数。它会将缓冲区中的图像清空,设置视口和其他渲染状态,执行顶点和像素着色器,最后在后台缓冲区中生成一张完整的渲染图像,然后将其呈现到屏幕上,完成一次绘制操作。而`EndScene`是`IDirect3DDevice9`第`43`个函数,我们通过对该函数进行挂钩,并将该函数绘制之前的流程劫持到自身进程内的`MyEndScene`函数内做图形的增加工作,当我们增加好所需功能后再将该函数指向原来的函数入口,此时`EndScene`函数再次渲染则会出现我们所新增的功能,利用这种方式即可实现屏幕图形绘制效果,至于笔者是如何确定该函数是第43个的,读者可以在`IDirect3DDevice9`上面右键查看定义,至此即可看到函数所在位置; 阅读全文
posted @ 2023-10-24 09:42 lyshark 阅读(499) 评论(0) 推荐(1) 编辑
摘要:组播模式相比单播模式可以提高网络的效率和带宽利用率,因为组播数据包只需要发送一次,就可以被多个接收者接收,而不需要每个接收者都单独发送一份数据包。这在需要同时向多个接收者发送相同数据的场景下特别有用,如视频会议、在线教育、流媒体等。组播模式可以减少网络拥塞,降低网络延迟,并且可以减少网络中的冗余数据。通过构建组播服务器端与客户端,并配合键盘鼠标控制接口,当服务器端执行一个操作时客户端同步执行,通过此方法读者可轻易的实现一个简单的镜像服务器,当服务器规模庞大而主机系统版本相同时,该功能可实现服务器端执行一次客户端即可实现批量部署的效果。 阅读全文
posted @ 2023-10-24 08:43 lyshark 阅读(366) 评论(0) 推荐(0) 编辑
摘要:WSASocket无管道反向`CMD`,与无管道正向`CMD`相反,这种方式是在远程主机上创建一个`TCP`套接字,并绑定到一个本地地址和端口上。然后在本地主机上,使用`WSASocket`函数连接到远程主机的套接字,并将标准输入、输出和错误输出重定向到套接字的句柄上。这样,本地主机就可以通过网络连接到远程主机的套接字,发送`CMD`命令并获取命令输出结果。这种方式称为无管道反向`CMD`,因为`CMD`进程的输入输出是通过套接字而非管道进行的。 阅读全文
posted @ 2023-10-23 08:52 lyshark 阅读(380) 评论(0) 推荐(0) 编辑
摘要:WSASocket 无管道正向CMD,使用`WSASocket`函数创建一个TCP套接字,并绑定到一个本地地址和端口上。然后使用`CreateProcess`函数创建一个新的`CMD`进程,并将标准输入、输出和错误输出重定向到套接字的句柄上。这样,客户端可以通过网络连接到这个套接字,发送`CMD`命令并获取命令输出结果。这种方式称为无管道正向`CMD`,因为`CMD`进程的输入输出是通过套接字而非管道进行的。WSASocket 函数用于创建重叠IO套接字,重叠 `I/O(Overlapped I/O)`是一种异步 `I/O(Asynchronous I/O)`机制,它可以在执行 `I/O`操作时同时进行其他的操作或处理,提高了系统的并发性和效率。 阅读全文
posted @ 2023-10-23 08:39 lyshark 阅读(763) 评论(0) 推荐(0) 编辑
摘要:本章内容涉及使用`Socket API`和`CMD`命令行工具实现本地`CMD`命令执行、无管道正向`CMD`和无管道反向`CMD`三种功能。执行本地`CMD`实现使用`CreateProcess`函数创建一个新的`CMD`进程,并将标准输入、输出和错误输出重定向到当前进程的标准输入、输出和错误输出。无管道正向`CMD`和无管道反向`CMD`使用`WSASocket`函数创建`TCP`套接字,并将`CMD`进程的标准输入、输出和错误输出重定向到套接字的句柄上,通过网络连接实现远程命令执行功能。首先来实现一个`CMD`命令行运行功能,通过使用`CreatePipe`创建匿名管道,并使用`CreateProcess`函数创建一个新的`CMD`进程,然后将标准输入、输出和错误输出重定向到当前进程的标准输入、输出和错误输出。这样就可以通过当前进程的输入输出来执行`CMD`命令并获取命令输出结果。 阅读全文
posted @ 2023-10-22 10:08 lyshark 阅读(1262) 评论(0) 推荐(1) 编辑
摘要:C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。 阅读全文
posted @ 2023-10-21 15:05 lyshark 阅读(345) 评论(0) 推荐(0) 编辑
摘要:C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。 阅读全文
posted @ 2023-10-21 15:04 lyshark 阅读(327) 评论(0) 推荐(0) 编辑
摘要:C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。 阅读全文
posted @ 2023-10-21 15:03 lyshark 阅读(346) 评论(0) 推荐(0) 编辑
摘要:C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。 阅读全文
posted @ 2023-10-21 15:01 lyshark 阅读(344) 评论(0) 推荐(0) 编辑
摘要:C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。 阅读全文
posted @ 2023-10-21 15:00 lyshark 阅读(426) 评论(0) 推荐(0) 编辑
摘要:C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。 阅读全文
posted @ 2023-10-21 14:59 lyshark 阅读(393) 评论(0) 推荐(0) 编辑
摘要:ARP (Address Resolution Protocol,地址解析协议),是一种用于将 `IP` 地址转换为物理地址(`MAC地址`)的协议。它在 `TCP/IP` 协议栈中处于链路层,为了在局域网中能够正确传输数据包而设计,由协议数据单元和对应的操作命令组成。`ARP` 既可以由操作系统处理,也可以由网卡处理。该协议的作用是通过一个局域网上的互联网协议(IP)地址来查询对应的物理硬件地址,如数据包发送到路由器时,ARP 协议将使用嵌入在数据包中的目的 IP 地址查找对应的物理地址,路由器根据获取的 MAC 地址转发数据包到下一个网络。 阅读全文
posted @ 2023-10-21 08:37 lyshark 阅读(1006) 评论(0) 推荐(1) 编辑
摘要:dpkt项目是一个`Python`模块,主要用于对网络数据包进行解析和操作。它可以处理多种协议,例如`TCP`、`UDP`、`IP`等,并提供了一些常用的网络操作功能,例如计算校验和、解析`DNS`数据包等。由于其简单易用的特性,`dpkt`被广泛应用于网络安全领域,例如流量分析、漏洞利用、入侵检测等。使用该库可以快速解析通过各类抓包工具抓到的数据包,从而提取分析包内的参数。在分析数据包之前我们需要抓取特定数据包并保存为`*.pcap`格式,通常情况下这种数据包格式可通过`WireShark`等工具抓取到,当然也可以使用上一篇提到的`Scapy`库实现,该库中存在一个`sniff`函数,该函数可以实现网络抓包功能,如下一个演示案例我们分别通过`sniff(count=2)`函数抓取两个数据包并使用`wrpcap()`函数将其保存到文件内,当需要分析时可通过调用`rdpcap()`函数打开数据包即可实现分析。 阅读全文
posted @ 2023-10-20 18:48 lyshark 阅读(1354) 评论(0) 推荐(0) 编辑
摘要:端口扫描是一种网络安全测试技术,该技术可用于确定对端主机中开放的服务,从而在渗透中实现信息搜集,其主要原理是通过发送一系列的网络请求来探测特定主机上开放的`TCP/IP`端口。具体来说,端口扫描程序将从指定的起始端口开始,向目标主机发送一条`TCP`或`UDP`消息(这取决于端口的协议类型)。如果目标主机正在监听该端口,则它将返回一个确认消息,这表明该端口是开放的。如果没有响应,则说明该端口是关闭的或被过滤。 阅读全文
posted @ 2023-10-20 08:52 lyshark 阅读(1108) 评论(0) 推荐(3) 编辑
摘要:PeFile模块是`Python`中一个强大的便携式第三方`PE`格式分析工具,用于解析和处理`Windows`可执行文件。该模块提供了一系列的API接口,使得用户可以通过`Python`脚本来读取和分析PE文件的结构,包括文件头、节表、导入表、导出表、资源表、重定位表等等。此外,PEfile模块还可以帮助用户进行一些恶意代码分析,比如提取样本中的字符串、获取函数列表、重构导入表、反混淆等等。PEfile模块是Python中处理PE文件的重要工具之一,广泛应用于二进制分析、安全研究和软件逆向工程等领域。由于该模块为第三方模块,在使用之前读者需要在命令行下执行`pip install pefile`命令安装第三方库,当安装成功后即可正常使用,如下所示则是该模块的基本使用方法,读者可自行学习理解。 阅读全文
posted @ 2023-10-19 21:16 lyshark 阅读(1260) 评论(0) 推荐(2) 编辑
摘要:Ping 使用 `Internet` 控制消息协议(`ICMP`)来测试主机之间的连接。当用户发送一个 `ping` 请求时,则对应的发送一个 `ICMP Echo` 请求消息到目标主机,并等待目标主机回复一个 `ICMP Echo` 回应消息。如果目标主机接收到请求并且网络连接正常,则会返回一个回应消息,表示主机之间的网络连接是正常的。如果目标主机没有收到请求消息或网络连接不正常,则不会有回应消息返回。Ping的实现依赖于`ICMP`协议,Internet控制消息协议(Internet Control Message Protocol,简称 ICMP)是一种在`IP`网络上发送控制消息的协议。主要是用于在 `IP` 网络上进行错误处理和诊断。ICMP协议是运行在网络层的协议,它的主要作用是向源主机和目标主机发送控制消息,帮助网络诊断和监控。这些控制消息通常是由网络设备(如路由器、交换机、防火墙等)生成或捕获,并在整个网络传输。 阅读全文
posted @ 2023-10-19 08:34 lyshark 阅读(778) 评论(0) 推荐(1) 编辑
摘要:在之前的代码中我们并没有对套接字进行加密,在未加密状态下我们所有的通信内容都是明文传输的,这种方式在学习时可以使用但在真正的开发环境中必须要对数据包进行加密,此处笔者将演示一种基于时间的加密方法,该加密方法的优势是数据包每次发送均不一致,但数据包内的内容是一致的,当抓包后会发现每次传输的数据包密文是随机变化的,但内容始终保持一致,也就是说两个拥有相同内容的数据被加密后,数据包密文不同,其主要运用了基于当前时间戳的通信机制。 阅读全文
posted @ 2023-10-18 20:57 lyshark 阅读(842) 评论(0) 推荐(0) 编辑
摘要:对于网络通信中的服务端来说,显然不可能是一对一的,我们所希望的是服务端启用一份则可以选择性的与特定一个客户端通信,而当不需要与客户端通信时,则只需要将该套接字挂到链表中存储并等待后续操作,套接字服务端通过多线程实现存储套接字和选择通信,可以提高服务端的并发性能,使其能够同时处理多个客户端的请求。在实际应用场景中,这种技术被广泛应用于网络编程、互联网应用等领域。该功能的具体实现思路可以总结为如下流程;在服务端启动时,创建套接字并进行绑定,然后开启一个线程(称为主线程)用于监听客户端的连接请求。主线程在接收到新的连接请求后,会将对应的套接字加入一个数据结构(例如链表、队列、哈希表等)中进行存储。同时,主线程会将存储套接字的数据结构传递给每个子线程,并开启多个子线程进行服务,每个子线程从存储套接字的数据结构中取出套接字,然后通过套接字与客户端进行通信。 阅读全文
posted @ 2023-10-18 08:46 lyshark 阅读(724) 评论(1) 推荐(1) 编辑
摘要:首先我们来实现一个`DNS`查询功能,该功能的目的是传入一个网站域名自动将该域名解析为对应的`IP`地址,该功能的实现依赖于`gethostbyname`函数,该函数将主机名作为参数,并返回一个指向`hostent`类型结构的指针,结构包含有关主机的信息。结构包含许多字段,其中最重要的是`h_name`和`h_addr_list`。`h_name`是主机名,`h_addr_list`是一个指向具有主机`IP`地址的地址列表的指针。 阅读全文
posted @ 2023-10-17 09:30 lyshark 阅读(421) 评论(0) 推荐(0) 编辑
摘要:网络上的文件传输功能也是很有必要实现一下的,网络传输文件的过程通常分为客户端和服务器端两部分。客户端可以选择上传或下载文件,将文件分块并逐块发送到服务器,或者从服务器分块地接收文件。服务器端接收来自客户端的请求,根据请求类型执行对应的操作,并根据发送的文件名或其他标识来确定要传输的文件。在实现文件传输之前,需要先打开要传输的文件,并获取文件的大小信息,也可以通过其他方式获取文件的信息。在客户端和服务器端都准备就绪后,可以通过套接字来发送文件数据。在传输文件的过程中,可以将文件分解为若干个数据包进行传输,以减少数据传输中的丢包或传输错误。每个数据包的长度可以根据实际情况进行选择,通常选择`1024`字节或更大,也可以设置成更小的值。传输文件的过程中,还需要实现一定的错误处理机制,例如检测传输过程中的超时、丢包、不完整数据等情况,并在必要时进行错误重传或协商其他解决方案。 阅读全文
posted @ 2023-10-17 09:11 lyshark 阅读(1907) 评论(0) 推荐(3) 编辑
摘要:通常情况下我们在编写套接字通信程序时都会实现一收一发的通信模式,当客户端发送数据到服务端后,我们希望服务端处理请求后同样返回给我们一个状态值,并以此判断我们的请求是否被执行成功了,另外增加收发同步有助于避免数据包粘包问题的产生,在多数开发场景中我们都会实现该功能。Socket粘包是指在使用TCP协议传输数据时,发送方连续向接收方发送多个数据包时,接收方可能会将它们合并成一个或多个大的数据包,而不是按照发送方发送的原始数据包拆分成多个小的数据包进行接收。 阅读全文
posted @ 2023-10-16 18:49 lyshark 阅读(908) 评论(0) 推荐(2) 编辑
摘要:在上述内容中笔者通过一个简单的案例给大家介绍了在套接字编程中如何传递结构体数据,本章将继续延申结构体传输,在某些时候例如我们需要传输一些当前系统的进程列表信息,或者是当前主机中的目录文件,此时就需要使用循环结构体传输功能,循环传输结构体的关键点在于,客户端发送结构体数据之前需要通过一次通信来告诉服务端需要接收的次数,当服务端接收到次数时则可利用接收计数器依次循环接收数据直到客户端完整所有数据包的发送。 阅读全文
posted @ 2023-10-16 09:01 lyshark 阅读(354) 评论(0) 推荐(0) 编辑
摘要:当在套接字编程中传输结构体时,可以将结构体序列化为字符串(即把结构体的所有成员打包成一个字符串),然后将字符串通过套接字传输到对端,接收方可以将字符串解析为结构体,然后使用其中的成员数据。这种方法通常被称为序列化(Serialization)和反序列化(Deserialization),本章中我们可以采用将一个结构体序列化为一个纯字符串,然后将该字符串通过套接字传输给对端,当对端收到后只需要将字节序强制转换为对等的结构体指针即可实现对该结构的解析。 阅读全文
posted @ 2023-10-16 08:59 lyshark 阅读(474) 评论(0) 推荐(0) 编辑
摘要:组播通信是一种基于UDP协议的网络通信方式,它允许发送方将消息同时传递给多个接收方。在组播通信中,发送方和接收方都会加入一个共同的组播组,这个组播组对应一个特定的IP地址,所有加入该组播组的主机都能够接收到发送方发送的消息。组播通信可以有效地减少网络流量和网络负载,因为在传统的点对点通信方式下,每个消息都需要单独传输到每个接收方,而在组播通信中,每个消息只需要传输一次,就可以同时传递给多个接收方。在使用组播模式时,需要在套接字上使用`setsockopt()`函数来设置套接字的`IP_MULTICAST_IF`选项,指定本地主机的出站接口地址,用于发送组播数据包。此外,还可以设置`IP_ADD_MEMBERSHIP`选项,将套接字加入到一个特定的组播组中,以便接收该组播组中的数据包。 阅读全文
posted @ 2023-10-15 09:46 lyshark 阅读(459) 评论(0) 推荐(0) 编辑
摘要:在进行驱动开发之前,您需要先安装适当的开发环境和工具。首先,您需要安装`Windows`驱动开发工具包(WDK),这是一组驱动开发所需的工具、库、示例和文档。然后,您需要安装`Visual Studio`开发环境,以便编写和调试驱动程序。在安装WDK和`Visual Studio`之后,您还需要配置适当的项目设置,以便能够正确编译和构建驱动程序。 阅读全文
posted @ 2023-10-14 20:00 lyshark 阅读(599) 评论(0) 推荐(0) 编辑
摘要:任何一个成熟的软件都会具有可扩展性,可扩展性是现代软件的一个重要特征,因为它使软件更易于维护和适应变化的需求,`x64dbg`也不例外其可通过开发插件的方式扩展其自身功能,`x64dbg`提供了多种插件接口,包括脚本插件、DLL插件、Python插件和.NET插件等。此外,`x64dbg`还支持用户自定义命令和快捷键。这使得用户可以自由地扩展和自定义软件的功能,从而更好地适应开发需求。我们以`C/C++`语言为开发模板,`x64dbg`插件表现出来的其实也是一个`DLL`文件,他里面导出了`x64dbg`所需要的几个函数,从而可以在`x64dbg`启动时被加载,除去所必须的导出函数外,其他功能的实现与`DLL`基本一致。 阅读全文
posted @ 2023-10-14 09:12 lyshark 阅读(481) 评论(0) 推荐(0) 编辑
摘要:所谓双向数据传输指的是客户端与服务端之间可以无差异的实现数据交互,此类功能实现的核心原理是通过创建`CreateThread()`函数多线程分别接收和发送数据包,这样一旦套接字被建立则两者都可以异步发送消息,本章将实现简单的双向交互功能。首先我们需要封装两个函数,这里`RecvFunction`函数用于接收数据,`SendFunction`函数则用于发送数据,这两段代码在服务端与客户端之间是一致的两者可被共用。 阅读全文
posted @ 2023-10-14 08:43 lyshark 阅读(420) 评论(0) 推荐(0) 编辑
摘要:x64dbg 是一款开源、免费、功能强大的动态反汇编调试器,它能够在`Windows`平台上进行应用程序的反汇编、调试和分析工作。与传统的调试器如`Ollydbg`相比,x64dbg调试器的出现填补了`Ollydbg`等传统调试器的不足,为反汇编调试工作提供了更高效、更可靠的解决方案。正是因为有了这些优点,才能使其成为当今最受欢迎的反汇编调试软件之一。 阅读全文
posted @ 2023-10-13 16:32 lyshark 阅读(500) 评论(0) 推荐(0) 编辑
摘要:在前一节中我们简单介绍了D3D绘制窗体所具备的基本要素,本节将继续探索外部绘制技术的实现细节,并以此实现一些简单的图形绘制功能,首先外部绘制的核心原理是通过动态创建一个新的窗口并设置该窗口属性为透明无边框状态,通过消息循环机制实现对父窗口的动态跟随附着功能,当读者需要绘制新的图形时只需要绘制在透明窗体之上即可实现动态显示的效果。 阅读全文
posted @ 2023-10-13 13:56 lyshark 阅读(491) 评论(0) 推荐(1) 编辑
摘要:首先为什么要实行分块传输字符串,一般而言`Socket`套接字最长发送的字节数为`8192`字节,如果发送的字节超出了此范围则后续部分会被自动截断,此时将字符串进行分块传输将显得格外重要,分块传输的关键在于封装实现一个字符串切割函数,将特定缓冲区内的字串动态切割成一个个小的子块,当切割结束后会得到该数据块的个数,此时通过套接字将个数发送至服务端此时服务端在依次循环接收数据包直到接收完所有数据包之后在组合并显示即可。 阅读全文
posted @ 2023-10-13 08:37 lyshark 阅读(412) 评论(0) 推荐(0) 编辑
摘要:在本节,我们将继续深入探讨套接字通信技术,并介绍一种常见的用法,实现反向远程命令执行功能。对于安全从业者而言,经常需要在远程主机上执行命令并获取执行结果。本节将介绍如何利用 `_popen()` 函数来启动命令行进程,并将输出通过套接字发送回服务端,从而实现远程命令执行的功能。在实现反向远程命令执行时,我们可以使用 `_popen(buf, "r")` 函数来执行特定的命令,并将其输出重定向到一个可读的缓冲区中。这个缓冲区将保存命令的输出内容,我们可以将其发送回控制程序,也就是服务端,从而实现远程命令执行的目标。 阅读全文
posted @ 2023-10-12 09:01 lyshark 阅读(409) 评论(0) 推荐(0) 编辑
摘要:Winsock是Windows操作系统上的套接字API,用于在网络上进行数据通信。套接字通信是一种允许应用程序在计算机网络上进行实时数据交换的技术。通过使用Windows提供的API,应用程序可以创建一个套接字来进行数据通信。这个套接字可以绑定到一个端口,以允许其他应用程序连接它。另外,Winsock可以使用TCP/IP、UDP等协议来完成不同类型的数据传输任务。在网络应用程序开发中,套接字通信可以帮助应用程序开发者实现客户端/服务端模型,并实现数据的可靠传输。一般套接字通信需要经历,创建套接字(Socket),绑定(Bind),监听(Listen),接受(Accept),连接(Connect),发送数据(Send),接收数据(Receive),关闭(Close)等几个关键步骤,当读者需要使用网络通信时需引入`winsock2.h`头文件,并通过`#pragma comment(lib,"ws2_32.lib")`包含对应库,需要注意的是该头文件与`windows.h`头冲突,如果两者同时存在则会出现编译不通过的情况。 阅读全文
posted @ 2023-10-11 10:00 lyshark 阅读(1023) 评论(0) 推荐(1) 编辑
摘要:C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。 阅读全文
posted @ 2023-10-10 10:56 lyshark 阅读(441) 评论(0) 推荐(0) 编辑
摘要:C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。 阅读全文
posted @ 2023-10-10 10:56 lyshark 阅读(356) 评论(0) 推荐(0) 编辑
摘要:C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。 阅读全文
posted @ 2023-10-10 10:55 lyshark 阅读(416) 评论(0) 推荐(0) 编辑
摘要:C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。 阅读全文
posted @ 2023-10-10 10:55 lyshark 阅读(352) 评论(0) 推荐(0) 编辑
摘要:C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。 阅读全文
posted @ 2023-10-10 10:52 lyshark 阅读(445) 评论(0) 推荐(0) 编辑
摘要:DirectX 9 是由微软开发的一组多媒体应用程序接口API,用于创建和运行基于Windows平台的多媒体应用程序,尤其是游戏。它是DirectX系列中的一个版本,于2002年发布,是DirectX系列中的一个重要版本,DirectX 9在其发布时引入了许多新的功能和性能优化,成为当时PC游戏开发的主要标准,许多经典的PC游戏使用了DX9作为其图形和音频渲染引擎。虽然后续出现了更多强大的引擎,但本质上都是可以兼容Dx9的。在使用Dx9引擎之前读者需要自行下载该绘制库,当然在课件中笔者已经为大家准备了绿色版,读者可自行解压到指定目录下,在目录下有一个Developer Runtime其内部是引擎运行时所需要的运行环境,读者可根据不同的需求安装对应位数的运行库,安装成功后则可配置开发目录,一般而言我们只需要关注Include引入目录,以及Lib库目录即可。 阅读全文
posted @ 2023-10-10 08:45 lyshark 阅读(1051) 评论(0) 推荐(2) 编辑
摘要:本节将向读者介绍如何使用键盘鼠标操控模拟技术,键盘鼠标操控模拟技术是一种非常实用的技术,可以自动化执行一些重复性的任务,提高工作效率,在Windows系统下,通过使用各种键盘鼠标控制函数实现动态捕捉和模拟特定功能的操作。有时我们经常需要进行重复性的鼠标操作,例如繁琐的点击、拖拽。这些任务可能消耗大量时间和精力,为了解决这个问题,可自行设计并实现一个简单而强大的鼠标录制回放工具,旨在帮助用户轻松录制鼠标动作,通过借助鼠标录制回放工具,用户可以轻松实现自动化操作,从而解放双手。 阅读全文
posted @ 2023-10-09 08:51 lyshark 阅读(1136) 评论(0) 推荐(4) 编辑
摘要:本节将向读者介绍如何使用键盘鼠标操控模拟技术,键盘鼠标操控模拟技术是一种非常实用的技术,可以自动化执行一些重复性的任务,提高工作效率,在Windows系统下,通过使用各种键盘鼠标控制函数实现动态捕捉和模拟特定功能的操作。键盘鼠标的模拟是实现自动化的必备流程,通常我们可以使用`keybd_event()`实现对键盘的击键模拟,使用`SetCursorPos()`实现对鼠标的模拟,使用两者的配合读者可以很容易的实现对键盘鼠标的控制,本节将依次封装实现,模拟键盘鼠标控制功能,读者可根据自己的实际需求选用不同的函数片段。 阅读全文
posted @ 2023-10-08 15:50 lyshark 阅读(969) 评论(0) 推荐(4) 编辑
摘要:本节将介绍如何使用`Windows API`中的`SetWindowsHookEx`和`RegisterHotKey`函数来实现键盘鼠标的监控。这些函数可以用来设置全局钩子,通过对特定热键挂钩实现监控的效果,两者的区别在于`SetWindowsHookEx`函数可以对所有线程进行监控,包括其他进程中的线程,而`RegisterHotKey`函数只能对当前线程进行监控。首先我们来实现注册热键功能,注册热键可以使用`RegisterHotKey()`函数,该函数可以将一个热键与当前应用程序或线程绑定,使得当用户按下热键时,系统会自动将该热键的消息发送到该应用程序或线程中 阅读全文
posted @ 2023-10-07 08:19 lyshark 阅读(1081) 评论(0) 推荐(6) 编辑
摘要:XEDParse 是一款开源的x86指令编码库,该库用于将MASM语法的汇编指令级转换为对等的机器码,并以XED格式输出,目前该库支持x86、x64平台下的汇编编码,XEDParse的特点是高效、准确、易于使用,它可以良好地处理各种类型的指令,从而更容易地确定一段程序的指令集。XEDParse库可以集成到许多不同的应用程序和工具中,因此被广泛应用于反汇编、逆向工程、漏洞分析和入侵检测等领域。XEDParse 引擎非常易于使用,读者在使用时只需要通过`XEDPARSE xed = { 0 };`定义一个结构,并通过向`xed.cip`内输送一条汇编指令,当调用`XEDParseAssemble(&xed)`函数时则可实现对特定汇编指令的编码操作,读者只需要通过输出`xed.dest`以及`xed.instr`中的值,则可实现对特定一条汇编指令的编码 阅读全文
posted @ 2023-10-06 10:12 lyshark 阅读(514) 评论(1) 推荐(1) 编辑
摘要:Capstone 是一款开源的反汇编框架,目前该引擎支持的CPU架构包括x86、x64、ARM、MIPS、POWERPC、SPARC等,Capstone 的特点是快速、轻量级、易于使用,它可以良好地处理各种类型的指令,支持将指令转换成AT&T汇编语法或Intel汇编语法等多种格式。Capstone的库可以集成到许多不同的应用程序和工具中,因此被广泛应用于反汇编、逆向工程、漏洞分析和入侵检测等领域,著名的比如IDA Pro、Ghidra、Hopper Disassembler等调试器都在使用该引擎。 阅读全文
posted @ 2023-10-06 10:10 lyshark 阅读(2316) 评论(1) 推荐(7) 编辑
摘要:我们继续延申调试事件的话题,实现进程转存功能,进程转储功能是指通过调试API使获得了目标进程控制权的进程,将目标进程的内存中的数据完整地转存到本地磁盘上,对于加壳软件,通常会通过加密、压缩等手段来保护其代码和数据,使其不易被分析。在这种情况下,通过进程转储功能,可以将加壳程序的内存镜像完整地保存到本地,以便进行后续的分析。在实现进程转储功能时,主要使用调试API和内存读写函数。具体实现方法包括:以调试方式启动目标进程,将其暂停在运行前的位置;让目标进程进入运行状态;使用ReadProcessMemory函数读取目标进程内存,并将结果保存到缓冲区;将缓冲区中的数据写入文件;关闭目标进程的调试状态。 阅读全文
posted @ 2023-10-05 10:28 lyshark 阅读(654) 评论(0) 推荐(4) 编辑
摘要:理解了如何通过调试事件输出当前进程中寄存器信息,那么实现加载DLL模块也会变得很容易实现,加载DLL模块主要使用`LOAD_DLL_DEBUG_EVENT`这个通知事件,该事件可检测进程加载的模块信息,一旦有新模块被加载或装入那么则会触发一个通知事件,利用该方法并配合磁盘路径获取函数则可很容易的实现进程模块加载的监控。 阅读全文
posted @ 2023-10-05 10:25 lyshark 阅读(442) 评论(0) 推荐(0) 编辑
摘要:当读者需要获取到特定进程内的寄存器信息时,则需要在上述代码中进行完善,首先需要编写`CREATE_PROCESS_DEBUG_EVENT`事件,程序被首次加载进入内存时会被触发此事件,在该事件内首先我们通过`lpStartAddress`属性获取到当前程序的入口地址,并通过`SuspendThread`暂停程序的运行,当被暂停后则我没就可以通过`ReadProcessMemory`读取当前位置的一个字节机器码,目的是保存以便于后期的恢复,接着通过`WriteProcessMemory`向对端`(void*)dwAddr`地址写出一个`0xCC`断点,该断点则是`int3`停机指令,最后`ResumeThread`恢复这个线程的运行,此时程序中因存在断点,则会触发一个`EXCEPTION_DEBUG_EVENT`异常事件。 阅读全文
posted @ 2023-10-04 08:33 lyshark 阅读(651) 评论(0) 推荐(1) 编辑
摘要:本章笔者将通过`Windows`平台下自带的调试API接口实现对特定进程的动态转存功能,首先简单介绍一下关于调试事件的相关信息,调试事件的建立需要依赖于`DEBUG_EVENT`这个特有的数据结构,该结构用于向调试器报告调试事件。当一个程序发生异常事件或者被调试器附加时,就会产生对应的`DEBUG_EVENT`调试事件,通常`DEBUG_EVENT`包含了多种调试类型,包括异常事件、进程创建事件、线程创建事件、进程退出事件和线程退出事件等等,我们只需要动态捕捉这些调试事件并作相应的处理即可实现更多有用的功能。 阅读全文
posted @ 2023-10-03 18:29 lyshark 阅读(715) 评论(0) 推荐(0) 编辑
摘要:Windows 线程同步是指多个线程一同访问共享资源时,为了避免资源的并发访问导致数据的不一致或程序崩溃等问题,需要对线程的访问进行协同和控制,以保证程序的正确性和稳定性。Windows提供了多种线程同步机制,以适应不同的并发编程场景。以上同步机制各有优缺点和适用场景,开发者应根据具体应用场景进行选择和使用。在线程同步的实现过程中,需要注意竞争条件和死锁的处理,以确保程序中的线程能协同工作,共享资源能够正确访问和修改。线程同步是并发编程中的重要基础,对于开发高效、稳定的并发应用至关重要。 阅读全文
posted @ 2023-10-02 09:28 lyshark 阅读(714) 评论(0) 推荐(2) 编辑
摘要:在Windows平台下创建多线程有两种方式,读者可以使用`CreateThread`函数,或者使用`beginthreadex`函数均可,两者虽然都可以用于创建多线程环境,但还是存在一些差异的,首先`CreateThread`函数它是`Win32 API`的一部分,而`_beginthreadex`是`C/C++`运行库的一部分,在参数返回值类型方面,`CreateThread`返回线程句柄,而`_beginthreadex`返回线程ID,当然这两者在使用上并没有太大的差异,但为了代码更加通用笔者推荐使用后者,因为后者与平台无关性更容易实现跨平台需求。 阅读全文
posted @ 2023-10-01 09:51 lyshark 阅读(833) 评论(1) 推荐(1) 编辑


8927937 | 6877438
博客园 - 开发者的网上家园

点击右上角即可分享
微信分享提示