コード例 #1
0
ファイル: RainbowTableDump.cpp プロジェクト: kost/drcrack
int main(int argc, char* argv[])
{
	if (argc != 3)
	{
		Logo();

		printf("usage: rtdump rainbow_table_pathname rainbow_chain_index\n");
		return 0;
	}
	string sPathName = argv[1];
	int nRainbowChainIndex = atoi(argv[2]);

	int nRainbowChainLen, nRainbowChainCount;
	if (!CChainWalkContext::SetupWithPathName(sPathName, nRainbowChainLen, nRainbowChainCount))
		return 0;
	if (nRainbowChainIndex < 0 || nRainbowChainIndex > nRainbowChainCount - 1)
	{
		printf("valid rainbow chain index range: 0 - %d\n", nRainbowChainCount - 1);
		return 0;
	}

	// Open file
	FILE* file = fopen(sPathName.c_str(), "rb");
	if (file == NULL)
	{
		printf("failed to open %s\n", sPathName.c_str());
		return 0;
	}

	// Dump
	if (GetFileLen(file) != nRainbowChainCount * 16)
		printf("rainbow table size check fail\n");
	else
	{
		// Read required chain
		RainbowChain chain;
		fseek(file, nRainbowChainIndex * 16, SEEK_SET);
		fread(&chain, 1, 16, file);

		// Dump required chain
		CChainWalkContext cwc;
		cwc.SetIndex(chain.nIndexS);
		int nPos;
		for (nPos = 0; nPos < nRainbowChainLen - 1; nPos++)
		{
			cwc.IndexToPlain();
			cwc.PlainToHash();
			printf("#%-4d  %s  %s  %s\n", nPos,
										  uint64tohexstr(cwc.GetIndex()).c_str(),
										  cwc.GetPlainBinary().c_str(),
										  cwc.GetHash().c_str());
			cwc.HashToIndex(nPos);
		}
		printf("#%-4d  %s\n", nPos, uint64tohexstr(cwc.GetIndex()).c_str());
		if (cwc.GetIndex() != chain.nIndexE)
			printf("\nwarning: rainbow chain integrity check fail!\n");
	}

	// Close file
	fclose(file);

	return 0;
}
コード例 #2
0
void rcrackiThread::CheckAlarmO()
{
	uint32_t i;

	if(cudaDevId < 0) {
		for (i = 0; i < t_pChainsFoundO.size(); i++)
		{
			RainbowChainO* t_pChain = t_pChainsFoundO[i];
			int t_nGuessedPos = t_nGuessedPoss[i];		
			
			CChainWalkContext cwc;

			uint64_t nIndexS = t_pChain->nIndexS;
			cwc.SetIndex(nIndexS);

			int nPos;
			for (nPos = 0; nPos < t_nGuessedPos; nPos++)
			{
				cwc.IndexToPlain();
				cwc.PlainToHash();
				cwc.HashToIndex(nPos);
			}
			cwc.IndexToPlain();
			cwc.PlainToHash();
			if (cwc.CheckHash(t_pHash))
			{
				t_Hash = cwc.GetHash();
				t_Plain = cwc.GetPlain();
				t_Binary = cwc.GetBinary();

				foundHash = true;
				break;
			}
			else {
				foundHash = false;
				t_nChainWalkStepDueToFalseAlarm += t_nGuessedPos + 1;
				t_nFalseAlarm++;
			}
		}
	}
#if GPU
	else {
		uint64_t *calcBuff = new uint64_t[2*cudaBuffCount];
		CudaCWCExtender ex(&t_cwc);
		rcuda::RCudaTask cuTask;
		int nGuessedPos, nMaxGuessedPos;
		int ii, calcSize;
		size_t chainSize;

		ex.Init();
		chainSize = t_pChainsFoundO.size();
		foundHash = false;
		for(i = 0; !foundHash && i < chainSize; ) {
			calcSize = std::min<int>(i + cudaBuffCount, chainSize);
			nMaxGuessedPos = 0;
			for(ii = i; ii < calcSize; ii++) {
				calcBuff[(ii<<1)] = t_pChainsFoundO[ii]->nIndexS;
				nGuessedPos = t_nGuessedPoss[ii];
				calcBuff[(ii<<1)+1] = (unsigned int)nGuessedPos;
				nMaxGuessedPos = (nMaxGuessedPos>=nGuessedPos? nMaxGuessedPos : nGuessedPos);
			}
			calcSize -= i;

			cuTask.hash = ex.GetHash();
			cuTask.startIdx = i;
			cuTask.idxCount = calcSize;
			cuTask.dimVec = ex.GetPlainDimVec();
			cuTask.dimVecSize = ex.GetPlainDimVecSize()/2;
			cuTask.charSet = ex.GetCharSet();
			cuTask.charSetSize = ex.GetCharSetSize();
			cuTask.reduceOffset = ex.GetReduceOffset();
			cuTask.plainSpaceTotal = ex.GetPlainSpaceTotal();
			cuTask.rainbowChainLen = nMaxGuessedPos;
			cuTask.kernChainSize = cudaChainSize;
			cuTask.targetHash = t_pHash;

			calcSize = rcuda::CheckAlarmOnCUDA(&cuTask, calcBuff);
			if(calcSize > 0 && calcSize == cuTask.idxCount) {
				for(ii = 0; ii < calcSize; ii++) {
					if(calcBuff[(ii<<1)|1] >= (1ull<<63)) {
						CChainWalkContext cwc;
						cwc.SetIndex(calcBuff[ii<<1]);
						cwc.IndexToPlain();
						cwc.PlainToHash();
						t_Hash = cwc.GetHash();
						t_Plain = cwc.GetPlain();
						t_Binary = cwc.GetBinary();
						foundHash = true;
						break;
					} else {
						t_nChainWalkStepDueToFalseAlarm += calcBuff[(ii<<1)|1] + 1;
						t_nFalseAlarm++;
					}
				}
				i += calcSize;
			} else {
				printf("CheckAlarmO() on CUDA failed!\n");
				exit(101);
			}
		}
		delete [] calcBuff;
	}
#endif
}