Added KonamiLoader
It boots any Konami game but it is missing I/O dll emulation which I will work on next.
This commit is contained in:
parent
0d3d677ab5
commit
71a7640b6e
22
OpenParrotKonamiLoader/premake5.lua
Normal file
22
OpenParrotKonamiLoader/premake5.lua
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
project "OpenParrotKonamiLoader"
|
||||||
|
targetname "OpenParrotKonamiLoader"
|
||||||
|
language "C++"
|
||||||
|
kind "ConsoleApp"
|
||||||
|
|
||||||
|
characterset "MBCS"
|
||||||
|
|
||||||
|
files
|
||||||
|
{
|
||||||
|
"src/**.cpp", "src/**.h",
|
||||||
|
"deps_inc/**.cpp", "deps_inc/**.h"
|
||||||
|
}
|
||||||
|
|
||||||
|
includedirs { "src", "deps_inc" }
|
||||||
|
libdirs { }
|
||||||
|
|
||||||
|
links { }
|
||||||
|
|
||||||
|
postbuildcommands { }
|
||||||
|
|
||||||
|
filter "platforms:x64"
|
||||||
|
targetsuffix "64"
|
57
OpenParrotKonamiLoader/src/PE.cpp
Normal file
57
OpenParrotKonamiLoader/src/PE.cpp
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#include "PE.H"
|
||||||
|
DWORD PEAlign(DWORD dwTarNum, DWORD dwAlignTo);
|
||||||
|
PEStruct getPEFileInformation(char *filename)
|
||||||
|
{
|
||||||
|
HANDLE hFile;
|
||||||
|
PEStruct pRetnStruct;
|
||||||
|
pRetnStruct.fileSize = 0;
|
||||||
|
DWORD dwBytesRead;
|
||||||
|
hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL,
|
||||||
|
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
|
if (!hFile)
|
||||||
|
return pRetnStruct;
|
||||||
|
|
||||||
|
pRetnStruct.fileSize = GetFileSize(hFile, 0);
|
||||||
|
if (!pRetnStruct.fileSize)
|
||||||
|
return pRetnStruct;
|
||||||
|
pRetnStruct.fileImage = malloc(pRetnStruct.fileSize);
|
||||||
|
if (!pRetnStruct.fileImage)
|
||||||
|
return pRetnStruct;
|
||||||
|
ReadFile(hFile, pRetnStruct.fileImage, pRetnStruct.fileSize, &dwBytesRead, NULL);
|
||||||
|
CloseHandle(hFile);
|
||||||
|
if (!dwBytesRead)
|
||||||
|
return pRetnStruct;
|
||||||
|
//copy portions to relevant sections
|
||||||
|
CopyMemory(&pRetnStruct.image_dos_header, pRetnStruct.fileImage, sizeof(IMAGE_DOS_HEADER));
|
||||||
|
CopyMemory(&pRetnStruct.image_nt_headers,
|
||||||
|
((BYTE *)pRetnStruct.fileImage + pRetnStruct.image_dos_header.e_lfanew), sizeof(IMAGE_NT_HEADERS));
|
||||||
|
//address of first section
|
||||||
|
pRetnStruct.dwRO_first_section = pRetnStruct.image_dos_header.e_lfanew + sizeof(IMAGE_NT_HEADERS);
|
||||||
|
pRetnStruct.numOfSecs = pRetnStruct.image_nt_headers.FileHeader.NumberOfSections;
|
||||||
|
|
||||||
|
CopyMemory(&pRetnStruct.image_section_header, ((BYTE *)pRetnStruct.fileImage + pRetnStruct.dwRO_first_section),
|
||||||
|
pRetnStruct.numOfSecs*sizeof(IMAGE_SECTION_HEADER));
|
||||||
|
//now to fill in individual sections (.text .data)
|
||||||
|
for (int i = 0; i < pRetnStruct.numOfSecs; i++)
|
||||||
|
{
|
||||||
|
pRetnStruct.image_section[i] = (char *)malloc(PEAlign(pRetnStruct.image_section_header[i].SizeOfRawData,
|
||||||
|
pRetnStruct.image_nt_headers.OptionalHeader.FileAlignment));
|
||||||
|
CopyMemory(pRetnStruct.image_section[i], ((BYTE *)pRetnStruct.fileImage + pRetnStruct.image_section_header[i].PointerToRawData),
|
||||||
|
pRetnStruct.image_section_header[i].SizeOfRawData);
|
||||||
|
}
|
||||||
|
return pRetnStruct;
|
||||||
|
}
|
||||||
|
|
||||||
|
//googled function to correct file alignement in PE header.
|
||||||
|
//Just makes sure the outputted number will align correctly with the rest of the data.
|
||||||
|
DWORD PEAlign(DWORD dwTarNum, DWORD dwAlignTo)
|
||||||
|
{
|
||||||
|
DWORD dwtemp;
|
||||||
|
dwtemp = dwTarNum / dwAlignTo;
|
||||||
|
if ((dwTarNum%dwAlignTo) != 0)
|
||||||
|
{
|
||||||
|
dwtemp++;
|
||||||
|
}
|
||||||
|
dwtemp = dwtemp*dwAlignTo;
|
||||||
|
return(dwtemp);
|
||||||
|
}
|
18
OpenParrotKonamiLoader/src/PE.h
Normal file
18
OpenParrotKonamiLoader/src/PE.h
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#include <windows.h>
|
||||||
|
#include <WinNT.h>
|
||||||
|
#define MAX_SECTION_NUM 20
|
||||||
|
|
||||||
|
typedef struct _PEStruct
|
||||||
|
{
|
||||||
|
DWORD dwRO_first_section;
|
||||||
|
IMAGE_DOS_HEADER image_dos_header;
|
||||||
|
char *reservedheader;
|
||||||
|
IMAGE_NT_HEADERS image_nt_headers;
|
||||||
|
IMAGE_SECTION_HEADER image_section_header[MAX_SECTION_NUM];
|
||||||
|
char *image_section[MAX_SECTION_NUM];
|
||||||
|
void *fileImage;
|
||||||
|
DWORD fileSize;
|
||||||
|
DWORD numOfSecs;
|
||||||
|
} PEStruct, *PPEStruct;
|
||||||
|
|
||||||
|
PEStruct getPEFileInformation(char *filename);
|
428
OpenParrotKonamiLoader/src/main.cpp
Normal file
428
OpenParrotKonamiLoader/src/main.cpp
Normal file
@ -0,0 +1,428 @@
|
|||||||
|
#include <Windows.h>
|
||||||
|
|
||||||
|
typedef signed(__stdcall *dll_entry_main)();
|
||||||
|
typedef signed(__stdcall *dll_entry_init)();
|
||||||
|
|
||||||
|
// LibAVS
|
||||||
|
typedef int(__cdecl *property_create)(int a1, char *a2, int a3);
|
||||||
|
|
||||||
|
typedef int(__cdecl *property_node_create)(int a1, int a2, int a3, const char*a4, const char*a5);
|
||||||
|
typedef int(__cdecl *property_node_create2)(int a1, int a2, int a3, const char*a4, DWORD a5);
|
||||||
|
|
||||||
|
typedef int(__cdecl *property_node_datasize)(int a1);
|
||||||
|
|
||||||
|
typedef int(__cdecl *property_search)(int a1, int a2, const char *a3);
|
||||||
|
|
||||||
|
typedef int(__cdecl *property_get_error)(int a1);
|
||||||
|
|
||||||
|
typedef int(__cdecl *avs_boot)(int a1, void *a2, int a3, void *a4, int a5, void *a6, int a7);
|
||||||
|
|
||||||
|
typedef unsigned int(__cdecl *log_body_misc)(const char *a1, int a2);
|
||||||
|
|
||||||
|
typedef int(__cdecl *std_getenv)(const char*a1, int a2, int a3);
|
||||||
|
|
||||||
|
// libAVS ea3
|
||||||
|
typedef int(__cdecl *ea3_boot)(int a1);
|
||||||
|
typedef int(__stdcall *ea3_get_sic)();
|
||||||
|
|
||||||
|
property_create property_create_func_p;
|
||||||
|
property_node_create property_node_create_func_p;
|
||||||
|
property_node_create2 property_node_create_func_p2;
|
||||||
|
property_node_datasize property_node_datasize_func_p;
|
||||||
|
property_search property_search_func_p;
|
||||||
|
property_get_error property_get_error_func_p;
|
||||||
|
avs_boot avs_boot_func_p;
|
||||||
|
log_body_misc log_body_misc_func_p;
|
||||||
|
std_getenv std_getenv_func_p;
|
||||||
|
|
||||||
|
// libavs ea3
|
||||||
|
ea3_boot ea3_boot_func_p;
|
||||||
|
ea3_get_sic ea3_get_sic_func_p;
|
||||||
|
|
||||||
|
void *avsMemRegion1 = 0;
|
||||||
|
void *avsMemRegion2 = 0;
|
||||||
|
|
||||||
|
int ReturnsFalse()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int eaBootExt(int a1)
|
||||||
|
{
|
||||||
|
int v1; // eax
|
||||||
|
int v2; // eax
|
||||||
|
int v3; // eax
|
||||||
|
int v4; // eax
|
||||||
|
int v5; // eax
|
||||||
|
int v6; // eax
|
||||||
|
int v7; // eax
|
||||||
|
int v8; // eax
|
||||||
|
int v9; // eax
|
||||||
|
int v10; // eax
|
||||||
|
int v11; // eax
|
||||||
|
int v12; // eax
|
||||||
|
int v13; // eax
|
||||||
|
int v14; // eax
|
||||||
|
int v15; // eax
|
||||||
|
int v16; // eax
|
||||||
|
int v17; // eax
|
||||||
|
int v18; // eax
|
||||||
|
int v19; // eax
|
||||||
|
int v20; // eax
|
||||||
|
int v21; // eax
|
||||||
|
int v22; // eax
|
||||||
|
int v23; // eax
|
||||||
|
int v24; // eax
|
||||||
|
int v25; // eax
|
||||||
|
int v26; // eax
|
||||||
|
int v27; // eax
|
||||||
|
int v28; // eax
|
||||||
|
int v29; // eax
|
||||||
|
int v30; // eax
|
||||||
|
int v31; // eax
|
||||||
|
int v32; // eax
|
||||||
|
int v33; // eax
|
||||||
|
int v34; // eax
|
||||||
|
int v35; // eax
|
||||||
|
int v36; // eax
|
||||||
|
int v37; // eax
|
||||||
|
int v38; // eax
|
||||||
|
|
||||||
|
property_node_create_func_p2(a1, 0, 7, "/ea3/pos/nr_coinslot", 1);
|
||||||
|
property_node_create_func_p2(a1, 0, 7, "/ea3/pos/nr_article", 3);
|
||||||
|
property_node_create_func_p2(a1, 0, 7, "/ea3/pos/nr_payment", 3);
|
||||||
|
v1 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/start/type", "consume");
|
||||||
|
if (v1)
|
||||||
|
property_node_datasize_func_p(v1);
|
||||||
|
v2 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/start/player_ref", "/opt/coin/slot1/player");
|
||||||
|
if (v2)
|
||||||
|
property_node_datasize_func_p(v2);
|
||||||
|
v3 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/start/credit_ref", "/opt/coin/start");
|
||||||
|
if (v3)
|
||||||
|
property_node_datasize_func_p(v3);
|
||||||
|
property_node_create_func_p2(a1, 0, 3, "/ea3/pos/coin/start/article", 1);
|
||||||
|
v4 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/start/event", "game.s");
|
||||||
|
if (v4)
|
||||||
|
property_node_datasize_func_p(v4);
|
||||||
|
v5 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/continue/type", "consume");
|
||||||
|
if (v5)
|
||||||
|
property_node_datasize_func_p(v5);
|
||||||
|
v6 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/continue/player_ref", "/opt/coin/slot1/player");
|
||||||
|
if (v6)
|
||||||
|
property_node_datasize_func_p(v6);
|
||||||
|
v7 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/continue/credit_ref", "/opt/coin/continue");
|
||||||
|
if (v7)
|
||||||
|
property_node_datasize_func_p(v7);
|
||||||
|
property_node_create_func_p2(a1, 0, 3, "/ea3/pos/coin/continue/article", 2);
|
||||||
|
v8 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/continue/event", "game.c");
|
||||||
|
if (v8)
|
||||||
|
property_node_datasize_func_p(v8);
|
||||||
|
v9 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/slot1/type", "throw");
|
||||||
|
if (v9)
|
||||||
|
property_node_datasize_func_p(v9);
|
||||||
|
v10 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/slot1/src", "coin");
|
||||||
|
if (v10)
|
||||||
|
property_node_datasize_func_p(v10);
|
||||||
|
property_node_create_func_p2(a1, 0, 3, "/ea3/pos/coin/slot1/slot", 1);
|
||||||
|
v11 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/slot1/player_ref", "/opt/coin/slot1/player");
|
||||||
|
if (v11)
|
||||||
|
property_node_datasize_func_p(v11);
|
||||||
|
v12 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/slot1/coin_credit_ref", "/opt/coin/slot1/coin_credit");
|
||||||
|
if (v12)
|
||||||
|
property_node_datasize_func_p(v12);
|
||||||
|
v13 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/slot1/event", "coin.i");
|
||||||
|
if (v13)
|
||||||
|
property_node_datasize_func_p(v13);
|
||||||
|
v14 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/slots/type", "throw");
|
||||||
|
if (v14)
|
||||||
|
property_node_datasize_func_p(v14);
|
||||||
|
v15 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/slots/src", "service");
|
||||||
|
if (v15)
|
||||||
|
property_node_datasize_func_p(v15);
|
||||||
|
v16 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/slots/coin_event", "/coin/slot1");
|
||||||
|
if (v16)
|
||||||
|
property_node_datasize_func_p(v16);
|
||||||
|
v17 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/slots/event", "service.p");
|
||||||
|
if (v17)
|
||||||
|
property_node_datasize_func_p(v17);
|
||||||
|
v18 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/read/type", "consume");
|
||||||
|
if (v18)
|
||||||
|
property_node_datasize_func_p(v18);
|
||||||
|
v19 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/read/player_ref", "/opt/coin/slot1/player");
|
||||||
|
if (v19)
|
||||||
|
property_node_datasize_func_p(v19);
|
||||||
|
v20 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/read/credit_ref", "/opt/coin/event");
|
||||||
|
if (v20)
|
||||||
|
property_node_datasize_func_p(v20);
|
||||||
|
property_node_create_func_p2(a1, 0, 3, "/ea3/pos/coin/read/article", 3);
|
||||||
|
v21 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/read/event", "pdata.r");
|
||||||
|
if (v21)
|
||||||
|
property_node_datasize_func_p(v21);
|
||||||
|
v22 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/write/type", "consume");
|
||||||
|
if (v22)
|
||||||
|
property_node_datasize_func_p(v22);
|
||||||
|
v23 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/write/player_ref", "/opt/coin/slot1/player");
|
||||||
|
if (v23)
|
||||||
|
property_node_datasize_func_p(v23);
|
||||||
|
v24 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/write/credit_ref", "/opt/coin/event");
|
||||||
|
if (v24)
|
||||||
|
property_node_datasize_func_p(v24);
|
||||||
|
property_node_create_func_p2(a1, 0, 3, "/ea3/pos/coin/write/article", 3);
|
||||||
|
v25 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/write/event", "pdata.w");
|
||||||
|
if (v25)
|
||||||
|
property_node_datasize_func_p(v25);
|
||||||
|
v26 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/start_free/type", "consume");
|
||||||
|
if (v26)
|
||||||
|
property_node_datasize_func_p(v26);
|
||||||
|
v27 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/start_free/player_ref", "/opt/coin/slot1/player");
|
||||||
|
if (v27)
|
||||||
|
property_node_datasize_func_p(v27);
|
||||||
|
v28 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/start_free/credit_ref", "/opt/coin/event");
|
||||||
|
if (v28)
|
||||||
|
property_node_datasize_func_p(v28);
|
||||||
|
property_node_create_func_p2(a1, 0, 3, "/ea3/pos/coin/start_free/article", 3);
|
||||||
|
v29 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/start_free/event", "game.s.free");
|
||||||
|
if (v29)
|
||||||
|
property_node_datasize_func_p(v29);
|
||||||
|
v30 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/exstart/type", "consume");
|
||||||
|
if (v30)
|
||||||
|
property_node_datasize_func_p(v30);
|
||||||
|
v31 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/exstart/player_ref", "/opt/coin/slot1/player");
|
||||||
|
if (v31)
|
||||||
|
property_node_datasize_func_p(v31);
|
||||||
|
v32 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/exstart/credit_ref", "/opt/coin/exstart");
|
||||||
|
if (v32)
|
||||||
|
property_node_datasize_func_p(v32);
|
||||||
|
property_node_create_func_p2(a1, 0, 3, "/ea3/pos/coin/exstart/article", 1);
|
||||||
|
v33 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/exstart/event", "HGT.game.s.ex");
|
||||||
|
if (v33)
|
||||||
|
property_node_datasize_func_p(v33);
|
||||||
|
v34 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/end/type", "consume");
|
||||||
|
if (v34)
|
||||||
|
property_node_datasize_func_p(v34);
|
||||||
|
v35 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/end/player_ref", "/opt/coin/slot1/player");
|
||||||
|
if (v35)
|
||||||
|
property_node_datasize_func_p(v35);
|
||||||
|
v36 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/end/credit_ref", "/opt/coin/event");
|
||||||
|
if (v36)
|
||||||
|
property_node_datasize_func_p(v36);
|
||||||
|
property_node_create_func_p2(a1, 0, 3, "/ea3/pos/coin/end/article", 3);
|
||||||
|
v37 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/end/event", "game.e");
|
||||||
|
if (v37)
|
||||||
|
property_node_datasize_func_p(v37);
|
||||||
|
v38 = property_node_create_func_p(a1, 0, 11, "/ea3/pos/coin/freeplay_ref", "/opt/coin/freeplay");
|
||||||
|
if (v38)
|
||||||
|
property_node_datasize_func_p(v38);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __stdcall ea3boot(BYTE serviceMode, const char* pcbId, const char* hddId)
|
||||||
|
{
|
||||||
|
int v3; // esi
|
||||||
|
|
||||||
|
int v9; // eax
|
||||||
|
int v10; // eax
|
||||||
|
int v11; // eax
|
||||||
|
int v12; // eax
|
||||||
|
int v13; // eax
|
||||||
|
int v14; // eax
|
||||||
|
int v15; // eax
|
||||||
|
int v16; // eax
|
||||||
|
int v17; // eax
|
||||||
|
int v18; // eax
|
||||||
|
char v26[0x5000];
|
||||||
|
int v19;
|
||||||
|
v3 = property_create_func_p(23, v26, 0x5000);
|
||||||
|
v9 = property_node_create_func_p(v3, 0, 11, "/ea3/soft/model", "HGT");
|
||||||
|
if (v9)
|
||||||
|
property_node_datasize(v9);
|
||||||
|
v10 = property_node_create_func_p(v3, 0, 11, "/ea3/soft/dest", "E");
|
||||||
|
if (v10)
|
||||||
|
property_node_datasize(v10);
|
||||||
|
v11 = property_node_create_func_p(v3, 0, 11, "/ea3/soft/spec", "A");
|
||||||
|
if (v11)
|
||||||
|
property_node_datasize(v11);
|
||||||
|
v12 = property_node_create_func_p(v3, 0, 11, "/ea3/soft/rev", "A");
|
||||||
|
if (v12)
|
||||||
|
property_node_datasize(v12);
|
||||||
|
v13 = property_node_create_func_p(v3, 0, 11, "/ea3/soft/ext", "2009062401");
|
||||||
|
if (v13)
|
||||||
|
property_node_datasize(v13);
|
||||||
|
property_node_create_func_p2(v3, 0, 6, "/ea3/timezone", 32400);
|
||||||
|
v14 = property_node_create_func_p(v3, 0, 11, "/ea3/id/pcbid", pcbId);
|
||||||
|
if (v14)
|
||||||
|
property_node_datasize(v14);
|
||||||
|
v15 = property_node_create_func_p(v3, 0, 11, "/ea3/id/hardid", hddId);
|
||||||
|
if (v15)
|
||||||
|
property_node_datasize(v15);
|
||||||
|
v16 = property_node_create_func_p(v3, 0, 11, "/ea3/encoding", "SHIFT_JIS");
|
||||||
|
if (v16)
|
||||||
|
property_node_datasize(v16);
|
||||||
|
v17 = property_node_create_func_p(v3, 0, 11, "/ea3/network/services", "services.eamuse.konami.fun");
|
||||||
|
if (v17)
|
||||||
|
property_node_datasize(v17);
|
||||||
|
eaBootExt(v3);
|
||||||
|
property_node_create_func_p2(v3, 0, 7, "/ea3/facility/sz_prop_buf", 4096);
|
||||||
|
property_node_create_func_p2(v3, 0, 7, "/ea3/pos/sz_opt_buf", 0x10000);
|
||||||
|
property_node_create_func_p2(v3, 0, 7, "/ea3/network/sz_xrpc_buf", 0x8000);
|
||||||
|
property_node_create_func_p2(v3, 0, 3, "/ea3/option/service", serviceMode != 0);
|
||||||
|
property_node_create_func_p2(v3, 0, 3, "/ea3/option/posevent", 1);
|
||||||
|
property_node_create_func_p2(v3, 0, 3, "/ea3/option/antiresale", 1);
|
||||||
|
property_node_create_func_p2(v3, 0, 3, "/ea3/option/pcbevent", 1);
|
||||||
|
property_node_create_func_p2(v3, 0, 3, "/ea3/service/package", 1);
|
||||||
|
property_node_create_func_p2(v3, 0, 3, "/ea3/service/cardmng", 1);
|
||||||
|
property_node_create_func_p2(v3, 0, 7, "/ea3/pkglist/nr_entry", 100);
|
||||||
|
property_node_create_func_p2(v3, 0, 7, "/ea3/pkglist/nr_list_desc", 2);
|
||||||
|
property_node_create_func_p2(v3, 0, 7, "/ea3/pkglist/nr_file_desc", 2);
|
||||||
|
property_node_create_func_p2(v3, 0, 52, "/ea3/proxy/cache/use_previous_cache", 1);
|
||||||
|
property_node_create_func_p2(v3, 0, 5, "/ea3/proxy/cache/max_items", 100);
|
||||||
|
property_node_create_func_p2(v3, 0, 6, "/ea3/proxy/cache/retry_time/direct", 1800);
|
||||||
|
property_node_create_func_p2(v3, 0, 9, "/ea3/proxy/cache/max_size", 947912704);
|
||||||
|
//log_body_misc("ea3 boot", "センタ\x81[サ\x81[バ\x81[に\x90レ続しています\x81B\n");
|
||||||
|
if (v3)
|
||||||
|
v18 = property_search_func_p(v3, 0, "/ea3");
|
||||||
|
else
|
||||||
|
v18 = 0;
|
||||||
|
ea3_boot_func_p(v18);
|
||||||
|
v19 = ea3_get_sic_func_p();
|
||||||
|
return 1;
|
||||||
|
//return log_body_misc_func_p("ea3 boot", "SIC: %s", v19);
|
||||||
|
}
|
||||||
|
|
||||||
|
signed int avsBoot()
|
||||||
|
{
|
||||||
|
int v0; // esi
|
||||||
|
int v1; // eax
|
||||||
|
int v2; // eax
|
||||||
|
void *v3; // eax
|
||||||
|
void *v4; // edi
|
||||||
|
void *v5; // eax
|
||||||
|
int v6; // ecx
|
||||||
|
int v7; // eax
|
||||||
|
bool v8; // sf
|
||||||
|
const char *v9; // eax
|
||||||
|
const char *v10; // eax
|
||||||
|
signed int result; // eax
|
||||||
|
char v12[0x550]; // [esp+Ch] [ebp-550h]
|
||||||
|
|
||||||
|
v0 = property_create_func_p(7, v12, 0x550);
|
||||||
|
CreateDirectoryA("./CONF", 0);
|
||||||
|
CreateDirectoryA("./CONF/NVRAM", 0);
|
||||||
|
CreateDirectoryA("./CONF/RAW", 0);
|
||||||
|
v1 = property_node_create_func_p(v0, 0, 11, "/config/fs/nvram/device", "./CONF/NVRAM");
|
||||||
|
if (v1)
|
||||||
|
property_node_datasize_func_p(v1);
|
||||||
|
v2 = property_node_create_func_p(v0, 0, 11, "/config/fs/raw/device", "./CONF/RAW");
|
||||||
|
if (v2)
|
||||||
|
property_node_datasize(v2);
|
||||||
|
property_node_create_func_p2(v0, 0, 5, "/config/thread/nr_semaphore", 32);
|
||||||
|
property_node_create_func_p2(v0, 0, 5, "/config/net/nr_protocol", 8);
|
||||||
|
property_node_create_func_p2(v0, 0, 5, "/config/net/nr_socket", 8);
|
||||||
|
property_node_create_func_p2(v0, 0, 3, "/config/net/enable_raw", 1);
|
||||||
|
property_node_create_func_p2(v0, 0, 6, "/config/time/gmt_offset", 0);
|
||||||
|
if (property_get_error_func_p(v0))
|
||||||
|
return 1;
|
||||||
|
v3 = malloc(0x400000u);
|
||||||
|
v4 = v3;
|
||||||
|
avsMemRegion1 = v3;
|
||||||
|
v5 = malloc(0x400000u);
|
||||||
|
avsMemRegion2 = v5;
|
||||||
|
if (!v4)
|
||||||
|
{
|
||||||
|
if (v5)
|
||||||
|
{
|
||||||
|
free(v5);
|
||||||
|
avsMemRegion2 = 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (v5)
|
||||||
|
{
|
||||||
|
if (v0)
|
||||||
|
{
|
||||||
|
v7 = property_search_func_p(v0, 0, "/config");
|
||||||
|
v4 = avsMemRegion1;
|
||||||
|
v6 = v7;
|
||||||
|
v5 = avsMemRegion2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
v6 = 0;
|
||||||
|
}
|
||||||
|
avs_boot_func_p(v6, v4, 0x400000, v5, 0x400000, ReturnsFalse, 0);
|
||||||
|
result = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
free(v4);
|
||||||
|
avsMemRegion1 = 0;
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
inline bool file_exists(const std::string& name)
|
||||||
|
{
|
||||||
|
struct stat buffer;
|
||||||
|
return (stat(name.c_str(), &buffer) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void* f(void* a)
|
||||||
|
{
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
if (argc < 2)
|
||||||
|
{
|
||||||
|
printf("ERROR: param needs to be target dll\n");
|
||||||
|
printf("USAGE: canaryloader.exe path/to/some.dll\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!file_exists(argv[1]))
|
||||||
|
{
|
||||||
|
printf("ERROR: file does not exist.\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto gameBinary = LoadLibraryA(argv[1]);
|
||||||
|
auto libavs = LoadLibraryA("libavs-win32.dll");
|
||||||
|
auto libavsea3 = LoadLibraryA("libavs-win32-ea3.dll");
|
||||||
|
|
||||||
|
dll_entry_main dllMain = (dll_entry_main)GetProcAddress(gameBinary, "dll_entry_main");
|
||||||
|
|
||||||
|
dll_entry_init dllInit = (dll_entry_init)GetProcAddress(gameBinary, "dll_entry_init");
|
||||||
|
|
||||||
|
// Resolve libavs-win32.dll apis
|
||||||
|
property_create_func_p = (property_create)GetProcAddress(libavs, "property_create");
|
||||||
|
property_node_create_func_p = (property_node_create)GetProcAddress(libavs, "property_node_create");
|
||||||
|
property_node_create_func_p2 = (property_node_create2)GetProcAddress(libavs, "property_node_create");
|
||||||
|
property_node_datasize_func_p = (property_node_datasize)GetProcAddress(libavs, "property_node_datasize");
|
||||||
|
property_search_func_p = (property_search)GetProcAddress(libavs, "property_search");
|
||||||
|
property_get_error_func_p = (property_get_error)GetProcAddress(libavs, "property_get_error");
|
||||||
|
avs_boot_func_p = (avs_boot)GetProcAddress(libavs, "avs_boot");
|
||||||
|
log_body_misc_func_p = (log_body_misc)GetProcAddress(libavs, "log_body_misc");
|
||||||
|
std_getenv_func_p = (std_getenv)GetProcAddress(libavs, "std_getenv");
|
||||||
|
|
||||||
|
// Resolve libavs-win32-ea.dll apis
|
||||||
|
ea3_boot_func_p = (ea3_boot)GetProcAddress(libavsea3, "ea3_boot");
|
||||||
|
ea3_get_sic_func_p = (ea3_get_sic)GetProcAddress(libavsea3, "ea3_get_sic");
|
||||||
|
// Init libavs-win32.dll
|
||||||
|
avsBoot();
|
||||||
|
|
||||||
|
// Init libavs-win32-ea3.dll
|
||||||
|
ea3boot(0, "DEADFACE107B4493AC12", "0100107B4493AC12");
|
||||||
|
|
||||||
|
dllInit();
|
||||||
|
dllMain();
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
Sleep(100);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
334
OpenParrotKonamiLoader/src/main.h
Normal file
334
OpenParrotKonamiLoader/src/main.h
Normal file
@ -0,0 +1,334 @@
|
|||||||
|
/*
|
||||||
|
I do not take credit for these stuctures, but rather give all credits to
|
||||||
|
the NTInternals Team. But, I do take credit for taking the useful things
|
||||||
|
from the site and putting them into a easy to use place.
|
||||||
|
thanks and hope someone finds these useful
|
||||||
|
~sean reed
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
|
typedef void(*PELPEBLOCKROUTINE)(PVOID PebLock);
|
||||||
|
|
||||||
|
typedef struct _ELLSA_UNICODE_STRING {
|
||||||
|
USHORT Length;
|
||||||
|
USHORT MaximumLength;
|
||||||
|
PWSTR Buffer;
|
||||||
|
}ELLSA_UNICODE_STRING, *PELLSA_UNICODE_STRING, ELUNICODE_STRING, *PELUNICODE_STRING;
|
||||||
|
|
||||||
|
typedef struct _ELLIST_ENTRY
|
||||||
|
{
|
||||||
|
struct _ELLIST_ENTRY *Flink;
|
||||||
|
struct _ELLIST_ENTRY *Blink;
|
||||||
|
} ELLIST_ENTRY, *PELLIST_ENTRY;
|
||||||
|
|
||||||
|
typedef struct _ELPEB_LDR_DATA
|
||||||
|
{
|
||||||
|
ULONG Length;
|
||||||
|
BOOLEAN Initialized;
|
||||||
|
PVOID SsHandle;
|
||||||
|
ELLIST_ENTRY InLoadOrderModuleList;
|
||||||
|
ELLIST_ENTRY InMemoryOrderModuleList;
|
||||||
|
ELLIST_ENTRY InInitializationOrderModuleList;
|
||||||
|
|
||||||
|
} ELPEB_LDR_DATA, *PELPEB_LDR_DATA;
|
||||||
|
|
||||||
|
typedef struct _ELRTL_DRIVE_LETTER_CURDIR
|
||||||
|
{
|
||||||
|
USHORT Flags;
|
||||||
|
USHORT Length;
|
||||||
|
ULONG TimeStamp;
|
||||||
|
ELUNICODE_STRING DosPath;
|
||||||
|
|
||||||
|
} ELRTL_DRIVE_LETTER_CURDIR, *PELRTL_DRIVE_LETTER_CURDIR;
|
||||||
|
|
||||||
|
typedef struct _ELRTL_USER_PROCESS_PARAMETERS
|
||||||
|
{
|
||||||
|
ULONG MaximumLength;
|
||||||
|
ULONG Length;
|
||||||
|
ULONG Flags;
|
||||||
|
ULONG DebugFlags;
|
||||||
|
PVOID ConsoleHandle;
|
||||||
|
ULONG ConsoleFlags;
|
||||||
|
HANDLE StdInputHandle;
|
||||||
|
HANDLE StdOutputHandle;
|
||||||
|
HANDLE StdErrorHandle;
|
||||||
|
ELUNICODE_STRING CurrentDirectoryPath;
|
||||||
|
HANDLE CurrentDirectoryHandle;
|
||||||
|
ELUNICODE_STRING DllPath;
|
||||||
|
ELUNICODE_STRING ImagePathName;
|
||||||
|
ELUNICODE_STRING CommandLine;
|
||||||
|
PVOID Environment;
|
||||||
|
ULONG StartingPositionLeft;
|
||||||
|
ULONG StartingPositionTop;
|
||||||
|
ULONG Width;
|
||||||
|
ULONG Height;
|
||||||
|
ULONG CharWidth;
|
||||||
|
ULONG CharHeight;
|
||||||
|
ULONG ConsoleTextAttributes;
|
||||||
|
ULONG WindowFlags;
|
||||||
|
ULONG ShowWindowFlags;
|
||||||
|
ELUNICODE_STRING WindowTitle;
|
||||||
|
ELUNICODE_STRING DesktopName;
|
||||||
|
ELUNICODE_STRING ShellInfo;
|
||||||
|
ELUNICODE_STRING RuntimeData;
|
||||||
|
ELRTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20];
|
||||||
|
|
||||||
|
} ELRTL_USER_PROCESS_PARAMETERS, *PELRTL_USER_PROCESS_PARAMETERS;
|
||||||
|
|
||||||
|
typedef struct _ELPEB_FREE_BLOCK
|
||||||
|
{
|
||||||
|
struct _ELPEB_FREE_BLOCK *Next;
|
||||||
|
ULONG Size;
|
||||||
|
|
||||||
|
} ELPEB_FREE_BLOCK, *PELPEB_FREE_BLOCK;
|
||||||
|
|
||||||
|
typedef struct _ELLDR_MODULE {
|
||||||
|
|
||||||
|
ELLIST_ENTRY InLoadOrderModuleList;
|
||||||
|
ELLIST_ENTRY InMemoryOrderModuleList;
|
||||||
|
ELLIST_ENTRY InInitializationOrderModuleList;
|
||||||
|
PVOID BaseAddress;
|
||||||
|
PVOID EntryPoint;
|
||||||
|
ULONG SizeOfImage;
|
||||||
|
ELUNICODE_STRING FullDllName;
|
||||||
|
ELUNICODE_STRING BaseDllName;
|
||||||
|
ULONG Flags;
|
||||||
|
SHORT LoadCount;
|
||||||
|
SHORT TlsIndex;
|
||||||
|
ELLIST_ENTRY HashTableEntry;
|
||||||
|
ULONG TimeDateStamp;
|
||||||
|
|
||||||
|
} ELLDR_MODULE, *ELPLDR_MODULE;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _ELPEB
|
||||||
|
{
|
||||||
|
BOOLEAN InheritedAddressSpace;
|
||||||
|
BOOLEAN ReadImageFileExecOptions;
|
||||||
|
BOOLEAN BeingDebugged;
|
||||||
|
BOOLEAN Spare;
|
||||||
|
HANDLE Mutant;
|
||||||
|
PVOID ImageBaseAddress;
|
||||||
|
PELPEB_LDR_DATA LoaderData;
|
||||||
|
PELRTL_USER_PROCESS_PARAMETERS ProcessParameters;
|
||||||
|
PVOID SubSystemData;
|
||||||
|
PVOID ProcessHeap;
|
||||||
|
PVOID FastPebLock;
|
||||||
|
PELPEBLOCKROUTINE FastPebLockRoutine;
|
||||||
|
PELPEBLOCKROUTINE FastPebUnlockRoutine;
|
||||||
|
ULONG EnvironmentUpdateCount;
|
||||||
|
PVOID *KernelCallbackTable;
|
||||||
|
PVOID EventLogSection;
|
||||||
|
PVOID EventLog;
|
||||||
|
PELPEB_FREE_BLOCK FreeList;
|
||||||
|
ULONG TlsExpansionCounter;
|
||||||
|
PVOID TlsBitmap;
|
||||||
|
ULONG TlsBitmapBits[0x2];
|
||||||
|
PVOID ReadOnlySharedMemoryBase;
|
||||||
|
PVOID ReadOnlySharedMemoryHeap;
|
||||||
|
PVOID *ReadOnlyStaticServerData;
|
||||||
|
PVOID AnsiCodePageData;
|
||||||
|
PVOID OemCodePageData;
|
||||||
|
PVOID UnicodeCaseTableData;
|
||||||
|
ULONG NumberOfProcessors;
|
||||||
|
ULONG NtGlobalFlag;
|
||||||
|
BYTE Spare2[0x4];
|
||||||
|
LARGE_INTEGER CriticalSectionTimeout;
|
||||||
|
ULONG HeapSegmentReserve;
|
||||||
|
ULONG HeapSegmentCommit;
|
||||||
|
ULONG HeapDeCommitTotalFreeThreshold;
|
||||||
|
ULONG HeapDeCommitFreeBlockThreshold;
|
||||||
|
ULONG NumberOfHeaps;
|
||||||
|
ULONG MaximumNumberOfHeaps;
|
||||||
|
PVOID **ProcessHeaps;
|
||||||
|
PVOID GdiSharedHandleTable;
|
||||||
|
PVOID ProcessStarterHelper;
|
||||||
|
PVOID GdiDCAttributeList;
|
||||||
|
PVOID LoaderLock;
|
||||||
|
ULONG OSMajorVersion;
|
||||||
|
ULONG OSMinorVersion;
|
||||||
|
ULONG OSBuildNumber;
|
||||||
|
ULONG OSPlatformId;
|
||||||
|
ULONG ImageSubSystem;
|
||||||
|
ULONG ImageSubSystemMajorVersion;
|
||||||
|
ULONG ImageSubSystemMinorVersion;
|
||||||
|
ULONG GdiHandleBuffer[0x22];
|
||||||
|
ULONG PostProcessInitRoutine;
|
||||||
|
ULONG TlsExpansionBitmap;
|
||||||
|
BYTE TlsExpansionBitmapBits[0x80];
|
||||||
|
ULONG SessionId;
|
||||||
|
|
||||||
|
} ELPEB, *PELPEB;
|
||||||
|
|
||||||
|
typedef struct _ELPROCESS_BASIC_INFORMATION
|
||||||
|
{
|
||||||
|
PVOID Reserved1;
|
||||||
|
PELPEB PebBaseAddress;
|
||||||
|
PVOID Reserved2[2];
|
||||||
|
ULONG_PTR UniqueProcessId;
|
||||||
|
PVOID Reserved3;
|
||||||
|
} ELPROCESS_BASIC_INFORMATION;
|
||||||
|
|
||||||
|
typedef enum _ELPROCESS_INFORMATION_CLASS
|
||||||
|
{
|
||||||
|
ProcessBasicInformation,
|
||||||
|
ProcessQuotaLimits,
|
||||||
|
ProcessIoCounters,
|
||||||
|
ProcessVmCounters,
|
||||||
|
ProcessTimes,
|
||||||
|
ProcessBasePriority,
|
||||||
|
ProcessRaisePriority,
|
||||||
|
ProcessDebugPort,
|
||||||
|
ProcessExceptionPort,
|
||||||
|
ProcessAccessToken,
|
||||||
|
ProcessLdtInformation,
|
||||||
|
ProcessLdtSize,
|
||||||
|
ProcessDefaultHardErrorMode,
|
||||||
|
ProcessIoPortHandlers,
|
||||||
|
ProcessPooledUsageAndLimits,
|
||||||
|
ProcessWorkingSetWatch,
|
||||||
|
ProcessUserModeIOPL,
|
||||||
|
ProcessEnableAlignmentFaultFixup,
|
||||||
|
ProcessPriorityClass,
|
||||||
|
ProcessWx86Information,
|
||||||
|
ProcessHandleCount,
|
||||||
|
ProcessAffinityMask,
|
||||||
|
ProcessPriorityBoost,
|
||||||
|
MaxProcessInfoClass
|
||||||
|
} ELPROCESS_INFORMATION_CLASS, *PELPROCESS_INFORMATION_CLASS;
|
||||||
|
|
||||||
|
typedef struct _CLIENT_ID {
|
||||||
|
HANDLE UniqueProcess;
|
||||||
|
HANDLE UniqueThread;
|
||||||
|
} CLIENT_ID;
|
||||||
|
|
||||||
|
typedef struct _ELSYSTEM_THREAD_INFORMATION {
|
||||||
|
LARGE_INTEGER KernelTime;
|
||||||
|
LARGE_INTEGER UserTime;
|
||||||
|
LARGE_INTEGER CreateTime;
|
||||||
|
ULONG WaitTime;
|
||||||
|
PVOID StartAddress;
|
||||||
|
CLIENT_ID ClientId;
|
||||||
|
LONG Priority;
|
||||||
|
LONG BasePriority;
|
||||||
|
ULONG ContextSwitches;
|
||||||
|
ULONG ThreadState;
|
||||||
|
ULONG WaitReason;
|
||||||
|
} ELSYSTEM_THREAD_INFORMATION, *PELSYSTEM_THREAD_INFORMATION;
|
||||||
|
|
||||||
|
typedef enum _SYSTEM_INFORMATION_CLASS {
|
||||||
|
|
||||||
|
SystemBasicInformation, SystemProcessorInformation, SystemPerformanceInformation, SystemTimeOfDayInformation, SystemPathInformation, SystemProcessInformation, SystemCallCountInformation, SystemDeviceInformation, SystemProcessorPerformanceInformation, SystemFlagsInformation, SystemCallTimeInformation, SystemModuleInformation, SystemLocksInformation, SystemStackTraceInformation, SystemPagedPoolInformation, SystemNonPagedPoolInformation, SystemHandleInformation, SystemObjectInformation, SystemPageFileInformation, SystemVdmInstemulInformation, SystemVdmBopInformation, SystemFileCacheInformation, SystemPoolTagInformation, SystemInterruptInformation, SystemDpcBehaviorInformation, SystemFullMemoryInformation, SystemLoadGdiDriverInformation, SystemUnloadGdiDriverInformation, SystemTimeAdjustmentInformation, SystemSummaryMemoryInformation, SystemNextEventIdInformation, SystemEventIdsInformation, SystemCrashDumpInformation, SystemExceptionInformation, SystemCrashDumpStateInformation, SystemKernelDebuggerInformation, SystemContextSwitchInformation, SystemRegistryQuotaInformation, SystemExtendServiceTableInformation, SystemPrioritySeperation, SystemPlugPlayBusInformation, SystemDockInformation, ELSystemPowerInformation, SystemProcessorSpeedInformation, SystemCurrentTimeZoneInformation, SystemLookasideInformation
|
||||||
|
|
||||||
|
} ELSYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
|
||||||
|
typedef enum _KWAIT_REASON
|
||||||
|
{
|
||||||
|
Executive = 0,
|
||||||
|
FreePage = 1,
|
||||||
|
PageIn = 2,
|
||||||
|
PoolAllocation = 3,
|
||||||
|
DelayExecution = 4,
|
||||||
|
Suspended = 5,
|
||||||
|
UserRequest = 6,
|
||||||
|
WrExecutive = 7,
|
||||||
|
WrFreePage = 8,
|
||||||
|
WrPageIn = 9,
|
||||||
|
WrPoolAllocation = 10,
|
||||||
|
WrDelayExecution = 11,
|
||||||
|
WrSuspended = 12,
|
||||||
|
WrUserRequest = 13,
|
||||||
|
WrEventPair = 14,
|
||||||
|
WrQueue = 15,
|
||||||
|
WrLpcReceive = 16,
|
||||||
|
WrLpcReply = 17,
|
||||||
|
WrVirtualMemory = 18,
|
||||||
|
WrPageOut = 19,
|
||||||
|
WrRendezvous = 20,
|
||||||
|
Spare2 = 21,
|
||||||
|
Spare3 = 22,
|
||||||
|
Spare4 = 23,
|
||||||
|
Spare5 = 24,
|
||||||
|
WrCalloutStack = 25,
|
||||||
|
WrKernel = 26,
|
||||||
|
WrResource = 27,
|
||||||
|
WrPushLock = 28,
|
||||||
|
WrMutex = 29,
|
||||||
|
WrQuantumEnd = 30,
|
||||||
|
WrDispatchInt = 31,
|
||||||
|
WrPreempted = 32,
|
||||||
|
WrYieldExecution = 33,
|
||||||
|
WrFastMutex = 34,
|
||||||
|
WrGuardedMutex = 35,
|
||||||
|
WrRundown = 36,
|
||||||
|
MaximumWaitReason = 37
|
||||||
|
} KWAIT_REASON;
|
||||||
|
|
||||||
|
typedef struct _SYSTEM_THREAD {
|
||||||
|
|
||||||
|
LARGE_INTEGER KernelTime;
|
||||||
|
LARGE_INTEGER UserTime;
|
||||||
|
LARGE_INTEGER CreateTime;
|
||||||
|
ULONG WaitTime;
|
||||||
|
PVOID StartAddress;
|
||||||
|
CLIENT_ID ClientId;
|
||||||
|
LONG Priority;
|
||||||
|
LONG BasePriority;
|
||||||
|
ULONG ContextSwitchCount;
|
||||||
|
ULONG State;
|
||||||
|
KWAIT_REASON WaitReason;
|
||||||
|
|
||||||
|
} SYSTEM_THREAD, *PSYSTEM_THREAD;
|
||||||
|
|
||||||
|
typedef struct _VM_COUNTERS
|
||||||
|
{
|
||||||
|
int PeakVirtualSize;
|
||||||
|
int VirtualSize;
|
||||||
|
int PageFaultCount;
|
||||||
|
int PeakWorkingSetSize;
|
||||||
|
int WorkingSetSize;
|
||||||
|
int QuotaPeakPagedPoolUsage;
|
||||||
|
int QuotaPagedPoolUsage;
|
||||||
|
int QuotaPeakNonPagedPoolUsage;
|
||||||
|
int QuotaNonPagedPoolUsage;
|
||||||
|
int PagefileUsage;
|
||||||
|
int PeakPagefileUsage;
|
||||||
|
}VM_COUNTERS;
|
||||||
|
|
||||||
|
typedef struct _SYSTEM_PROCESS_INFORMATION
|
||||||
|
{
|
||||||
|
DWORD NextEntryOffset;
|
||||||
|
DWORD dThreadCount;
|
||||||
|
DWORD dReserved01;
|
||||||
|
DWORD dReserved02;
|
||||||
|
DWORD dReserved03;
|
||||||
|
DWORD dReserved04;
|
||||||
|
DWORD dReserved05;
|
||||||
|
DWORD dReserved06;
|
||||||
|
FILETIME ftCreateTime; /* relative to 01-01-1601 */
|
||||||
|
FILETIME ftUserTime; /* 100 nsec units */
|
||||||
|
FILETIME ftKernelTime; /* 100 nsec units */
|
||||||
|
ELUNICODE_STRING ProcessName;
|
||||||
|
DWORD BasePriority;
|
||||||
|
DWORD dUniqueProcessId;
|
||||||
|
DWORD dParentProcessID;
|
||||||
|
DWORD dHandleCount;
|
||||||
|
DWORD dReserved07;
|
||||||
|
DWORD dReserved08;
|
||||||
|
DWORD VmCounters;
|
||||||
|
DWORD dCommitCharge;
|
||||||
|
ELSYSTEM_THREAD_INFORMATION ThreadInfos[1];
|
||||||
|
} ELSYSTEM_PROCESS_INFORMATION, *PELSYSTEM_PROCESS_INFORMATION;
|
||||||
|
|
||||||
|
|
||||||
|
//Gets the PEB for the current process
|
||||||
|
PELPEB EL_GetPeb();
|
||||||
|
|
||||||
|
//prints out the Loaded Modules for the current Peb
|
||||||
|
DWORD EL_PrintModules(PELPEB peb);
|
||||||
|
|
||||||
|
//hides a module
|
||||||
|
DWORD EL_HideModule(PELPEB peb, const wchar_t *dll);
|
@ -68,4 +68,5 @@ project "udis86"
|
|||||||
}
|
}
|
||||||
|
|
||||||
include "OpenParrot"
|
include "OpenParrot"
|
||||||
include "OpenParrotLoader"
|
include "OpenParrotLoader"
|
||||||
|
include "OpenParrotKonamiLoader"
|
Loading…
Reference in New Issue
Block a user