more removal of protection,
MFC may not compile at all at this point.
This commit is contained in:
parent
086a299061
commit
3a4bc53645
|
@ -454,87 +454,15 @@ static int parseCommandLine(char *cmdline, char **argv)
|
||||||
return(argc);
|
return(argc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID WINAPI srandWrap(UINT n)
|
|
||||||
{
|
|
||||||
srand(n);
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned char kernel_encoded[] = { 0x14, 0xef, 0xe1, 0xe3, 0x18, 0x1c, 0xd1, 0x1f, 0xdd, 0x21, 0x25, 0x21, 0x00 };
|
|
||||||
static unsigned char getname_encoded[] = { 0xc8, 0x33, 0x3f, 0xdc, 0xdd, 0x21, 0x2a, 0x2e, 0xd5, 0x0f, 0x08, 0x0c, 0xf7, 0x15, 0xea, 0xe9, 0x12, 0xcd, 0x00 };
|
|
||||||
static unsigned char exit_encoded[] = { 0xca, 0xd2, 0xd5, 0xd9, 0x29, 0x27, 0x26, 0xdb, 0x20, 0x2d, 0x20, 0x00 };
|
|
||||||
|
|
||||||
static lpExitProcess protectHelp[2] = { (lpExitProcess)srandWrap, (lpExitProcess)0 };
|
|
||||||
|
|
||||||
typedef HMODULE (WINAPI* lpLoadLibrary)(LPCTSTR);
|
|
||||||
typedef FARPROC (WINAPI* lpGetProcAddress)(HMODULE, LPCSTR);
|
|
||||||
typedef int (*lpExecutableValid)(const char *);
|
|
||||||
typedef char *(*lpUnprotectBuffer)(unsigned char *, size_t);
|
|
||||||
|
|
||||||
#pragma optimize("", off)
|
|
||||||
SET_FN_PTR(LoadLibrary, 0x01301400);
|
|
||||||
SET_FN_PTR(GetProcAddress, 0x01301500);
|
|
||||||
SET_FN_PTR(ExecutableValid, 0x01301600);
|
|
||||||
SET_FN_PTR(unprotect_buffer, 0x01301700);
|
|
||||||
|
|
||||||
int VBA::doProtection()
|
|
||||||
{
|
|
||||||
char szEXEFileName[260];
|
|
||||||
*szEXEFileName = 0;
|
|
||||||
|
|
||||||
HMODULE hM_kernel32 = ((lpLoadLibrary)GET_FN_PTR(LoadLibrary))(unprotect_buffer(kernel_encoded, sizeof(kernel_encoded)));
|
|
||||||
if (hM_kernel32)
|
|
||||||
{
|
|
||||||
pGetModuleFileNameA = (lpGetModuleFileNameA)((lpGetProcAddress)GET_FN_PTR(GetProcAddress))(hM_kernel32, ((lpUnprotectBuffer)GET_FN_PTR(unprotect_buffer))(getname_encoded, sizeof(getname_encoded)));
|
|
||||||
if (pGetModuleFileNameA)
|
|
||||||
{
|
|
||||||
pGetModuleFileNameA(GetModuleHandle(0), szEXEFileName, sizeof(szEXEFileName));
|
|
||||||
}
|
|
||||||
|
|
||||||
pExitProcess = (lpExitProcess)((lpGetProcAddress)GET_FN_PTR(GetProcAddress))(hM_kernel32, ((lpUnprotectBuffer)GET_FN_PTR(unprotect_buffer))(exit_encoded, sizeof(exit_encoded)));
|
|
||||||
protectHelp[1] = pExitProcess;
|
|
||||||
|
|
||||||
return(((lpExecutableValid)GET_FN_PTR(ExecutableValid))(szEXEFileName));
|
|
||||||
}
|
|
||||||
return(-3);
|
|
||||||
}
|
|
||||||
|
|
||||||
static BOOL doStuffGood(VBA *vba, register int num)
|
|
||||||
{
|
|
||||||
protectHelp[vba->securityCheck2]((UINT)time(0));
|
|
||||||
num ^= 1;
|
|
||||||
return((BOOL)num);
|
|
||||||
}
|
|
||||||
|
|
||||||
static BOOL doStuffBad(VBA *vba, register int num)
|
|
||||||
{
|
|
||||||
num |= 1;
|
|
||||||
vba->pExitProcess(num);
|
|
||||||
return(doStuffGood(vba, num&1));
|
|
||||||
}
|
|
||||||
#pragma optimize("", on)
|
|
||||||
|
|
||||||
typedef bool (VBA::*trapPointer)(bool);
|
|
||||||
static trapPointer trapPointers[6];
|
|
||||||
static trapPointer *mainTrapPointer = trapPointers;
|
|
||||||
static trapPointer secondaryTrapPointer = &VBA::trap;
|
|
||||||
|
|
||||||
bool VBA::trap(bool value)
|
|
||||||
{
|
|
||||||
pExitProcess(value);
|
|
||||||
return(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL VBA::InitInstance()
|
BOOL VBA::InitInstance()
|
||||||
{
|
{
|
||||||
BOOL (*pointFamily[])(VBA *, int) = { doStuffGood, doStuffBad, doStuffBad, doStuffBad, doStuffBad, doStuffBad, doStuffBad, doStuffBad };
|
#if _MSC_VER < 1400
|
||||||
trapPointers[0] = trapPointers[1] = trapPointers[3] = trapPointers[4] = secondaryTrapPointer;
|
#ifdef _AFXDLL
|
||||||
trapPointers[2] = &VBA::updateRenderMethod;
|
Enable3dControls(); // Call this when using MFC in a shared DLL
|
||||||
trapPointers[5] = &VBA::updateRenderMethod0;
|
#else
|
||||||
|
Enable3dControlsStatic(); // Call this when linking to MFC statically
|
||||||
securityCheck = doProtection();
|
#endif
|
||||||
securityCheck2 = ((double)securityCheck < -0.987) ? 1 : securityCheck;
|
#endif
|
||||||
mainTrapPointer = &trapPointers[(securityCheck2+1)<<1];
|
|
||||||
secondaryTrapPointer = trapPointers[(((double)securityCheck > 0.4357) || ((double)securityCheck < -0.9123)) ? 2 : 5];
|
|
||||||
|
|
||||||
SetRegistryKey(_T("VBA"));
|
SetRegistryKey(_T("VBA"));
|
||||||
|
|
||||||
|
@ -566,11 +494,6 @@ BOOL VBA::InitInstance()
|
||||||
|
|
||||||
loadSettings();
|
loadSettings();
|
||||||
|
|
||||||
//Putting some stuff here too
|
|
||||||
if ((double)securityCheck2 > 0.0123) { trapPointers[5] = trapPointers[2]; }
|
|
||||||
if ((double)securityCheck2 > 0.101234) { *pointFamily = doStuffBad; }
|
|
||||||
|
|
||||||
|
|
||||||
if(!openLinkLog())
|
if(!openLinkLog())
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
@ -623,7 +546,7 @@ BOOL VBA::InitInstance()
|
||||||
free(argv);
|
free(argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(pointFamily[securityCheck&7](this, securityCheck));
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VBA::adjustDestRect()
|
void VBA::adjustDestRect()
|
||||||
|
@ -1577,6 +1500,8 @@ void VBA::loadSettings()
|
||||||
else
|
else
|
||||||
gbSerialFunction = NULL;
|
gbSerialFunction = NULL;
|
||||||
|
|
||||||
|
pauseWhenInactive = regQueryDwordValue("pauseWhenInactive", 1) ?
|
||||||
|
true : false;
|
||||||
captureFormat = regQueryDwordValue("captureFormat", 0);
|
captureFormat = regQueryDwordValue("captureFormat", 0);
|
||||||
|
|
||||||
removeIntros = regQueryDwordValue("removeIntros", false) ? true : false;
|
removeIntros = regQueryDwordValue("removeIntros", false) ? true : false;
|
||||||
|
@ -1986,12 +1911,7 @@ void VBA::updateWindowSize(int value)
|
||||||
|
|
||||||
bool VBA::initDisplay()
|
bool VBA::initDisplay()
|
||||||
{
|
{
|
||||||
if (securityCheck != -3)
|
return updateRenderMethod(false);
|
||||||
{
|
|
||||||
protectHelp[securityCheck2](0);
|
|
||||||
return (this->**mainTrapPointer)(false);
|
|
||||||
}
|
|
||||||
return(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -264,7 +264,6 @@ class VBA : public CWinApp
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned int detectCpuCores();
|
unsigned int detectCpuCores();
|
||||||
int doProtection();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern VBA theApp;
|
extern VBA theApp;
|
||||||
|
|
Loading…
Reference in New Issue