1.mimikatz源码分析-lsadump模块(注册表)
2.怎样能记下别人在我电脑上登陆过的码提码QQ密码?
mimikatz源码分析-lsadump模块(注册表)
mimikatz是一款内网渗透中的强大工具,本文将深入分析其lsadump模块中的取源sam部分,探索如何从注册表获取用户哈希。软件
首先,码提码简要了解一下Windows注册表hive文件的取源结构。hive文件结构类似于PE文件,软件开发源码用法包括文件头和多个节区,码提码每个节区又有节区头和巢室。取源其中,软件巢箱由HBASE_BLOCK表示,码提码巢室由BIN和CELL表示,取源整体结构被称为“储巢”。软件通过分析hive文件的码提码结构图,可以更直观地理解其内部组织。取源
在解析过程中,软件需要关注的关键部分包括块的签名(regf)和节区的签名(hbin)。这些签名对于定位和解析注册表中的数据至关重要。
接下来,深入解析mimikatz的解析流程。在具备sam文件和system文件的情况下,主要分为以下步骤:获取注册表system的HTML作业源码分享句柄、读取计算机名和解密密钥、获取注册表sam的句柄以及读取用户名和用户哈希。若无sam文件和system文件,mimikatz将直接通过官方API读取本地机器的注册表。
在mimikatz中,会定义几个关键结构体,包括用于标识操作的注册表对象和内容的结构体(PKULL_M_REGISTRY_HANDLE)以及注册表文件句柄结构体(HKULL_M_REGISTRY_HANDLE)。这些结构体包含了文件映射句柄、映射到调用进程地址空间的位置、巢箱的项目要求提供源码起始位置以及用于查找子键和子键值的键巢室。
在获取注册表“句柄”后,接下来的任务是获取计算机名和解密密钥。密钥位于HKLM\SYSTEM\ControlSet\Current\Control\LSA,通过查找键值,将其转换为四个字节的密钥数据。利用这个密钥数据,mimikatz能够解析出最终的密钥。
对于sam文件和system文件的操作,主要涉及文件映射到内存的过程,通过Windows API(CreateFileMapping和MapViewOfFile)实现。号码推广源码1.3这些API使得mimikatz能够在不占用大量系统资源的情况下,方便地处理大文件。
在获取了注册表系统和sam的句柄后,mimikatz会进一步解析注册表以获取计算机名和密钥。对于密钥的获取,mimikatz通过遍历注册表项,定位到特定的键值,并通过转换宽字符为字节序列,最终组装出密钥数据。
接着,waves插件源码教程解析过程继续进行,获取用户名和用户哈希。在解析sam键时,mimikatz首先会获取SID,然后遍历HKLM\SAM\Domains\Account\Users,解析获取用户名及其对应的哈希。解析流程涉及多个步骤,包括定位samKey、获取用户名和用户哈希,以及使用samKey解密哈希数据。
对于samKey的获取,mimikatz需要解密加密的数据,使用syskey作为解密密钥。解密过程根据加密算法(rc4或aes)有所不同,但在最终阶段,mimikatz会调用系统函数对数据进行解密,从而获取用户哈希。
在完成用户哈希的解析后,mimikatz还提供了一个额外的功能:获取SupplementalCreds。这个功能可以解析并解密获取对应用户的SupplementalCredentials属性,包括明文密码及哈希值,为用户提供更全面的哈希信息。
综上所述,mimikatz通过解析注册表,实现了从系统中获取用户哈希的高效功能,为内网渗透提供了强大的工具支持。通过深入理解其解析流程和关键结构体的定义,可以更好地掌握如何利用mimikatz进行深入的安全分析和取证工作。
怎样能记下别人在我电脑上登陆过的QQ密码?
qq密码算法
作者:佚名 文章来源:网络 浏览: 更新时间:-5-7
在QQ对应号码目录下user.db文件从h起字节为与密码相关数据,其中后个字节和Hash后摘要有关.这个字节后4个字节是QQ号码。
下列是一些常用的Hash算法(从微软加密头文件中提取出来的)
#define CALG_MD2 1 MD2算法
#define CALG_MD4 2 MD4算法
#define CALG_MD5 3 MD5算法
#define CALG_SHA 4 SHA算法
#define CALG_SHA1 4 SHA1算法
#define CALG_MAC 5 MAC算法
#define ALG_SID_RIPEMD 6 RIPEMD算法
#define ALG_SID_RIPEMD 7 RIPEMD算法
#define ALG_SID_SSL3SHAMD5 8 SSL3SHAMD5算法
#define CALG_HMAC 9 HMAC算法
而MD5算法中需要使用下面几个初始值
context->state[0] = 0x;
context->state[1] = 0xefcdab;
context->state[2] = 0xbadcfe;
context->state[3] = 0x;
呵呵,在QQ中一搜索,果然几个特征值赫然在目。但是显然QQ使用了上述个字节中的前四个字节对MD5密文又做了处理,我跟了两天还是没有头绪(头晕脑胀)。但是我发现把这四个字节改成 ,然后登陆输入正确密码,仍然会提示密码不一致是否到服务器验证,选择是,然后验证成功后,这个字节的后个字节恰好就是密码的MD5密文。有兴趣的高手可以继续看看奥(其中密码比较函数地址为:A7E0C)
例:
1B D5 5D D7 0D 6D E2 0A E9 0F 5A E1 DF CA
DF CA 即是我的QQ号。不过可不要暴力破解我的奥:)
1B D5 5D D7 0D 6D E2 0A E9 0F 5A E1就是和口令相关的数据
如果把1B D5 改为 ,然后按上述步骤登陆后,5D D7 0D 6D E2 0A E9 0F 5A E1即变为口令的MD5密文。
算法源代码如下:
头文件:
// Decrypt.h: interface for the CDecrypt class.
//
//////////////////////////////////////////////////////////////////////
#define AFX_DECRYPT_H__DB8_C__BE_2CFBA2__INCLUDED_
#if _MSC_VER >
#pragma once
#endif // _MSC_VER >
#define _WIN_WINNT 0x
#include <afxpriv.h>
#include <Wincrypt.h>
class CDecrypt
{
public:
BOOL EncryptMessage(const TCHAR *Message,TCHAR *pHashData,int *pHashLen,int Algorithm);
CDecrypt();
virtual ~CDecrypt();
};
#endif // !defined(AFX_DECRYPT_H__DB8_C__BE_2CFBA2__INCLUDED_)
CPP文件:
// Decrypt.cpp: implementation of the CDecrypt class.
//
//////////////////////////////////////////////////////////////////////
#include stdafx.h
#include Decrypt.h
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CDecrypt::CDecrypt()
{
}
CDecrypt::~CDecrypt()
{
}
BOOL CDecrypt::EncryptMessage(const TCHAR *Message,TCHAR *pHashData,int *pHashLen,int Algorithm)
{
BOOL bResult = TRUE;
HCRYPTPROV hProv = NULL;
HCRYPTKEY hKey = NULL;
HCRYPTKEY hXchgKey = NULL;
HCRYPTHASH hHash = NULL;
DWORD dwLength;
// Get handle to user default provider.
if (CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0))
{
// Create hash object.
if (CryptCreateHash(hProv, Algorithm, 0, 0, &hHash))
{
// Hash password string.
dwLength = sizeof(TCHAR)*_tcslen(Message);
if (CryptHashData(hHash, (BYTE *)Message, dwLength, 0))
{
CryptGetHashParam(hHash,2,(BYTE*)pHashData,(DWORD*)pHashLen,0);
}
else
{
// Error during CryptHashData!
bResult = FALSE;
}
CryptDestroyHash(hHash); // Destroy session key.
}
else
{
// Error during CryptCreateHash!
bResult = FALSE;
}
CryptReleaseContext(hProv, 0);
}
return bResult;
}
使用:
TCHAR Hash[];
int Len=-1;
CString Message=Your Message;
m_decrypt.EncryptMessage((LPCSTR)(Message),Hash,&Len,CALG_MD5);
Hash中存放的就是MD5密文。你可以使用上述算法
#define CALG_MD2 1 MD2算法
#define CALG_MD4 2 MD4算法
#define CALG_MD5 3 MD5算法
#define CALG_SHA 4 SHA算法
来替换CALG_MD5参数.