Yea, I would say SP hack is undetected if you use JP injection method.
Make a form header with namespace NoobTrainer and #include <windows.h> :(
Form1.cpp
Code:
#include "Form1.h"
using namespace NoobTrainer;
void Main(void)
{
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Application::Run(gcnew Form1);
Application::Exit();
}
DWORD SP= 0x0048d3d2;
BYTE EnableSP[] = {0xDB};
BYTE DisableSP[] = {0xD9};
void Form1::checkBox1_CheckedChanged(System::Object^ sender, System::EventArgs^ e)
{
if(this->checkBox1->Checked)
{
memcpy((void*)SP, EnableSP, sizeof(EnableSP));
}
else
{
memcpy((void*)SP, DisableSP, sizeof(DisableSP));
}
}
MainDll.cpp
Code:
#include <windows.h>
extern void Main(void);
::BOOL WINAPI DllWork ( __in ::HMODULE hModule )
{
Main();
return true;
}
::BOOL WINAPI DllMain ( __in ::HMODULE hModule, __in ::DWORD dwReason, __in __reserved ::LPVOID lpvReserved )
{
::HANDLE hThread = NULL;
if ( dwReason == DLL_PROCESS_ATTACH )
{
if (( hThread = ::CreateThread(NULL, 0, (::LPTHREAD_START_ROUTINE)&DllWork, (::HMODULE)hModule, 0, NULL) ) == NULL )
{
return FALSE;
}
if ( ::CloseHandle(hThread) == FALSE )
{
}
}
return TRUE;
}
You got yourself a trainer, no problem. I still don't recommend memcopy. ;)
this->Name = L"Form1";
this->Text = L"Fail 1337";
this->checkBox1->AutoSize = true;
this->checkBox1->Location = System::Drawing::Point(13, 13);
this->checkBox1->Name = L"checkBox1";
this->checkBox1->Size = System::Drawing::Size(40, 17);
this->checkBox1->TabIndex = 0;
this->checkBox1->Text = L"SP";
this->checkBox1->UseVisualStyleBackColor = true;
this->checkBox1->CheckedChanged += gcnew System::EventHandler(this, &Form1::checkBox1_CheckedChanged);
So stupid.. xD