Compare commits
4 commits
Author | SHA1 | Date | |
---|---|---|---|
|
ad13b411d1 | ||
|
1523aff981 | ||
|
74f4478c32 | ||
|
e3b7cf162b |
5 changed files with 18 additions and 12 deletions
|
@ -20,7 +20,7 @@
|
|||
#include <QTextStream>
|
||||
#include "brutethread.h"
|
||||
|
||||
brutethread::brutethread(const QByteArray &fileContent, quint64 length, QVector<checksum*> checksum_vector, QVector<QByteArray> checksums, bool strictMatch) : checksum_vector(checksum_vector), checksums(checksums), fileContent(fileContent), strictMatch(strictMatch), length(length) {}
|
||||
brutethread::brutethread(const QByteArray &fileContent, quint64 length, quint64 begin, QVector<checksum*> checksum_vector, QVector<QByteArray> checksums, bool strictMatch) : checksum_vector(checksum_vector), checksums(checksums), fileContent(fileContent), strictMatch(strictMatch), length(length), begin(begin) {}
|
||||
|
||||
void brutethread::run()
|
||||
{
|
||||
|
@ -31,11 +31,11 @@ void brutethread::run()
|
|||
const QByteArray generatedHash = generator->generateChecksum(content);
|
||||
for (const QByteArray &hash : checksums) {
|
||||
if (!strictMatch && generatedHash.left(hash.length()) == hash) {
|
||||
QTextStream(stdout) << "MATCH: " << generator->formatName() << " Checksum " << hash << " Start " << seek << " End " << seek+length << Qt::endl;
|
||||
QTextStream(stdout) << "MATCH: " << generator->formatName() << " Checksum " << hash << " Start " << begin+seek << " End " << begin+seek+length << Qt::endl;
|
||||
emit matched();
|
||||
}
|
||||
else if (strictMatch && generatedHash.length() == hash.length() && generatedHash == hash) {
|
||||
QTextStream(stdout) << "MATCH: " << generator->formatName() << " Checksum " << hash << " Start " << seek << " End " << seek+length << Qt::endl;
|
||||
QTextStream(stdout) << "MATCH: " << generator->formatName() << " Checksum " << hash << " Start " << begin+seek << " End " << begin+seek+length << Qt::endl;
|
||||
emit matched();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ class brutethread : public QThread
|
|||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit brutethread(const QByteArray &fileContent, quint64 length, QVector<checksum*> checksum_vector, QVector<QByteArray> checksums, bool strictMatch);
|
||||
explicit brutethread(const QByteArray &fileContent, quint64 length, quint64 begin, QVector<checksum*> checksum_vector, QVector<QByteArray> checksums, bool strictMatch);
|
||||
void run();
|
||||
|
||||
private:
|
||||
|
@ -42,6 +42,7 @@ private:
|
|||
QByteArray fileContent;
|
||||
bool strictMatch;
|
||||
quint64 length;
|
||||
quint64 begin;
|
||||
|
||||
signals:
|
||||
void matched();
|
||||
|
|
|
@ -44,13 +44,11 @@ QByteArray checksum_lib::generateChecksum(const QByteArray &data)
|
|||
const u_int32_t hash = hash32Func(udata, size);
|
||||
free(udata);
|
||||
return QByteArray::number((quint32)hash, 16);
|
||||
return QByteArray();
|
||||
}
|
||||
else {
|
||||
const u_int64_t hash = hash64Func(udata, size);
|
||||
free(udata);
|
||||
return QByteArray::number((quint64)hash, 16);
|
||||
return QByteArray();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
10
src/main.cpp
10
src/main.cpp
|
@ -36,7 +36,7 @@ int main(int argc, char *argv[])
|
|||
{
|
||||
QCoreApplication a(argc, argv);
|
||||
a.setApplicationName("checkbrute");
|
||||
a.setApplicationVersion("0.3");
|
||||
a.setApplicationVersion("0.3.3");
|
||||
|
||||
QCommandLineParser commandLineParser;
|
||||
commandLineParser.addHelpOption();
|
||||
|
@ -49,7 +49,8 @@ int main(int argc, char *argv[])
|
|||
QCommandLineOption lengthsOption = QCommandLineOption("lengths", "Lengths to use for bruteforcing.", "lengths");
|
||||
QCommandLineOption threadsOption = QCommandLineOption("threads", "Threads to use for bruteforcing.", "threads");
|
||||
QCommandLineOption strictOption = QCommandLineOption(QStringList() << "s" << "strict", "Match checksums strict.");
|
||||
commandLineParser.addOptions(QList<QCommandLineOption>() << algorithmsOption << startOption << stopOption << lengthsOption << threadsOption << strictOption);
|
||||
QCommandLineOption testOption = QCommandLineOption(QStringList() << "t" << "test", "Test checkbrute plugin hashes.");
|
||||
commandLineParser.addOptions(QList<QCommandLineOption>() << algorithmsOption << startOption << stopOption << lengthsOption << threadsOption << strictOption << testOption);
|
||||
commandLineParser.process(a);
|
||||
|
||||
QTextStream(stderr) << "INFO: Launch " << a.applicationName() << " " << a.applicationVersion() << "..." << Qt::endl;
|
||||
|
@ -62,6 +63,7 @@ int main(int argc, char *argv[])
|
|||
const QString bruteforceFile = args.at(0);
|
||||
const QString checksumsFile = args.at(1);
|
||||
const bool strictHash = commandLineParser.isSet(strictOption);
|
||||
const bool testEnabled = commandLineParser.isSet(testOption);
|
||||
|
||||
if (strictHash) {
|
||||
QTextStream(stderr) << "INFO: Strict matching enabled" << Qt::endl;
|
||||
|
@ -123,6 +125,8 @@ int main(int argc, char *argv[])
|
|||
version = QString::fromUtf8(versionFunc());
|
||||
checksum_map[format] = new checksum_lib(formatFunc, hash32Func, hashSzFunc);
|
||||
QTextStream(stderr) << "INFO: " << format << " plugin " << fileName << " loaded" << Qt::endl;
|
||||
if (testEnabled)
|
||||
QTextStream(stderr) << "TEST: " << format << " checkbrute -> " << QString::number(hash32Func((unsigned char*)"checkbrute", 7), 16) << Qt::endl;
|
||||
}
|
||||
else if (formatFunc && hash64Func && hashSzFunc) {
|
||||
QString version = "undefined";
|
||||
|
@ -131,6 +135,8 @@ int main(int argc, char *argv[])
|
|||
version = QString::fromUtf8(versionFunc());
|
||||
checksum_map[format] = new checksum_lib(formatFunc, hash64Func, hashSzFunc);
|
||||
QTextStream(stderr) << "INFO: " << format << " plugin " << fileName << " loaded" << Qt::endl;
|
||||
if (testEnabled)
|
||||
QTextStream(stderr) << "TEST: " << format << " checkbrute -> " << QString::number(hash64Func((unsigned char*)"checkbrute", 7), 16) << Qt::endl;
|
||||
}
|
||||
else {
|
||||
QTextStream(stderr) << "WARNING: Failed loading plugin " << fileName << "!" << Qt::endl;
|
||||
|
|
|
@ -142,9 +142,10 @@ mainthread::mainthread(const QString &bruteforceFile, const QString &checksumsFi
|
|||
}
|
||||
|
||||
// Clear unneeded bytes
|
||||
if (begin != 0 && end != (quint64)fileContent.size()) {
|
||||
if (begin != 0 || end != (quint64)fileContent.size()) {
|
||||
fileContent = fileContent.mid(begin, end - begin);
|
||||
fileContent.squeeze();
|
||||
QTextStream(stderr) << "INFO: Bruteforce Start " << begin << " End " << end << Qt::endl;
|
||||
}
|
||||
|
||||
if (!lenghts_str.isEmpty()) {
|
||||
|
@ -267,7 +268,7 @@ void mainthread::run()
|
|||
if (threads >= mthreads)
|
||||
eventLoop.exec();
|
||||
QTextStream(stderr) << "[" << std::distance(lengths.constBegin(), it) + 1 << "/" << lengthsCount << "] [" << min << "/" << max << "] Bruteforcing...\r";
|
||||
brutethread *thread = new brutethread(fileContent, min, checksum_vector, checksums, strictHash);
|
||||
brutethread *thread = new brutethread(fileContent, min, begin, checksum_vector, checksums, strictHash);
|
||||
QObject::connect(thread, &QThread::finished, this, &mainthread::threadFinished);
|
||||
QObject::connect(thread, &brutethread::matched, this, &mainthread::matched);
|
||||
thread->start(QThread::LowPriority);
|
||||
|
@ -278,7 +279,7 @@ void mainthread::run()
|
|||
if (threads >= mthreads)
|
||||
eventLoop.exec();
|
||||
QTextStream(stderr) << "[" << std::distance(lengths.constBegin(), it) + 1 << "/" << lengthsCount << "] [" << clength << "/" << max << "] Bruteforcing...\r";
|
||||
brutethread *thread = new brutethread(fileContent, clength, checksum_vector, checksums, strictHash);
|
||||
brutethread *thread = new brutethread(fileContent, clength, begin, checksum_vector, checksums, strictHash);
|
||||
QObject::connect(thread, &QThread::finished, this, &mainthread::threadFinished);
|
||||
QObject::connect(thread, &brutethread::matched, this, &mainthread::matched);
|
||||
thread->start(QThread::LowPriority);
|
||||
|
@ -290,7 +291,7 @@ void mainthread::run()
|
|||
if (threads >= mthreads)
|
||||
eventLoop.exec();
|
||||
QTextStream(stderr) << "[" << std::distance(lengths.constBegin(), it) + 1 << "/" << lengthsCount << "] [" << clength << "/" << max << "] Bruteforcing...\r";
|
||||
brutethread *thread = new brutethread(fileContent, clength, checksum_vector, checksums, strictHash);
|
||||
brutethread *thread = new brutethread(fileContent, clength, begin, checksum_vector, checksums, strictHash);
|
||||
QObject::connect(thread, &QThread::finished, this, &mainthread::threadFinished);
|
||||
QObject::connect(thread, &brutethread::matched, this, &mainthread::matched);
|
||||
thread->start(QThread::LowPriority);
|
||||
|
|
Loading…
Add table
Reference in a new issue