一、概述
简单介绍API钩子(API后门)。 了解Windows API是什么,以及有哪些。 介绍与API钩子相关的平台,以及Windows提供的进程监控程序和函数信息。 附带API钩子的示例代码,并简要介绍如何在Python中使用Windows API。 目标是分析数据包的结构。 创建数据包文件,基本包括全局头和重复出现的 Packet Header 和 Data。 介绍如何分析数据链路层、网络层和传输层协议的结构,并仅获取所需的信息。
Ⅱ. API 钩子
API 钩子 (API 后钩)是 倒置生活的美好之处这种类型的攻击被称为“信息窃取”或“流程篡改”,其目的是获取信息、改变程序执行流程,或者提供与原始功能不同的功能。之所以能够实现这些,是因为… 渗透到流程中因为这是Windows的特性。API通过这些功能,可以在 Windows 系统中使用各种内置功能。例如,可以开启蓝牙、访问文件系统,或者更改日期等。 Windows API它包含了这些功能,使得用户可以利用它们。为了访问硬件,内核需要与每个设备的接口连接,就像每个终端在 Windows 中运行多个进程。之所以特定用户程序(如 Melon、浏览器等)可以在 Windows 中顺利运行,是因为它们可以利用这些 Windows 进程。 这些 Windows API 与这些 Windows 进程相关联。这是因为我希望能够提供帮助。
* 换句话说,在 Windows 系统中,通过“explorer”这个最主要的父进程,使用 CreateProcessA 函数来创建用户正在使用的程序。 创建这些流程。 当进程创建后,主线程开始运行,然后主线程会调用每个子线程。
CreateProcessA 函数 (processthreadsapi.h) - Windows 应用程序
API后门是指,当某个程序通过API调用来执行自身时。 在中间插入,从而掌握控制权。它能够控制传入和传出的参数,甚至可以修改 API 的返回值,并可以取消调用或将其重定向到我想要的过程。

Frida 是一种可以实现 API 劫持的平台,可以将其视为一种工具。
这个名为“Frida”的工具可以在几乎所有操作系统中使用,并且使用 JavaScript 语言。如果您想了解更多关于它的使用方法和功能,请参考上面的网站。
* 值得注意的是,JavaScript 推动了 Web 技术的巨大发展,这主要归功于 V8 引擎的出现,使得 JavaScript 可以在任何 Web 平台上使用。
※ 微软提供的,用于跟踪进程的程序。该程序可以跟踪 Windows 上的所有进程,但无法阻止或检测通过 API 劫持在多个 shell 中运行的情况。特别是 这种恶意软件会更改文件名,使其显示为正常的名称,然后开始执行恶意操作。因为这些信息非常多。虽然这些信息可能不太直接,但如果仔细研究这些信息,例如实际路径和生成日期等,也可以从中获得一些有用的信息。关于更详细的内容,我计划在后续的文章中进行更深入的探讨。
附带了一个简单的示例代码。
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);
}
});这段代码可以嵌入到创建进程的函数中,从而实时地了解哪些进程正在被创建。
此外,我们可以通过 Python 的文件写入函数,进一步了解如何利用 Windows API。
fd = open('경로\\aaaa.txt', 'w')
fd.writelines("12345abcde")
fd.close()之所以可以使用此代码生成 .txt 文件,是因为 Windows 操作系统... 创建文件 函数和 写入文件 因为可以通过 Windows API 调用这些函数。这些函数与文件系统相关。 如何访问 MFT在相应的分区中存储 MFT 的位置,可以是任意位置(例如,空闲空间或安全区域)。 指定领域从而影响到该行业。 存储数据包括 MFT 区域中与该文件相关的日期、文件名、文件位置等信息。 记录和存储各种信息并返回一系列控制这些过程的函数。有时也被称为“Handle”,在这里,“Handle”可以理解为一种用于操作这些函数的接口。之所以返回这些函数,是因为它们会占用内存空间。
Ⅲ. 数据包
此前,我学习了PE、ZIP、DISK(FAT、NTFS)等文件结构的原理,并通过HxD工具来分析和修改这些结构。现在,我希望进一步分析网络数据包的结构。
* 这是一个有用的提示:虽然 IPv6 已经开发,但现在仍然在使用 IPv4。 原因是: NAT因此,可以通过区分公网IP和私有IP,并且通过端口转发,也能提高安全性。

如果要深入了解数据包的结构,建议参考之前的博客文章。首先,前24字节... 全球首頁这是 pcap 文件中通常包含的头部信息。接下来是 数据包头这会导致数据包头部的出现, 数据包这种模式会一直重复出现。如果将全局头部(Global Header)分离出来,那么应该能够区分数据包头部(Packet Header)和数据部分。数据包头部由16字节组成,紧接着的数据部分长度则在12到15字节之间。 也就是说,Header 的长度(16 字节)加上 Data 的长度,就代表下一个 Packet。 当然,在初始阶段,全局头部的值应该被累加。
现在,我们将开始收集数据链路、网络和传输层的数据包信息。
[SK쉴더斯 SeSAC 东城分校] 1. 网络类型,OSI七层模型,协议(数据链路层、网络层、传输层)
[SK쉴더斯 SeSAC 东城分校] 2. 网络类型、OSI 七层模型、协议(数据链路层、网络层、传输层)
关于数据链路层、网络层和传输层中的协议、头部和数据结构,请参考之前的文章。在 Packet Data 中,您首先需要找到的信息是: 以太网 这是信息,它位于数据链路层。 MAC地址它会告知您。MAC地址的前3字节代表制造商,而后3字节是制造商分配的唯一标识(序列号)。 默认情况下,MAC地址是6字节的,在数据包中 目的地地址先来 源地址他会在之后到达,如果先收到源地址,那么为了找到目标地址,就需要跳过6个字节。这相当于多做了一件不必要的动作。
在之前的帖子或此博客中,您可以看到对以太网头部的详细说明。然而,实际的抓包文件并不能包含所有头部的结构,因此只需要提取目标地址、源地址和类型这三个信息。也就是说,只需要提取 6 字节、6 字节和 2 字节的信息。
※ MAC地址与IP地址一一对应当需要查找与特定 IP 地址关联的 MAC 地址时,会进行广播。如果收到的响应来自同一网络段,并且包含该 IP 地址,那么响应中会包含该设备的 MAC 地址。 无需提供验证码,可以直接告知。 这正是 ARP 协议的作用:通过 IP 地址,找到对应的 MAC 地址。 ARP相反,通过MAC地址可以找到IP地址。 RARP据称。
※ 刚才提到的与ARP相关的 ARP 欺骗存在着来自伊拉克的攻击。 这种攻击利用了以下特点:用户无需任何身份验证,可以直接提供自己的 MAC 地址。 嗅探通过这种方式,我们可以观察到。当用户通过 ARP 请求来获取 MAC 地址时,它会告知自己的 MAC 地址,并同时告知服务器自己的 MAC 地址,从而在中间环节可以随意操纵数据。这种攻击在共享网络环境中,例如咖啡馆等,更容易发生。 防御的方法这包括检查同一网络段的 MAC 地址是否存在异常(例如,是否存在重复的 MAC 地址,可以通过 ARP 命令来检查),或者动态地将 IP 地址和 MAC 地址进行映射,以便在需要时进行更改。 使其无法被动态地映射和修改。
从已丢弃的包文件,我们可以获取关于网络层 IP 协议的有用信息。 生存时间、协议、IP地址 它有背部。
有关更详细的信息,建议查阅该博客。 实际上,如果使用“Wireshark”工具,只分析“IP”协议相关的部分,可以得出“生存时间”之前的... 版本、服务、总长度、标识、标志、偏移量这些信息是可用的。如果您想查看,可以直接查看每个信息的字节数,而无需将其添加到单独的计算中。由于您想直接了解“生存时间”的值,我们可以先计算前面提到的字节数,结果显示为 8 字节。然后 协议从第九字节开始,源地址占用12到15字节,目标地址则从16字节开始。
※ 由于 IP 协议位于以太网协议之后,为了进行准确的计算,需要先增加 14 字节(以太网协议信息长度),然后开始计算。
※ 关于IP地址的 源地址哇 目的地地址可以通过观察IP地址来判断,是私有IP还是公有IP。一般来说,私有IP通常使用Class C的私有IP段,因此如果IP地址以192.168.开头,则很可能是私有IP。否则,则很可能是公有IP。
传输层 TCP哇 UDP它们可以分为不同的类型。因此,在计算时,需要考虑是使用 TCP 还是 UDP 协议。在提取网络层级的 IP 协议时,需要参考上面。 协议 您可能已经有过这样的经验:将十六进制表示的值转换为十进制,结果显示为17和6。这两个数字可以用来判断这是一个TCP还是UDP协议。 TCP 使用 6 端口,UDP 使用 17 端口。因此,我们可以根据这个数值将结构进行划分,以便进行分析。
首先,我们来了解一下 TCP 协议中需要了解的信息。 源/目的端口和序号/确认号、标志位、有效载荷(原始数据)从获取 IP 协议数据(总共 20 字节)开始, 源/目标端口,每个端口占用2字节并且可以了解到...,接下来 每个序列/确认号占用 4 字节这些标志需要进行一些计算。首先,从“Acknowledgment Number”之后的2个字节中,只提取后面的1个字节。 & 可以通过计算来确定。 0b00100000 & 计算结果显示“紧急标记”的值。如果值为0,则表示没有相关请求;如果值为1,则表示存在相关请求。 * 0b00010000:确认值 * 0b00001000:推送值 * 0b00000100:重置值 * 0b00000010:同步值 * 0b00000001:完成值因此,我们可以通过计算这6个标志位,然后获取最后的 Payload。Payload 的起始位置是从 TCP Header 的第 20 字节开始,但有时可能为空,因此需要进行过滤。如果 Payload 不为空, 在下一个数据包的头部和数据(即,在前一个数据包之前)出现之前。 只需进行提取。
※ 提供 TCP 状态信息 旗帜这些值在三方握手过程中,为我们提供了有用的信息。 紧急是 紧急请求这指的是…… 嗯是 已完成表示“……”,或者“……”。 推动是 立即将收到的数据传递给应用程序层。这表示…… 重置是 在强制断开连接后,忽略接收到的其他数据。 同步是 请求连接这指的是……,最后是…… 尾款这表示正常的连接结束。如果在监控到此 Syn 请求,并随后将其阻止,可以增强安全性。
如果我们从 Syn 和 Ack,以及序列号的角度来看连接过程,首先客户端向特定服务器发起连接请求。 在发出 Syn 请求时,随机选择 Seq 编号发送给服务器。服务器已收到。 序列号加上 1,以及确认号再次发送给客户。 客户是 将收到的确认编号(ACK)加 1,然后作为序列号发送,并生成一个新的随机确认编号。最终,通过发送这些信息,可以建立连接。 了解“Syn”和“Ack”的概念,可以帮助我们识别攻击目标。 端口扫描这使得我们能够实现这一点。在发起攻击之前,务必在 TCP 日志中留下记录。 首先确认服务器是否已启动。这是执行的操作。首先,发送 Syn 请求,然后收到 Ack 响应后,立即断开连接。 一种不发送“最终连接已完成”确认请求的方式由这些元素组成。 严格来说,这个过程是 TCP 半开放扫描(隐蔽扫描)这种信息被称为“TCP信息”。 这种TCP信息的重要原因在于,它可以利用防火墙来阻止或拦截特定端口和标志的请求,从而在攻击发生之前将其阻止。
※ TCP的数据包包含 网络通信数据包(HTTP的GET和POST方法的具体内容),即实际传输的数据。里面装满了。
如果继续讨论UDP,那么在UDP中: 源/目标端口和 UDP 数据包只需要提取这些信息即可。相比于 TCP,这个过程更加简单。同样,从网络层级的 IP 协议开始计算, 源/目的端口分别占用2字节简单来说,就是先计算出数据部分的大小,然后加上 UDP 头部和数据(有效载荷)的总长度。 长度当数据包发送时,UDP报文的数据部分需要减去 -8。这是因为在UDP报文之前,有两个端口号和长度信息,每个信息占用2个字节。 总共 8 字节这是因为源/目的端口一开始就固定为每个2字节。 UDP报载数据从长度字段中减去8字节。通过这些步骤,您就可以提取所需的信息。
※ 在使用 UDP 协议发送查询时,使用的端口是 53。 通常,我们会使用 UDP 发送查询,以便获取目标 DNS 服务器的 IP 地址。 这有两种方式:正向查询和反向查询。 www.google.com 前者是指查找具有相同主机名的对应 IP 地址;后者是指仅知道 IP 地址(例如 192.168.0.10),然后查找对应的主机名。
评论
在过去一周的最后一天,我使用了 Python 编写代码,用于分析网络数据包。通过使用 Python 编写代码来分析这些结构,我逐渐理解了如何提取这些信息。从下周开始,我可能会涉及到移动设备,因此,我需要充分理解本周学习到的各种结构。
登录