一、概述
API Hooking(API 挂钩)我们来快速看一下。 Windows API我们来看看它是什么以及它包含了什么。 API 挂钩与之相关的平台 Windows本节介绍由提供的过程监控程序和功能信息。 API 挂钩与此可能的示例代码一起 Python在 Windows API我们来快速看一下它是如何工作的。 Packet(我们来分析一下数据包的结构。当我们创建一个数据包文件时,默认情况下 Global Header而且有 Packet Header和 Data重复此过程。分析数据链路层、网络层和传输层协议的结构,并只提取必要的信息。
Ⅱ. API 钩子
API Hooking(API 挂钩) 逆转之花这种行为被称为篡改,包括截获信息、改变执行流程或提供与原有功能不同的功能。之所以能够实现这种行为,是因为 深入了解流程正因为如此。 Windows在该情况下 API通过 Windows 它使用了各种功能,例如打开蓝牙、访问文件系统或更改日期。 Windows API内核是一组允许这些函数被使用的函数集合。为了访问硬件,内核连接到每个设备的接口,而 shell 向内核发出命令,就像 shell 向内核发出命令一样。 Windows有许多进程。特定用户程序(如 MPlayer、浏览器等) Windows这也是为什么它能够顺利运行的原因。 Windows 因为我们可以使用流程, Windows 这是因为 API 连接到这些 Windows 进程。
更具体地说,在 Windows 中,顶层父进程 explorer 使用 CreateProcessA 函数为用户正在使用的程序创建进程。 一旦创建了进程,主线程便开始运行,主线程调用每个子线程。
CreateProcessA 函数(processthreadsapi.h) - Win32 apps
API 挂钩表示特定进程 API 当您通过调用运行该过程时 在中途截获并接管有的。 API我可以操纵传入的参数或返回值,取消调用本身,或改变流程流向,使其符合我的需求。

API 挂钩一个最著名的例子是一个使此功能成为可能的平台。 Frida有的。
Frida 可在几乎所有的操作系统上使用,并运行于 JavaScript 语言中。有关使用和功能的详细信息,请参阅上述网站。
作为一个有用的提示,JavaScript促进了 Web 的快速发展,因为 V8 引擎使得在任何 Web 上都可以使用 JavaScript。
※ Microsoft 用于跟踪进程Microsoft)介绍它提供的各项计划。 Windows它跟踪所有进程,但 API 挂钩不可能预防或检测多个弹壳的渗透,尤其是 恶意软件会更改文件名,以显示正常的进程名称,然后运行它们的数量相当多。这并不是说它们不够有用,而是有些方面可以通过查看其他信息来了解,例如进程的实际路径和创建日期。我将在后续研究中详细介绍。
以下是一个简单的示例代码。
var hook_createprocess = Module.getExportByName("kernel32.dll", "CreateProcessW");
Interceptor.attach(hook_createprocess, {
onEnter(args) {
var lpApplicationName = args[0];
console.log(Memory.readByteArray(lpApplicationName, 4096));
var applicationName = Memory.readUtf16String(lpApplicationName);
console.log(applicationName);
var lpCommandLine = args[1];
console.log(Memory.readUtf16String(lpCommandLine));
},
onLeave(result) {
//console.log(result);
}
});此代码可以渗透创建进程的功能,让您实时查看正在创建哪些进程。
此外 Windows API如何使用 Python(Python)文件写入功能通过 如果我们仔细看一下,
fd = open('경로\\aaaa.txt', 'w')
fd.writelines("12345abcde")
fd.close()之所以能够使用此代码生成一个 txt 文件,是因为 Windows的 CreateFileA 功能和 WriteFile 功能 Windows API通过 这是因为每个函数都可以被调用。每个函数都是文件系统的一部分。 MFT访问做吧。 MFT是将存储在该分区上的随机(空白、安全)空间 指定扇区并放置在该扇区中。 保存数据做吧。 MFT对应文件的时间、文件名、文件位置或其他信息 记录(存储)各种信息并返回操作此操作序列的函数。 Handle 还有一种说法是返回,Handle 可以被视为用于操作这些函数的接口。返回的原因很明显:它不能继续占用内存。
Ⅲ. 数据包
到目前为止,我们已经了解了 PE、ZIP 和 DISK(FAT、NTFS)的结构,并研究了如何使用 HxD 分析结构并更改值。现在,让我们仔细研究一下网络的数据包结构。
※ 知道这些很有好处 TIP用 IPv6尽管它已经开发出来,但它今天仍然存在。 IPv4原因是 NAT这是因为它可以分离为公共 IP 和私有 IP,并且通过端口转发来提高安全性。

如果要详细了解包结构,请参阅上述博客。前 24 个字节是 Global Header默认情况下, pcap 文件中附带有一个标题。接下来, Packet Header他来了。 Packet Header和 Packet Data这种模式继续以对进行。 Global Header如果你把它们分开, Packet Header和 Data我们需要能够区分它们。 Packet Header由 16 个字节组成,其中包括以下内容 Data据报道,长度为 12 至 15 字节。 也就是说, Header长度为 16 字节 Data长度之和就是下一个数 Packet意义。 当然,一开始 Global Header这些值必须相加。
现在,我们来实际从数据链路层、网络层和传输层中检索数据包数据。
[SK Shillers SeSAC 顺德一期] 1. 网络类型、OSI 7 层、协议(数据链路层、网络层、传输层)
[SK Shillers SeSAC 顺德一期] 2. 网络类型、OSI 7 层和协议(数据链路层、网络层和传输层)
有关数据链路层、网络层和传输层的协议、报头和数据结构,请参阅上述帖子。 Packet Data你找到的第一条信息是 Ethernet 这是信息,它位于数据链路层, MAC 地址它告诉我们。 MAC 地址前的前 3 个字节表示制造商,后 3 个字节是由制造商分配的唯一标识符(序列号)。默认情况下, MAC 地址长度为 6 字节,并包含在数据包中。 Destination Address你先来。 Source Address他稍后会来的。 Source Address如果你先到达, Destination Address要找到它,我们必须跳过 6 个字节,这只是增加了不必要的工作。
[Network] Ethernet/TCP/IP Header 结构
在之前的帖子或本博客中,我详细解释了 Ethernet 的报头结构。然而,转储的数据包文件中并不包含所有的 Header 结构,因此我们只需要提取 Destination Address、Source Address 和 Type。也就是说,我们只需要提取 6 个字节、6 个字节和 2 个字节。
※ MAC 地址是 IP 地址和映射这行了。 IP 对于地址 MAC 在找到地址时广播。在与目标相同的网络子网中响应 IP 如果是地址,则回复自己的地址 MAC 单独列出地址 它可以立即报告,无需验证值。 这正是 ARP 协议的作用 IP 地址通过 MAC 一旦我们找到地址, ARP, 恰恰相反 MAC 地址通过 IP 一旦我们找到地址, RARP他说。
※ 正是我刚才在说的。 ARP相关内容 ARP Spoofing发生了伊朗的攻击。您可以立即访问它,无需进行额外的身份验证。 MAC 它利用了在网络通信过程中地址通过数据包传递的事实。 嗅探Sniffing)我们可以看到它的结果。而且 ARP 根据要求 MAC 在用户请求时使用该地址 MAC 提供地址,并告诉服务器您的 MAC 通过提供地址,可以在中间任意操作数据。在咖啡馆等场所,路由器通过 在共享相同网络带宽的地方,这种情况会经常发生。 如何进行防御在同一网络频段 MAC 地址中有任何奇怪的内容(重复) MAC 地址是否存在 - arp 命令通过)检查一下是否存在 IP 地址和 MAC 它不允许您动态映射和更改地址。 您可以静态映射它,以便无法更改。
在丢弃的数据包文件中,网络层 IP 可以获得有关协议的有用信息包括 Time to Live, Protocol, IP 地址 还有其他人。
如果您想了解更多详细信息,可以查看上面的博客。事实上,WireShark'写入包文件 IP 如果我们只计算与协议相关的部分, Time to Live 在前面 Version, Servies, Total Length, Identification, Flags, Frag Offset有信息。如果你想查看它,你只需查看每个数据包占用的字节数,而不需要进行计算。 Time to Live 我想知道价值,所以前面的信息 Byte如果我们计算一下,我们可以看到它位于 8 个字节之后。 Protocol从下一个 9 字节开始, IP 地址 Source Address为 12 字节~15 字节, Destination Address它从 16 字节变为 19 字节。
由于 Ethernet 协议紧随 IP 协议之后,因此需要添加 14 个字节(以太网协议信息的长度),并从该位置开始计算,以获得准确的结果。
※ IP 地址 Source Address和 Destination Address您可以判断一个 IP 地址是否是私有 IP 地址还是公共 IP 地址,因为 C 类私有网络通常以 192.168.~ 开头。 IP 如果是地址,那它是私有的。 IP如果不是,则可以将其视为公共 IP。
传输层是 TCP和 UDP它分为 TCP 和 UDP。因此,在计算时,我们需要确定它是 TCP 还是 UDP,也就是网络层。 IP 在从上述协议中提取时 Protocol 您可能以前已经遇到过这种信息。将十六进制值转换为十进制时,它变成 17 和 6,这是指示是 TCP 还是 UDP 的值。 TCP是 6, UDP是 17因此,我们可以通过将其分为这些值来分析结构。
TCP我们来看第一个。这里需要了解的信息是 Source/Destination Port和 Sequence/Acknowledgment Number, Flags, Payload(纯数据)。 IP 在获得协议数据(共 20 个字节)后 每 2 个字节 Source/Destination Port你可以知道这一点,然后 每 4 个字节 Sequence/Acknowledgment Number。 Flags这需要一些计算, Acknowledgment Number 只提取以下 2 个字节中的最后 1 个字节 & 你可以通过计算来了解。 0b00100000 & 在计算时 Urgent Flag 如果值为 0,则表示不存在,如果为 1,则表示已发出请求。 0b00010000 Acknowledgment 值为 0b00001000 Push 值为 0b00000100 Reset 值 0b00000010 是 Syn 值, 0b00000001 是 ACK 值 最终价格一共有 6 个。 Flags 一旦我们获得了值,我们终于可以 Payload你只要问问就行了。 TCP Header它在 20 个字节之后开始,但由于它可能为空,需要进行过滤,如果不为空, 下一个数据包 Header和 Data(也就是说,直到下一个数据包到达 只需解压即可。
※ TCP 提供状态信息 Flags值为 3-Way-Handshake 它在课程期间为我们提供了有用的信息。 Urgent 紧急请求意思是 Ack 完成意思是 Push 立即将接收的数据转发到应用层意义。 Reset 在强制断开连接后忽略剩余请求的数据。 Syn 连接请求意味着,最后 Fin这表示连接正常终止。 Syn 如果您监控并阻止请求包,则可以提高安全性。
连接过程 Syn和 Ack, Seq 如果我们查看数字,一开始客户端会连接到特定的服务器。 Syn 在发出请求时随机 Seq 编号发送它。服务器接收到 Seq 将数值加 1 Ack 编号将其发回。客户端 再次收到 Ack 将数值加 1 Seq 按号码发送,并获得新的随机号码 Ack 编号最终通过发送来进行连接 Syn, Ack一旦你理解了这个概念,就可以针对攻击目标。 端口扫描在发动攻击之前,你可以做到这一点。 TCP 不留日志 检查服务器是否开启这是一个过程。一开始, Syn 请求发出后,当 Ack 请求得到响应时,连接立即终止,且不发送 最终连接完成 Ack 请求,这样做的方式并不 . 这种过程在技术上称为 TCP Half-Open Scan (隐蔽扫描) . 此类 TCP 信息的另一个重要原因是,防火墙可以用来预先阻止此类隐蔽扫描的端口或 Flags 请求。
※ TCP的 Payload 数据是 Web 通信数据包 (HTTP的 Get, Post Method内容部分,即实际传输的数据它包含数据。
UDP要继续, UDP在 Source/Destination Port和 UDP Payload你只需要提取它。 TCP它比这要简单得多。同样,网络层 IP 我们可以从协议开始计算, Source/Destination Port每个都是 2 个字节你只需要进行计算。之后, UDP Header和 Data(Payload)表示总长度,包括 Length他来了。 UDP Payload你只需要从这个长度值中减去 -8。原因是 UDP Payload 以前有两个端口号和长度 (Length), Checksum 这些信息都是 2 个字节 总共 8 个字节因为他们来到这里。也就是说, Source/Destination Port从一开始,每 2 个字节, UDP Payload Length其中从值中减去 8 个字节如果您提取到此点,就可以恢复所需的信息。
※ UDP在 Query在发送时使用 Port是 53。通常 DNS(Domain Name Server)你想去哪里 IP 要了解地址 UDP它以前向和反向两种方向发送。前向方向是 www.google.com和 具有与其同一的主机名 IP 这是找到地址,而反过来则是 IP 地址 (ex. 192.168.0.10)这里主要是了解 IP 地址并找到主机名。
评论
本周,我在本周的最后一个星期五完成了课程,编写了一个 Python 脚本来分析数据包文件。看起来,随着我继续在 Python 中编写代码,理解这些结构变得更加容易。从下周开始,我们可能会开始研究移动设备,因此我认为理解本周学到的各种数据结构是很重要的。
登录