mirror of
https://github.com/Ragora/T2-CPP.git
synced 2026-07-16 05:54:37 +00:00
Added a new TS evaluate shell
This commit is contained in:
parent
ea2542532f
commit
6be6f76ee0
1 changed files with 58 additions and 8 deletions
|
|
@ -25,16 +25,44 @@ BOOL APIENTRY DllMain( HMODULE hModule,
|
||||||
|
|
||||||
static bool sDogPetted = false;
|
static bool sDogPetted = false;
|
||||||
static DWORD mainthreadid=0;
|
static DWORD mainthreadid=0;
|
||||||
|
static bool evaldone=1;
|
||||||
|
void overridegets(char * string) {
|
||||||
|
int counter=0;
|
||||||
|
char outstr[3]="";
|
||||||
|
while (1) {
|
||||||
|
if (_kbhit()) {
|
||||||
|
string[counter]=_getch();
|
||||||
|
_putch(string[counter]);
|
||||||
|
if (string[counter]=='\n' || string[counter]=='\r') {
|
||||||
|
string[counter]=0x0;
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Sleep(4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DWORD WINAPI WatchDogEvalThread(LPVOID lpParam)
|
||||||
|
{
|
||||||
|
Con::evaluate((char *) lpParam,true,0,0);
|
||||||
|
Con::printf ("Finished executing\n");
|
||||||
|
evaldone=1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
DWORD WINAPI WatchDogThread(LPVOID lpParam)
|
DWORD WINAPI WatchDogThread(LPVOID lpParam)
|
||||||
{
|
{
|
||||||
time_t lastPet = time(0);
|
time_t lastPet = time(0);
|
||||||
CONTEXT hamburger;
|
CONTEXT hamburger;
|
||||||
HANDLE mainThread = OpenThread(THREAD_ALL_ACCESS,false,mainthreadid);
|
HANDLE mainThread = OpenThread(THREAD_ALL_ACCESS,false,mainthreadid);
|
||||||
|
char inputchar=0;
|
||||||
|
char evalcode[5000]="";
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
time_t now = time(0);
|
time_t now = time(0);
|
||||||
double seconds = difftime(now,lastPet);
|
double seconds = difftime(now,lastPet);
|
||||||
#ifdef SLOWSERVER
|
#ifdef SLOWSERVERa
|
||||||
if (!sDogPetted && seconds > 15) // Wait 15 seconds to be extra safe
|
if (!sDogPetted && seconds > 15) // Wait 15 seconds to be extra safe
|
||||||
#else
|
#else
|
||||||
if (!sDogPetted && seconds > 8) // Wait 8 seconds to be safe
|
if (!sDogPetted && seconds > 8) // Wait 8 seconds to be safe
|
||||||
|
|
@ -50,13 +78,35 @@ DWORD WINAPI WatchDogThread(LPVOID lpParam)
|
||||||
fprintf (wlog,"EIP: %08X EAX: %08X EBX: %08X ECX: %08X \nEDX: %08X ESI: %08X EDI: %08X\nEBP:%08X ESP:%08X\n", hamburger.Eip, hamburger.Eax, hamburger.Ebx, hamburger.Ecx, hamburger.Edx, hamburger.Esi, hamburger.Edi, hamburger.Ebp, hamburger.Esp);
|
fprintf (wlog,"EIP: %08X EAX: %08X EBX: %08X ECX: %08X \nEDX: %08X ESI: %08X EDI: %08X\nEBP:%08X ESP:%08X\n", hamburger.Eip, hamburger.Eax, hamburger.Ebx, hamburger.Ecx, hamburger.Edx, hamburger.Esi, hamburger.Edi, hamburger.Ebp, hamburger.Esp);
|
||||||
fclose (wlog);
|
fclose (wlog);
|
||||||
Con::printf ("EIP: %08X EAX: %08X EBX: %08X ECX: %08X \nEDX: %08X ESI: %08X EDI: %08X\nEBP:%08X ESP:%08X\n", hamburger.Eip, hamburger.Eax, hamburger.Ebx, hamburger.Ecx, hamburger.Edx, hamburger.Esi, hamburger.Edi, hamburger.Ebp, hamburger.Esp);
|
Con::printf ("EIP: %08X EAX: %08X EBX: %08X ECX: %08X \nEDX: %08X ESI: %08X EDI: %08X\nEBP:%08X ESP:%08X\n", hamburger.Eip, hamburger.Eax, hamburger.Ebx, hamburger.Ecx, hamburger.Edx, hamburger.Esi, hamburger.Edi, hamburger.Ebp, hamburger.Esp);
|
||||||
Con::printf ("Please press enter to try to continue\n or wait for 30 more seconds to kill T2 and write log\n");
|
Con::printf ("Please press enter to try to continue, press e to get a torquescript shell, or wait for 30 more seconds to kill T2 and write log\n");
|
||||||
Sleep(30000);
|
for (int secondcounter=0;secondcounter<120;secondcounter++) {
|
||||||
if (_kbhit()) {
|
Sleep(250);
|
||||||
sDogPetted=true;
|
if (_kbhit()) {
|
||||||
_getch(); // make sure to clean the keyboard buffer
|
sDogPetted=true;
|
||||||
ResumeThread(mainThread);
|
inputchar=_getch(); // make sure to clean the keyboard buffer
|
||||||
} else {
|
if (inputchar=='e') {
|
||||||
|
Con::printf ("Torque script shell activated enter the code to evaluate on the next line to exit, just type exitshell and press enter\n");
|
||||||
|
while (true) {
|
||||||
|
overridegets(evalcode);
|
||||||
|
if (strcmp(evalcode,"exitshell")==0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
DWORD threadID=0;
|
||||||
|
evaldone=0;
|
||||||
|
HANDLE thread = CreateThread(NULL, 0, WatchDogEvalThread, evalcode, 0, &threadID);
|
||||||
|
while (!evaldone) {
|
||||||
|
Sleep(256);
|
||||||
|
}
|
||||||
|
CloseHandle(thread);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
ResumeThread(mainThread);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sDogPetted) {
|
||||||
CloseHandle(mainThread);
|
CloseHandle(mainThread);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue