threst's Blog

如何在MIMIKATZ添加模块

2018/06/01 Share

嗨,大家好 !我今天要写关于“我怎样才能添加到模块到mimikatz中?”首先,你必须在github中克隆或下载。我使用Visual Studio Community 2015来打开该项目。

在尝试添加新模块之前,我们必须构建mimikatz项目。如果这里失败了,记得在下一次操作之前先修复你的开发环境。我试过了,结果成功了,让我们继续,我们在/ mimikatz / modules中创建自己的模块头和C文件,在这里:

/mimikatz/modules/kuhl_m_littlePrince.c
/mimikatz/modules/kuhl_m_littlePrince.h


我将讨论在检查项目时使用的一些全局变量。了解它们的用途将有助于我们开发模块。比如全局变量kuhl_m_littlePrincekuhl_m_c_littlePrince
或这些类型的全局变量:KUHL_M和KUHL_M_C
“KUHL_M”表示Kiwi用户级高级模块。
KUHL_M是由kuhl_m.h中的“struct _KUHL_M”定义的结构。

1
2
3
4
5
6
7
8
9
typedef struct _KUHL_M {
const wchar_t * shortName;
const wchar_t * fullName;
const wchar_t * description;
const unsigned short nbCommands;
const KUHL_M_C * commands;
const PKUHL_M_C_FUNC_INIT pInit;
const PKUHL_M_C_FUNC_INIT pClean;
} KUHL_M, *PKUHL_M;

kuhl_m.h中定义的struct KUHL_M * PKUHL_M`,这个结构的参数为:

1.shortName用作模块名称,
2.fullName用于列出显示名称
3.描述用于描述模块
4.nbcommand用于命令的数量。
5.命令使用KUL_M_C中定义的模块函数列表
6.由于“PKUHL_M_C_FUNC_INIT”定义的名称是指NTSTATUSpInitpCleanNTSTATUS的变量类型。

PINIT&pClean功能不是强制性的,只是为了调用函数之前初始化模块,则当模块被卸载的原型为PINIT&pClean相同:NTSTATUS kuhl_m_modulename_init/clean()

“KUHL_M_C”表示Kiwi用户级高级模块命令。

wchar_t是“无符号短”。PKUHL_M_C_FUNC定义了一个类型为“NTSTATUS”的函数

1
2
3
4
5
typedef struct _KUHL_M_C {
const PKUHL_M_C_FUNC pCommand;
const wchar_t * command;
const wchar_t * description;
} KUHL_M_C, *PKUHL_M_C;

1.pCommand是我们的模块功能
2.“command”说我们如何在终端中调用这个模块
3.描述是对函数做什么的简要描述NTSTATUS类型在Ntdef.h中定义,系统提供的状态码在Ntstatus.h中定义。
NTSTATUS值用于传递系统信息。它们有四种类型:成功值,信息值,警告和错误值

NTSTATUS kuhl_m_modulename_functioname(int argc,wchar_t * argv []);
它可以在NTSTATUS中返回它想要的内容,除了:STATUS_FATAL_APP_EXIT,需要退出mimikatz。


我们在头文件中做了必要的声明并传递给了主文件。

我们用kuhl_m_modulename.h&kuhl_m_modulename.c创建了我们的模块。最后一步我们需要在mimikatz.h中添加模块,然后在mimikatz.c模块列表中添加全局变量。


模块列表

你现在可以建立mimikatz,然后运行它!

如果你看到下面这个消息,那么你成功了!

祝你有美好的一天^^

本文翻译:https://littlesecurityprince.com/security/2018/03/18/ModuleMimikatz.html

CATALOG