1.mimikatz源码分析-lsadump模块(注册表)
2.计算机程序开发中预定义出来的注册表是什么?
3.如何建立注册表测监测系统,要源代码的表保保护~~
mimikatz源码分析-lsadump模块(注册表)
mimikatz, a powerful tool for internal network penetration, delves into its source code in this article as a continuation of a previous piece. The focus here is on the lsadump module, specifically the SAM portion, which involves extracting user hashes from the registry.
Windows Registry HIVE file format analysis is essential for understanding the functionality of mimikatz's lsadump module. To get a comprehensive view, refer to articles on Windows Registry HIVE file format and a basic understanding of Registry HIVE files. The structure of HIVE files, reminiscent of a PE file, comprises "file headers" and "sections" with their respective "section headers" and "sections". Each HIVE file begins with "HBASE_BLOCK", which records various information about the file.
For a detailed representation of the structure, refer to the Editor template script. While the template code sometimes fails to correctly parse HIVE files, the structure definitions used in the following explanations adhere to the definitions within mimikatz.
HBASE_BLOCK
Editor presents the following description of the structure:
Each field's meaning can be deduced from its name. Key attention is given to the block's signature: "regf", which is crucial for understanding the file's content.
HBIN
Editor's description of the structure is as follows:
Similar to a PE file's section header, this structure contains details about the "section's" size, offset, and so on. The "section signature" for a nest is "hbin", which helps in locating the nest to ensure subsequent successful key-value queries. Various types of data, such as keys, values, and security descriptors, are stored in distinct "nest rooms".
mimikatz's parsing process involves:
1. Obtaining the "handle" to the "system" HIVE file 2. Reading the computer name and decryption key 3. Obtaining the "handle" to the "sam" HIVE file 4. Reading usernames and user hashes
In the absence of "sam" and "system" files, mimikatz directly accesses the current machine's Registry via its official API.
Before diving into the code, a brief overview of the structures created by mimikatz is provided:
PKULL_M_REGISTRY_HANDLE is used to identify the Registry object and its content. It comprises two members:
type denotes the Registry hive file operation or direct access to Registry items via an API. The focus shifts to the second member, pHandleHive, which involves the next structure:
This structure represents the "handle" to a Registry file, consisting of four members:
hFileMapping: file mapping handle pMapViewOfFile: points to the file mapping's mapped location in the calling process's address space for accessing the mapped file content pStartOf: points to the first nest in the Registry hive file pRootNamedKey: points to a key nest room for finding subkeys and subkey values
For key nest rooms, the structure defined within mimikatz is as follows:
Compared to the Editor output, this structure is similar, with discrepancies in the details. The differences in the two structures do not hinder the analysis of the parsing code within mimikatz.
Getting the "handle" to the "sam" and "system" files involves mapping the files into memory. This process utilizes two Windows APIs:
CreateFileMapping and MapViewOfFile
Upon creating the "handle", the next step is to query the computer name and decryption key. The decryption key length is bytes. The key is located at HKLM\SYSTEM\ControlSet\Current\Control\LSA. The key is derived from four different keys' values, arranged in a fixed order. After locating the keys, the final bytes of the key data are obtained. The key data is then assembled according to a fixed order.
For obtaining the computer name and decryption key, focus on the functions:
kull_m_registry_RegOpenKeyEx and kull_m_registry_RegQueryInfoKey
These functions involve two branches: using the RegOpenKeyEx API directly to open a Registry key, or recursively searching the provided hive file to locate the corresponding subkey list nest (hl). Essentially, opening a Registry key involves locating the desired nest.
The process is akin to traversing a binary tree, starting from the root node and progressing to each leaf node, layer by layer, until the target key nest is located. Notably, moving from a key nest to another involves querying the corresponding subkey list nest, as each key nest stores an offset to its subkeys, which is used to locate the corresponding subkey's offset.
计算机程序开发中预定义出来的表是什么?
在程序开发中预定义出来的表就是注册表。1.提供了一个 注册表,护源 这是码注一个预定义出来的表, 可以用来保存任何 C 代码想保存的册表 Lua 值。 这个表可以用有效伪索引 LUA_REGISTRYINDEX 来定位。源码量能变化源码 任何 C 库都可以在这张表里保存数据,注册 为了防止冲突,表保保护你需要特别小心的护源选择键名。 一般的码注用法是,你可以用一个包含你的册表库名的字符串做为键名, 或者取你自己 C 对象的源码地址,以轻量用户数据的注册形式做键, 还可以用你的表保保护代码创建出来的任意 Lua 对象做键。 关于变量名,护源字符串键名中以下划线加大写字母的新闻资讯源码名字被 Lua 保留。
2.注册表中的整数键用于引用机制 (), 以及一些预定义的值。 因此,整数键不要用于别的目的。
3.当你创建了一个新的 Lua 状态机, 其中的注册表内就预定义好了几个值。这些预定义值可以用整数索引到, 这些整数以常数形式定义在 lua.h 中。 有下列常数:
4.LUA_RIDX_MAINTHREAD: 注册表中这个索引下是状态机的主线程。(主线程和状态机同时被创建出来。)
5.LUA_RIDX_GLOBALS: 注册表的这个索引下是全局环境。
6.在内部实现中,Lua 使用了 C 的 longjmp 机制来处理错误。(如果你使用 C++ 编译,Lua 将换成异常; 细节请在源代码中搜索 LUAI_THROW。13人牛牛源码) 当 Lua 碰到任何错误 (比如内存分配错误、类型错误、语法错误、还有运行时错误) 它都会 抛出一个错误出去; 也就是调用一次长跳转。 在 保护环境 下, Lua 使用 setjmp 来设置一个恢复点; 任何发生的错误都会跳转到最近的一个恢复点。
7.如果错误发生在保护环境之外,Lua 会先调用 panic 函数 () 然后调用 abort 来退出宿主程序。 你的 panic 函数只要不返回 (例如:长跳转到你在 Lua 外你自己设置的恢复点) 就可以不退出程序。
8.panic 函数以错误消息处理器()的方式运行;错误消息在栈顶。 不同的是,它不保证栈空间。 做任何压栈操作前,panic 函数都必须先检查是否有足够的空间 ()。
大多数 API 函数都有可能抛出错误,产品单页源码 例如在内存分配错误时就会抛出。 每个函数的文档都会注明它是否可能抛出错误。
9.在 C 函数内部,你可以通过调用 lua_error 来抛出错误。
如何建立注册表测监测系统,要源代码的~~
1 .检测启动程序
双击右下角系统图标栏的盾牌图标可以激活它的主窗口。此时在“注册表”标签中能够看见Windows系统对于所有用户提供的启动选项以及当前运行的程序列表,由于这些程序都是在安装RegRun之前已经驻留在系统中的,因此建议大家点击右部最上面的“查看”按钮,检测一下它们是否属于正常合法的程序。如果RegRun提示某个程序可能对系统造成破坏,只要点击程序对应的彩色灯并将其更改为红色灯就能够暂时中止该程序的运行,并将相关的程序从注册表中清理出去,这样就避免了重新开启计算机之后木马病毒程序驻留内存的危险。而且一旦不小心误删了有用的广告网站源码注册表文件,还可以在弹出的菜单中选取“恢复最近删除的项目”,此时程序会把所有删除的注册表项目列表显示,只要在这里选取恢复的项目并点击“撤销”按钮就能够将系统恢复到原先状态,因此大家在使用的时候不必有后顾之忧了。
同样,采用上述方法可以对所有的启动程序选项进行检测,需要指出的是,RegRun 覆盖的启动程序非常全面,不仅仅包括了常见的Win.ini、System.ini、Config.sys 和Autoexec.bat 等程序选项,还有公共启动程序组、VxD驱动器和许多注册表的启动键值。应该说只要你想到的启动程序在这里都可以找到,因此建议大家按照上述步骤对每个启动程序都检测一下,以确保系统处于正常稳定的运行状态。
2 .启动程序监测
在我们正常使用计算机的时候,有可能使用磁盘复制文件或者是浏览网页时而感染木马程序或者是病毒,如果这些程序需要在启动Windows时就自动运行,那么就必须要更改注册表或者相关的启动文件。只要RegRun 驻留在系统后台,这些程序就没有下手的机会了。因为RegRun会始终对这些重要的启动文件进行实时监测,一旦遇到企图修改的情况,它会立即中止正常的操作,并以弹出窗口的形式引起你的注意。如图4 所示,图中带有“+”的就是新增的启动程序,而窗口上部的信息框中还有该文件添加的注册表文件地址。此时可以判断是否属于安装超级解霸、病毒防火墙等软件必须在开机时运行的程序,确认之后点击下部的“那是正常的”允许修改,或者通过“改回来”禁止此次的修改,这样就能够防止木马和病毒软件驻留在系统启动程序中了。
3 .安全启动
大家都知道Windows 9X启动实际上是先运行DOS内核,然后在其基础上运行Windows 程序,为了确保系统的安全,RegRun的安全启动功能可以从DOS开始就监测所有启动选项的变化。激活这项功能只要在图1 所示的设置窗口中的“安全启动”标签下选取“在DOS 平台中运行”命令即可。以后每次启动计算机的时候,RegRun 都会在DOS加载完成后立即对所有的程序进行监测,这除了上述提及的各种启动引导文件之外,连注册表的相关键值都不放过(如图5),一旦程序检测到这些启动程序被更改,它还会弹出编辑窗口供你修改确认(如图6)。因此RegRun的这种运行模式可以在Windows启动之前进行监测,将有可能威胁到系统安全的木马、病毒及时查找出来,让它们无法潜伏在Windows 中运行。
4.定制不同模式启动选项
当Windows 使用时间长了之后,速度肯定是会下降的,但开机时间长则是由于加载了过多的程序所致。比如在不上网、不安装软件的时候也许就不需要驻留防火墙,而上网冲浪的时候也不需要超级解霸的光碟伺服器运行在后台,所以我们可以利用RegRun的启动注册表备份功能来定制不同模式的启动选项。
比如我们操作计算机的时候主要分为上网冲浪和游戏两种用途,就可以分别定制两种类型的注册表启动文件。首先在RegRun 的主窗口中先进入“注册表”标签,将病毒防火墙、MSN、OICQ 等不需要的选项删除,接着运行“文件->预设文件保存为”命令,将其保存为名称是“游戏”的文件; 然后将这些删除的程序恢复,并将虚拟光驱、超级解霸光碟伺服器等不需要的选项删除,再将其保存为名称是“网络”的文件。这样当我们需要上网冲浪的时候,只要进入RegRun 安装目录并双击“网络”文件,此时RegRun 会自动弹出恢复预设文件窗口,点击“确定”按钮并根据提示重新启动计算机,就可以在没有虚拟光驱、超级解霸伺服器的环境下上网冲浪;同样载入“游戏”文件也能够去除一些不需要驻留内存的程序,加快游戏的速度。
怎么样,RegRun 的功能还不错吧?它在提供了注册表监测、保护系统免受木马病毒侵袭的同时也附带了良好的恢复功能,即使新手也不用害怕注册表这个雷区了。其实限于篇幅的缘故,还有很多实用功能无法一一向大家详述,有兴趣的话就自己深入研究一下,相信你会发现更多更精彩的内容。