注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

且行且记录

点滴记录,行的更远!

 
 
 

日志

 
 

用系统函数计算LM NT HASH  

2015-03-04 15:34:13|  分类: 一些练习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
无聊花了点时间做了个计算LM NT HASH的小程序。

h=LoadLibrary("advapi32.dll");这个库里的函数
lmhash=(LMHASH)GetProcAddress(h,"SystemFunction006");计算LMHASH的函数
nthash=(NTHASH)GetProcAddress(h,"SystemFunction007");计算NTHASH的函数

网上查询到的一些hash用于校验
1122
NTLM        : 9cbef67993aae509c59cfa647c8b13fb
LM          : 649e289f70fdb196aad3b435b51404ee

111222
NTLM        : 654449e9ef28e149e7d635204bf52ff4
LM          : 59dee31caf543937aad3b435b51404ee

计算的如下
C:\TEMP\vc>lmnthash 1122
=== 计算 1122 的LM NT HASH ===
lmhash=649E289F70FDB196AAD3B435B51404EE
nthash=9CBEF67993AAE509C59CFA647C8B13FB

C:\TEMP\vc>lmnthash 111222
=== 计算 111222 的LM NT HASH ===
lmhash=59DEE31CAF543937AAD3B435B51404EE
nthash=654449E9EF28E149E7D635204BF52FF4

lmnthash.cpp如下:
//LM NT HASH计算
//cl lmnthash.cpp
#include <windows.h>
#include <stdio.h>

typedef struct _UNICODE_STRING {
  USHORT  Length;
  USHORT  MaximumLength;
  PWSTR  Buffer;
} UNICODE_STRING, *PUNICODE_STRING;

typedef void (WINAPI *LMHASH)(unsigned char * szPassword, unsigned char * Buffer);
typedef void (WINAPI *NTHASH)(PUNICODE_STRING puPassword, unsigned char * Buffer);

LMHASH lmhash;
NTHASH nthash;

int init(void)
{
HMODULE h;
h=LoadLibrary("advapi32.dll");
if (h==0) return 0;
lmhash=(LMHASH)GetProcAddress(h,"SystemFunction006");
nthash=(NTHASH)GetProcAddress(h,"SystemFunction007");
return 1;
}

void get_lmhash(char * str)
{
int i;
unsigned char buf[0x40];
unsigned char buffer[0x400];

memset(buf, 0, sizeof(buf));
memset(buffer, 0, sizeof(buffer));

for (i=0; i<strlen(str); i++) //输入不要超过200h,否则溢出
{
buffer[i] = toupper(str[i]); //这里要转成大写
}

lmhash((unsigned char *)buffer,buf);

for (i=0; i<0x10; i++)
{
printf("%02X",buf[i]);
}

printf("\n");

}

void get_nthash(char * str)
{
int i;
unsigned char buf[0x40];
unsigned char buffer[0x400];

UNICODE_STRING us;

us.Length = 2*strlen(str);
us.MaximumLength = sizeof(buffer);
us.Buffer = (PWSTR)buffer;

memset(buf, 0, sizeof(buf));
memset(buffer, 0, sizeof(buffer));

for (i=0; i<strlen(str); i++) //输入不要超过200h,否则溢出
{
buffer[i*2] = str[i]; //简单转化成宽字符
}

nthash(&us,buf);

for (i=0; i<0x10; i++)
{
printf("%02X",buf[i]);
}

printf("\n");

}

int main(int argc, char *argv[])
{
if (argc<2)
{
printf("帮助:LM NT HASH计算\n");
printf("LMNTHASH string\n");
return 0;
}
if (init()==0) return 0;

printf("=== 计算 %s 的LM NT HASH ===\n", argv[1]);

printf("lmhash=");
get_lmhash(argv[1]);
printf("nthash=");
get_nthash(argv[1]);

return 0;
}

  评论这张
 
阅读(155)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017