forked from Public-Mirror/Textractor
final commits, ready for next release!
This commit is contained in:
parent
f63bd97f71
commit
bc8ba90838
@ -52,8 +52,14 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
mainWindow = this;
|
mainWindow = this;
|
||||||
processCombo = mainWindow->findChild<QComboBox*>("processCombo");
|
processCombo = mainWindow->findChild<QComboBox*>("processCombo");
|
||||||
|
processCombo->lineEdit()->setAlignment(Qt::AlignHCenter);
|
||||||
|
processCombo->lineEdit()->setReadOnly(true);
|
||||||
ttCombo = mainWindow->findChild<QComboBox*>("ttCombo");
|
ttCombo = mainWindow->findChild<QComboBox*>("ttCombo");
|
||||||
|
ttCombo->lineEdit()->setAlignment(Qt::AlignHCenter);
|
||||||
|
ttCombo->lineEdit()->setReadOnly(true);
|
||||||
extenCombo = mainWindow->findChild<QComboBox*>("extenCombo");
|
extenCombo = mainWindow->findChild<QComboBox*>("extenCombo");
|
||||||
|
extenCombo->lineEdit()->setAlignment(Qt::AlignHCenter);
|
||||||
|
extenCombo->lineEdit()->setReadOnly(true);
|
||||||
textOutput = mainWindow->findChild<QPlainTextEdit*>("textOutput");
|
textOutput = mainWindow->findChild<QPlainTextEdit*>("textOutput");
|
||||||
|
|
||||||
hostSignaller->Initialize();
|
hostSignaller->Initialize();
|
||||||
@ -65,6 +71,7 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||||||
std::map<int, QString> extensions = LoadExtensions();
|
std::map<int, QString> extensions = LoadExtensions();
|
||||||
for (auto i : extensions) extenCombo->addItem(QString::number(i.first) + ":" + i.second);
|
for (auto i : extensions) extenCombo->addItem(QString::number(i.first) + ":" + i.second);
|
||||||
Host::Open();
|
Host::Open();
|
||||||
|
Host::AddConsoleOutput(L"NextHooker beta v2.0.0 by Artikash\r\nSource code and more information available under GPLv3 at https://github.com/Artikash/NextHooker");
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
MainWindow::~MainWindow()
|
||||||
@ -85,7 +92,11 @@ void MainWindow::AddProcess(unsigned int processId)
|
|||||||
{
|
{
|
||||||
Sleep(50);
|
Sleep(50);
|
||||||
QStringList hooks = allProcesses.at(i).split(" , ");
|
QStringList hooks = allProcesses.at(i).split(" , ");
|
||||||
for (int j = 1; j < hooks.length(); ++j) Host::InsertHook(processId, ParseHCode(hooks.at(j)));
|
for (int j = 1; j < hooks.length(); ++j)
|
||||||
|
{
|
||||||
|
Sleep(10);
|
||||||
|
Host::InsertHook(processId, ParseHCode(hooks.at(j)));
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -144,8 +155,11 @@ QVector<HookParam> MainWindow::GetAllHooks(DWORD processId)
|
|||||||
void MainWindow::on_attachButton_clicked()
|
void MainWindow::on_attachButton_clicked()
|
||||||
{
|
{
|
||||||
bool ok;
|
bool ok;
|
||||||
int processId = QInputDialog::getInt(this, "Attach Process", "Process ID?\r\nYou can find this under Task Manager -> Details", 0, 0, 100000, 1, &ok);
|
QString process = QInputDialog::getItem(this, "Select Process",
|
||||||
if (ok) Host::InjectProcess(processId);
|
"If you don't see the process you want to inject, try running with admin rights",
|
||||||
|
GetAllProcesses(), 0, true, &ok);
|
||||||
|
if (!ok) return;
|
||||||
|
if (!Host::InjectProcess(process.split(":")[1].toInt())) Host::AddConsoleOutput(L"Failed to attach");
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_detachButton_clicked()
|
void MainWindow::on_detachButton_clicked()
|
||||||
@ -160,7 +174,14 @@ void MainWindow::on_hookButton_clicked()
|
|||||||
"Enter hook code\r\n/H{A|B|W|S|Q}[N]data_offset[*drdo][:sub_offset[*drso]]@addr[:module]",
|
"Enter hook code\r\n/H{A|B|W|S|Q}[N]data_offset[*drdo][:sub_offset[*drso]]@addr[:module]",
|
||||||
QLineEdit::Normal, "/H", &ok
|
QLineEdit::Normal, "/H", &ok
|
||||||
);
|
);
|
||||||
if (ok) Host::InsertHook(processCombo->currentText().split(":")[0].toInt(), ParseHCode(hookCode));
|
if (!ok) return;
|
||||||
|
HookParam toInsert = ParseHCode(hookCode);
|
||||||
|
if (toInsert.type == 0 && toInsert.length_offset == 0)
|
||||||
|
{
|
||||||
|
Host::AddConsoleOutput(L"invalid /H code");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Host::InsertHook(processCombo->currentText().split(":")[0].toInt(), ParseHCode(hookCode));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_unhookButton_clicked()
|
void MainWindow::on_unhookButton_clicked()
|
||||||
|
@ -97,6 +97,9 @@
|
|||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="processCombo">
|
<widget class="QComboBox" name="processCombo">
|
||||||
|
<property name="editable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
<property name="insertPolicy">
|
<property name="insertPolicy">
|
||||||
<enum>QComboBox::InsertAtBottom</enum>
|
<enum>QComboBox::InsertAtBottom</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -181,7 +184,11 @@
|
|||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="extenCombo"/>
|
<widget class="QComboBox" name="extenCombo">
|
||||||
|
<property name="editable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="addExtenButton">
|
<widget class="QPushButton" name="addExtenButton">
|
||||||
@ -231,7 +238,14 @@
|
|||||||
<number>4</number>
|
<number>4</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="ttCombo"/>
|
<widget class="QComboBox" name="ttCombo">
|
||||||
|
<property name="editable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="maxVisibleItems">
|
||||||
|
<number>50</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPlainTextEdit" name="textOutput">
|
<widget class="QPlainTextEdit" name="textOutput">
|
||||||
@ -265,18 +279,6 @@
|
|||||||
<height>20</height>
|
<height>20</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QMenu" name="menuOptions">
|
|
||||||
<property name="title">
|
|
||||||
<string>Options</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QMenu" name="menuAbout">
|
|
||||||
<property name="title">
|
|
||||||
<string>About</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<addaction name="menuOptions"/>
|
|
||||||
<addaction name="menuAbout"/>
|
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
<layoutdefault spacing="6" margin="11"/>
|
<layoutdefault spacing="6" margin="11"/>
|
||||||
|
16
GUI/misc.cpp
16
GUI/misc.cpp
@ -1,12 +1,13 @@
|
|||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
#include "../vnrhook/include/const.h"
|
#include "../vnrhook/include/const.h"
|
||||||
#include <QRegExp>
|
#include <QRegExp>
|
||||||
|
#include <QStringList>
|
||||||
#include <Psapi.h>
|
#include <Psapi.h>
|
||||||
|
|
||||||
QString GetFullModuleName(DWORD processId, HMODULE module)
|
QString GetFullModuleName(DWORD processId, HMODULE module)
|
||||||
{
|
{
|
||||||
HANDLE handle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processId);
|
HANDLE handle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processId);
|
||||||
wchar_t buffer[MAX_PATH];
|
wchar_t buffer[MAX_PATH] = {};
|
||||||
GetModuleFileNameExW(handle, module, buffer, MAX_PATH);
|
GetModuleFileNameExW(handle, module, buffer, MAX_PATH);
|
||||||
CloseHandle(handle);
|
CloseHandle(handle);
|
||||||
return QString::fromWCharArray(buffer);
|
return QString::fromWCharArray(buffer);
|
||||||
@ -18,6 +19,19 @@ QString GetModuleName(DWORD processId, HMODULE module)
|
|||||||
return fullName.remove(0, fullName.lastIndexOf("\\") + 1);
|
return fullName.remove(0, fullName.lastIndexOf("\\") + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList GetAllProcesses()
|
||||||
|
{
|
||||||
|
DWORD allProcessIds[0x1000];
|
||||||
|
DWORD spaceUsed;
|
||||||
|
QStringList ret;
|
||||||
|
if (!EnumProcesses(allProcessIds, sizeof(allProcessIds), &spaceUsed)) return ret;
|
||||||
|
for (int i = 0; i < spaceUsed / sizeof(DWORD); ++i)
|
||||||
|
if (GetModuleName(allProcessIds[i]).size())
|
||||||
|
ret.push_back(GetModuleName(allProcessIds[i]) + ": " + QString::number(allProcessIds[i]));
|
||||||
|
ret.sort();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
DWORD Hash(QString module)
|
DWORD Hash(QString module)
|
||||||
{
|
{
|
||||||
module = module.toLower();
|
module = module.toLower();
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
QString GetFullModuleName(DWORD processId, HMODULE module = NULL);
|
QString GetFullModuleName(DWORD processId, HMODULE module = NULL);
|
||||||
QString GetModuleName(DWORD processId, HMODULE module = NULL);
|
QString GetModuleName(DWORD processId, HMODULE module = NULL);
|
||||||
|
QStringList GetAllProcesses();
|
||||||
HookParam ParseHCode(QString HCode);
|
HookParam ParseHCode(QString HCode);
|
||||||
QString GenerateHCode(HookParam hp, DWORD processId);
|
QString GenerateHCode(HookParam hp, DWORD processId);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user