亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rainbowcrack.cpp

?? Rainbow加密算法的Crack程序
?? CPP
字號:
/*
   RainbowCrack - a general propose implementation of Philippe Oechslin's faster time-memory trade-off technique.

   Copyright (C) Zhu Shuanglei <shuanglei@hotmail.com>
*/

#ifdef _WIN32
	#pragma warning(disable : 4786)
#endif

#include "CrackEngine.h"

#ifdef _WIN32
	#include <io.h>
#else
	#include <sys/types.h>
	#include <sys/stat.h>
	#include <unistd.h>
#endif

#include <openssl/md4.h>
#ifdef _WIN32
	#pragma comment(lib, "libeay32.lib")
#endif

//////////////////////////////////////////////////////////////////////

#ifdef _WIN32
void GetTableList(string sWildCharPathName, vector<string>& vPathName)
{
	vPathName.clear();

	string sPath;
	int n = sWildCharPathName.find_last_of('\\');
	if (n != -1)
		sPath = sWildCharPathName.substr(0, n + 1);

	_finddata_t fd;
	long handle = _findfirst(sWildCharPathName.c_str(), &fd);
	if (handle != -1)
	{
		do
		{
			string sName = fd.name;
			if (sName != "." && sName != ".." && !(fd.attrib & _A_SUBDIR))
			{
				string sPathName = sPath + sName;
				vPathName.push_back(sPathName);
			}
		} while (_findnext(handle, &fd) == 0);

		_findclose(handle);
	}
}
#else
void GetTableList(int argc, char* argv[], vector<string>& vPathName)
{
	vPathName.clear();

	int i;
	for (i = 1; i <= argc - 3; i++)
	{
		string sPathName = argv[i];

		struct stat buf;
		if (lstat(sPathName.c_str(), &buf) == 0)
		{
			if (S_ISREG(buf.st_mode))
				vPathName.push_back(sPathName);
		}
	}
}
#endif

bool NormalizeHash(string& sHash)
{
	string sNormalizedHash = sHash;

	if (   sNormalizedHash.size() % 2 != 0
		|| sNormalizedHash.size() < MIN_HASH_LEN * 2
		|| sNormalizedHash.size() > MAX_HASH_LEN * 2)
		return false;

	// Make lower
	int i;
	for (i = 0; i < sNormalizedHash.size(); i++)
	{
		if (sNormalizedHash[i] >= 'A' && sNormalizedHash[i] <= 'F')
			sNormalizedHash[i] = sNormalizedHash[i] - 'A' + 'a';
	}

	// Character check
	for (i = 0; i < sNormalizedHash.size(); i++)
	{
		if (   (sNormalizedHash[i] < 'a' || sNormalizedHash[i] > 'f')
			&& (sNormalizedHash[i] < '0' || sNormalizedHash[i] > '9'))
			return false;
	}

	sHash = sNormalizedHash;
	return true;
}

void LoadLMHashFromPwdumpFile(string sPathName, vector<string>& vUserName, vector<string>& vLMHash, vector<string>& vNTLMHash)
{
	vector<string> vLine;
	if (ReadLinesFromFile(sPathName, vLine))
	{
		int i;
		for (i = 0; i < vLine.size(); i++)
		{
			vector<string> vPart;
			if (SeperateString(vLine[i], "::::", vPart))
			{
				string sUserName = vPart[0];
				string sLMHash   = vPart[2];
				string sNTLMHash = vPart[3];

				if (sLMHash.size() == 32 && sNTLMHash.size() == 32)
				{
					if (NormalizeHash(sLMHash) && NormalizeHash(sNTLMHash))
					{
						vUserName.push_back(sUserName);
						vLMHash.push_back(sLMHash);
						vNTLMHash.push_back(sNTLMHash);
					}
					else
						printf("invalid lm/ntlm hash %s:%s\n", sLMHash.c_str(), sNTLMHash.c_str());
				}
			}
		}
	}
	else
		printf("can't open %s\n", sPathName.c_str());
}

bool NTLMPasswordSeek(unsigned char* pLMPassword, int nLMPasswordLen, int nLMPasswordNext,
					  unsigned char* pNTLMHash, string& sNTLMPassword)
{
	if (nLMPasswordNext == nLMPasswordLen)
	{
		unsigned char md[16];
		MD4(pLMPassword, nLMPasswordLen * 2, md);
		if (memcmp(md, pNTLMHash, 16) == 0)
		{
			sNTLMPassword = "";
			int i;
			for (i = 0; i < nLMPasswordLen; i++)
				sNTLMPassword += char(pLMPassword[i * 2]);
			return true;
		}
		else
			return false;
	}

	if (NTLMPasswordSeek(pLMPassword, nLMPasswordLen, nLMPasswordNext + 1, pNTLMHash, sNTLMPassword))
		return true;

	if (   pLMPassword[nLMPasswordNext * 2] >= 'A'
		&& pLMPassword[nLMPasswordNext * 2] <= 'Z')
	{
		pLMPassword[nLMPasswordNext * 2] = pLMPassword[nLMPasswordNext * 2] - 'A' + 'a';
		if (NTLMPasswordSeek(pLMPassword, nLMPasswordLen, nLMPasswordNext + 1, pNTLMHash, sNTLMPassword))
			return true;
		pLMPassword[nLMPasswordNext * 2] = pLMPassword[nLMPasswordNext * 2] - 'a' + 'A';
	}

	return false;
}

bool LMPasswordCorrectCase(string sLMPassword,
						   unsigned char* pNTLMHash, string& sNTLMPassword)
{
	if (sLMPassword.size() == 0)
	{
		sNTLMPassword = "";
		return true;
	}

	unsigned char* pLMPassword = new unsigned char[sLMPassword.size() * 2];
	int i;
	for (i = 0; i < sLMPassword.size(); i++)
	{
		pLMPassword[i * 2    ] = sLMPassword[i];
		pLMPassword[i * 2 + 1] = 0x00;
	}
	bool fRet = NTLMPasswordSeek(pLMPassword, sLMPassword.size(), 0, pNTLMHash, sNTLMPassword);
	delete pLMPassword;

	return fRet;
}

void Usage()
{
	Logo();

	printf("usage: rcrack rainbow_table_pathname -h hash\n");
	printf("       rcrack rainbow_table_pathname -l hash_list_file\n");
	printf("       rcrack rainbow_table_pathname -f pwdump_file\n");
	printf("rainbow_table_pathname: pathname of the rainbow table(s), wildchar(*, ?) supported\n");
	printf("-h hash:                use raw hash as input\n");
	printf("-l hash_list_file:      use hash list file as input, each hash in a line\n");
	printf("-f pwdump_file:         use pwdump file as input, this will handle lanmanager hash only\n");
	printf("\n");
	printf("example: rcrack *.rt -h 5d41402abc4b2a76b9719d911017c592\n");
	printf("         rcrack *.rt -l hash.txt\n");
	printf("         rcrack *.rt -f hash.txt\n");
}

int main(int argc, char* argv[])
{
#ifdef _WIN32
	if (argc != 4)
	{
		Usage();
		return 0;
	}
	string sWildCharPathName = argv[1];
	string sInputType        = argv[2];
	string sInput            = argv[3];

	// vPathName
	vector<string> vPathName;
	GetTableList(sWildCharPathName, vPathName);
#else
	if (argc < 4)
	{
		Usage();
		return 0;
	}
	string sInputType        = argv[argc - 2];
	string sInput            = argv[argc - 1];

	// vPathName
	vector<string> vPathName;
	GetTableList(argc, argv, vPathName);
#endif
	if (vPathName.size() == 0)
	{
		printf("no rainbow table found\n");
		return 0;
	}

	// fCrackerType, vHash, vUserName, vLMHash
	bool fCrackerType;			// true: hash cracker, false: lm cracker
	vector<string> vHash;		// hash cracker
	vector<string> vUserName;	// lm cracker
	vector<string> vLMHash;		// lm cracker
	vector<string> vNTLMHash;	// lm cracker
	if (sInputType == "-h")
	{
		fCrackerType = true;

		string sHash = sInput;
		if (NormalizeHash(sHash))
			vHash.push_back(sHash);
		else
			printf("invalid hash: %s\n", sHash.c_str());
	}
	else if (sInputType == "-l")
	{
		fCrackerType = true;

		string sPathName = sInput;
		vector<string> vLine;
		if (ReadLinesFromFile(sPathName, vLine))
		{
			int i;
			for (i = 0; i < vLine.size(); i++)
			{
				string sHash = vLine[i];
				if (NormalizeHash(sHash))
					vHash.push_back(sHash);
				else
					printf("invalid hash: %s\n", sHash.c_str());
			}
		}
		else
			printf("can't open %s\n", sPathName.c_str());
	}
	else if (sInputType == "-f")
	{
		fCrackerType = false;

		string sPathName = sInput;
		LoadLMHashFromPwdumpFile(sPathName, vUserName, vLMHash, vNTLMHash);
	}
	else
	{
		Usage();
		return 0;
	}
	
	if (fCrackerType && vHash.size() == 0)
		return 0;
	if (!fCrackerType && vLMHash.size() == 0)
		return 0;

	// hs
	CHashSet hs;
	if (fCrackerType)
	{
		int i;
		for (i = 0; i < vHash.size(); i++)
			hs.AddHash(vHash[i]);
	}
	else
	{
		int i;
		for (i = 0; i < vLMHash.size(); i++)
		{
			hs.AddHash(vLMHash[i].substr(0, 16));
			hs.AddHash(vLMHash[i].substr(16, 16));
		}
	}

	// Run
	CCrackEngine ce;
	ce.Run(vPathName, hs);

	// Statistics
	printf("statistics\n");
	printf("-------------------------------------------------------\n");
	printf("plaintext found:          %d of %d (%.2f%%)\n", hs.GetStatHashFound(),
															hs.GetStatHashTotal(),
															100.0f * hs.GetStatHashFound() / hs.GetStatHashTotal());
	printf("total disk access time:   %.2f s\n", ce.GetStatTotalDiskAccessTime());
	printf("total cryptanalysis time: %.2f s\n", ce.GetStatTotalCryptanalysisTime());
	printf("total chain walk step:    %d\n",     ce.GetStatTotalChainWalkStep());
	printf("total false alarm:        %d\n",     ce.GetStatTotalFalseAlarm());
	printf("total chain walk step due to false alarm: %d\n", ce.GetStatTotalChainWalkStepDueToFalseAlarm());
	printf("\n");

	// Result
	printf("result\n");
	printf("-------------------------------------------------------\n");
	if (fCrackerType)
	{
		int i;
		for (i = 0; i < vHash.size(); i++)
		{
			string sPlain, sBinary;
			if (!hs.GetPlain(vHash[i], sPlain, sBinary))
			{
				sPlain  = "<notfound>";
				sBinary = "<notfound>";
			}

			printf("%s  %s  hex:%s\n", vHash[i].c_str(), sPlain.c_str(), sBinary.c_str());
		}
	}
	else
	{
		int i;
		for (i = 0; i < vLMHash.size(); i++)
		{
			string sPlain1, sBinary1;
			bool fPart1Found = hs.GetPlain(vLMHash[i].substr(0, 16), sPlain1, sBinary1);
			if (!fPart1Found)
			{
				sPlain1  = "<notfound>";
				sBinary1 = "<notfound>";
			}

			string sPlain2, sBinary2;
			bool fPart2Found = hs.GetPlain(vLMHash[i].substr(16, 16), sPlain2, sBinary2);
			if (!fPart2Found)
			{
				sPlain2  = "<notfound>";
				sBinary2 = "<notfound>";
			}

			string sPlain = sPlain1 + sPlain2;
			string sBinary = sBinary1 + sBinary2;

			// Correct case
			if (fPart1Found && fPart2Found)
			{
				unsigned char NTLMHash[16];
				int nHashLen;
				ParseHash(vNTLMHash[i], NTLMHash, nHashLen);
				if (nHashLen != 16)
					printf("debug: nHashLen mismatch\n");
				string sNTLMPassword;
				if (LMPasswordCorrectCase(sPlain, NTLMHash, sNTLMPassword))
				{
					sPlain = sNTLMPassword;
					sBinary = HexToStr((const unsigned char*)sNTLMPassword.c_str(), sNTLMPassword.size());
				}
				else
					printf("case correction for password %s fail!\n", sPlain.c_str());
			}

			// Display
			printf("%-14s  %s  hex:%s\n", vUserName[i].c_str(),
										  sPlain.c_str(),
										  sBinary.c_str());
		}
	}

	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩伦理电影网| 51精品秘密在线观看| 国产精品三级视频| 久久久综合激的五月天| 欧美偷拍一区二区| 久久久综合九色合综国产精品| 一区二区三区成人| 国产一区二区看久久| 日本精品免费观看高清观看| 久久综合网色—综合色88| 亚洲男人的天堂在线观看| 精品一区二区日韩| 欧美日韩性生活| 国产精品久久久久aaaa樱花| 奇米四色…亚洲| 欧美在线视频不卡| 国产精品不卡视频| 国产成人aaaa| 欧美成人bangbros| 日韩中文欧美在线| 欧洲精品在线观看| 亚洲欧洲日本在线| 丁香天五香天堂综合| 欧美电影免费观看完整版| 亚洲夂夂婷婷色拍ww47| 成人综合在线网站| 国产欧美一区二区三区在线看蜜臀| 日产国产高清一区二区三区| 欧美在线三级电影| 一区二区三区不卡在线观看| 91美女在线视频| 亚洲日穴在线视频| 91玉足脚交白嫩脚丫在线播放| 国产精品私人自拍| 99久久久精品免费观看国产蜜| 国产精品理论片| 成人一区二区视频| 中文字幕视频一区| 91色.com| 婷婷六月综合网| 欧美蜜桃一区二区三区| 亚洲18女电影在线观看| 欧美人与禽zozo性伦| 首页国产丝袜综合| 日韩精品在线看片z| 精品一区二区三区久久久| 久久久久99精品国产片| 国产精品亚洲第一| 欧美国产激情二区三区| www.成人在线| 亚洲激情欧美激情| 777奇米成人网| 韩国女主播成人在线| 国产亚洲精品aa| 91麻豆文化传媒在线观看| 亚洲在线观看免费视频| 在线综合+亚洲+欧美中文字幕| 九色porny丨国产精品| 国产精品天天摸av网| 欧美日韩精品欧美日韩精品| 美女尤物国产一区| 久久精品视频免费| 色综合久久久久| 亚洲成人激情社区| 久久综合九色综合97婷婷| 不卡一区在线观看| 日韩精品午夜视频| 国产精品无遮挡| 在线不卡中文字幕| 国产不卡在线一区| 午夜av一区二区三区| 国产欧美一区二区精品久导航| 在线视频你懂得一区| 精品在线播放免费| 亚洲欧美日韩人成在线播放| 日韩欧美在线影院| 99精品视频免费在线观看| 喷水一区二区三区| 亚洲三级免费观看| 国产视频在线观看一区二区三区| 色综合一区二区三区| 经典三级视频一区| 亚洲综合色视频| 国产精品污污网站在线观看| 欧美高清精品3d| 色8久久精品久久久久久蜜| 国产一区二区中文字幕| 午夜精品久久久久久久99水蜜桃| 国产人久久人人人人爽| 91精品国产91综合久久蜜臀| 色婷婷综合久久久久中文| 国产精品一级片| 美女www一区二区| 一区二区三区精品视频在线| 中文在线资源观看网站视频免费不卡| 91精品久久久久久久99蜜桃| 91麻豆国产福利在线观看| 国产精品一区免费视频| 全部av―极品视觉盛宴亚洲| 亚洲免费在线视频| 国产精品免费久久| 久久久.com| 精品黑人一区二区三区久久| 欧美乱妇15p| 欧美无砖专区一中文字| 99国产精品国产精品久久| 成人免费视频国产在线观看| 国内精品久久久久影院薰衣草| 日本成人中文字幕| 亚洲一区二区高清| 亚洲一区二区免费视频| 亚洲综合色噜噜狠狠| 一区二区日韩av| 亚洲乱码中文字幕| 亚洲欧美自拍偷拍| 中文字幕一区二区三区av| 国产精品区一区二区三| 欧美激情一区二区在线| 国产亚洲一区二区三区四区| 久久久综合激的五月天| 国产亚洲欧美日韩俺去了| 欧美激情一区二区三区全黄 | 韩国精品在线观看| 久久精品99久久久| 乱一区二区av| 国产酒店精品激情| 国产**成人网毛片九色| jiyouzz国产精品久久| eeuss鲁片一区二区三区在线看| 成人av在线播放网站| 99视频精品免费视频| 在线精品亚洲一区二区不卡| 欧美视频一二三区| 日韩女优毛片在线| 久久久99精品久久| 亚洲欧美视频一区| 亚洲图片欧美视频| 麻豆国产精品777777在线| 国产精品一区二区久激情瑜伽| 不卡av电影在线播放| 欧美综合色免费| 日韩视频一区在线观看| 国产日韩欧美精品电影三级在线| 国产精品不卡视频| 婷婷国产在线综合| 国产精品亚洲专一区二区三区 | 久久婷婷色综合| 中文字幕在线一区二区三区| 亚洲成人tv网| 国产精品12区| 色婷婷激情一区二区三区| 91精品国产手机| 国产精品乱人伦| 偷拍与自拍一区| 成人一二三区视频| 884aa四虎影成人精品一区| 国产日产精品1区| 亚洲成人激情自拍| av在线一区二区三区| 91精品国产综合久久久久久久| 国产偷国产偷精品高清尤物| 一区二区三区高清在线| 国产乱子轮精品视频| 欧美在线你懂得| 国产精品麻豆网站| 久久激情综合网| 欧美亚洲禁片免费| 国产免费久久精品| 日本女人一区二区三区| 色偷偷一区二区三区| 久久久精品2019中文字幕之3| 亚洲成人动漫一区| 色婷婷一区二区三区四区| 亚洲精品一区二区三区在线观看| 一区二区三区欧美在线观看| 国产91精品在线观看| 欧美日韩不卡一区二区| 亚洲黄色片在线观看| 国产精品12区| xf在线a精品一区二区视频网站| 亚洲va欧美va国产va天堂影院| 91视频国产观看| 久久久久久黄色| 久久99精品久久久久婷婷| 欧美日韩一本到| 国产精品家庭影院| 国产精品香蕉一区二区三区| 精品久久久久99| 日韩va欧美va亚洲va久久| 91精品麻豆日日躁夜夜躁| 亚洲精品视频免费看| 成人激情av网| 欧美激情一区二区在线| 国产精品一区在线观看乱码| 欧美成人精品3d动漫h| 激情国产一区二区| 精品国产髙清在线看国产毛片 | 国产成人精品网址| 久久网站最新地址| 国产乱国产乱300精品|