md5小工具

/***************************************************************************************
* AUTHOR : L0g1n
* DATE   : 2013-12-23
* MODULE : md5ToClipboard
* 
* MD5计算工具
* 双击运行程序后会自动拷贝文件到系统目录下、添加鼠标右键菜单、原文件自删除。
* 使用方法:
* 在需要计算的文件上右键选择md5--->Clipboard,然后MD5就被存放到剪贴版中了。
* 
* 开发原因:
* 1、由于经常使用MD5计算工具,计算完成后多数操作为复制到文档中,太过麻烦。
* 2、代码积累,该程序中所使用到的技术:自动请求Admin权限、注册表操作、自删除、剪贴板、鼠标右键添加等
* 
* 本程序特点:
* 无色无味无残留无界面
* 
* xp与Win8测试通过。
* 在xp下可能需要安装vs2010的运行库:Microsoft Visual C++ 2010
* 
* 如有问题:请联系:l0g1n@qq.com
****************************************************************************************
* Copyright (C) 2013 L0g1n.
****************************************************************************************/

#include "md5.h"
#include <shlobj.h>
#include <atlconv.h>
#pragma comment(lib, "shell32.lib")

//提升权限
BOOL RunElevated(LPCSTR pszPath)  
{  
	SHELLEXECUTEINFOA shex;  

	memset( &shex, 0, sizeof( shex) );  

	shex.cbSize        = sizeof( SHELLEXECUTEINFOA );  
	shex.fMask        = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;  
	shex.hwnd        = NULL;  
	shex.lpVerb        = ("runas");  
	shex.lpFile        = pszPath;  
	shex.lpDirectory    = NULL;
	shex.nShow        = SW_NORMAL;  
	return ::ShellExecuteExA( &shex ); 
}

int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdShow, int nShow)
{
	//获取参数
	LPWSTR *szArgList;
	int argCount;
	szArgList = CommandLineToArgvW(GetCommandLine(), &argCount);
	if(argCount == 2)
	{
		USES_CONVERSION;
		char md5[40] = {0};
		strcpy(md5, MD5File(W2A(szArgList[1])));
		for(int i = 0; i < 32; i++)
		{
			md5[i] = toupper(md5[i]);
		}

		//剪贴版操作
		if(OpenClipboard(NULL))
		{
			EmptyClipboard();
			HANDLE hClip = GlobalAlloc(GMEM_MOVEABLE, 40);
			char* pBuf = (char *)GlobalLock(hClip);
			strcpy(pBuf, md5);
			GlobalUnlock(hClip);
			SetClipboardData(CF_TEXT, hClip);
			CloseClipboard();
		}

		LocalFree(szArgList);
	}
	else
	{
		//该部分为第一次运行时的安装
		HKEY hKey;
		HKEY hSubKey;
		char szSource[MAX_PATH] = {0};
		char szDst[MAX_PATH] = {0};

		//文件拷贝
		GetModuleFileNameA(NULL, szSource, MAX_PATH);

		//请求UAC权限
		if(!IsUserAnAdmin())
		{
			RunElevated(szSource);
		}
		else
		{

			SHGetSpecialFolderPathA(NULL,szDst, CSIDL_PROGRAM_FILES, FALSE);
			lstrcatA(szDst, "\\md5ToClipboard.exe");

			if(!CopyFileA(szSource, szDst, FALSE))
			{
				MessageBoxA(NULL,"Copy Failed","Error",MB_OK);
				return -1;
			}
			char data[MAX_PATH] = {0};
			strcpy(data, szDst);
			lstrcatA(data, " %1");

			//注册表部分操作
			if(ERROR_SUCCESS == RegOpenKeyExA(HKEY_CLASSES_ROOT, "*", 0, KEY_SET_VALUE, &hKey))
			{
				if(ERROR_SUCCESS == RegCreateKeyA(hKey, "shell\\md5--->Clipboard\\command", &hSubKey))
				{
					if(ERROR_SUCCESS != RegSetValueExA(hSubKey, NULL, 0, REG_SZ, (BYTE *)data, strlen(data)))
					{
						MessageBoxA(NULL,"Reg Set Failed","Error",MB_ICONERROR);
					}
				}
				else
				{
					MessageBoxA(NULL, "Create Sub Key Failed", "Error", MB_ICONERROR);
				}
			}
			else
			{
				MessageBoxA(NULL, "shell Sub Key is not Exist", "Error", MB_ICONERROR);
			}
			RegCloseKey(hKey);
			RegCloseKey(hSubKey);

			//文件自删除
			char szDel[MAX_PATH] = {0};
			wsprintfA(szDel, "cmd.exe /c ping -n 5 127.0.0.1 && del \"%s\"", szSource);
			WinExec(szDel, SW_HIDE);
		}
	}

	return 0;
}


代码下载地址:

http://download.csdn.net/detail/l0g1n/6760731

md5解密小工具; 基础方法: 打开MD5_SSE2.exe,输入MD5值,按回车即可 高级方法: 用命令行进入MD5_SSE2所在目录 执行MD5_SSE2 注意事项:请将本程序放在英文路径下,放在中文路径下可能会出现问题 关于配置文件: 配置文件决定着密码生成引擎的行为 1.maskcharset.txt是掩码的配置文件 规则:第一个字符是掩码符号,接下来是该符号所对应的字符集 默认的掩码文件内的定义如下: (1)*:全部可输入字符(大小写字母+数字+特殊符号) (2)l:小写字母 (3)u:大写字母 (4)a:大小写字母 (5)p:小写字母+数字 (6)d:数字 (7)s:符号 (8)x:大小写字母+数字+符号 上面的定义只是默认的,你也可以根据需要进行修改 2.*.ini是决定密码生成引擎生成密码规则的文件(默认MD5Crk.ini) 规则:每行表示一种组合方式 该行首字母表示使用何种子生成引擎 (1)掩码生成引擎 首字母:m(mask) 每个掩码开头用“,”(半角逗号),逗号后面表示使用何种掩码,若字符前无逗号,则在生成的密码中直接使用此字符,若是两个逗号,则表示一个逗号(转义) 例子: m,l,l,l,l,l(五位小写字母) m,d,d,d,d,d,d(六位数字) m,l,l,l,d,d,d(前三位小写字母,后三位数字) (2)混合生成引擎(基于字典和掩码的混合) 首字母:h(hybrid) 使用掩码的方法和上面的一样,另外可以使用字典,用";"(半角分号)表示字典文件名的开头,随后是字典文件名,用","或";"来表示下一个配置方式 例子: h;pass.txt,d,d,d(取pass.txt字典文件的内容为开头,三位数字为结尾) h,d;pass.txt,d,d(以一位数字为开头,接着是pass.txt字典中的单词,结尾是两位数字)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值