Welcome
Ladies and Gents:

These forums are now closed and registration disabled.

Please join us at our new forum on Proboards. Our hope is that these new forums are more stable, provide more and better features, and allow continuation of the project forums in a safer, more secure, long term environment.

me3explorer.proboards.com

--The ME3Explorer Team

Hooking...

Coder-centric area for programming advice and questions.

Hooking...

Postby WarrantyVoider » 13 Mar 2013, 18:48

C++ Hook dll code
My dumper in c++
Dump

and some valid adresses I found so far:
011C5658 - cracked
011DF6D8 - unknown
011C4f78 - Original


if you want to get the adress from ollydbg, calc like this:

Image
Code: Select all
absolute adress : 0x015C4F78
base adress     : 0x00400000 (always same)
relative adress : 0x011C4F78
always backup your files!
mess with the best or die like the rest!
"I tried everything!" - "mkay, please list that..." ; please dont pm me for help, we have a help section
User avatar
WarrantyVoider
Emeritus
 
Posts: 2270
Joined: 22 Aug 2012, 11:33
Has thanked: 480 time
Have thanks: 626 time

Re: Hooking...

Postby WarrantyVoider » 14 Mar 2013, 12:23

UObject::GObjObjects is located at .data:01ACF7D4
thanks to gildor^^
always backup your files!
mess with the best or die like the rest!
"I tried everything!" - "mkay, please list that..." ; please dont pm me for help, we have a help section
User avatar
WarrantyVoider
Emeritus
 
Posts: 2270
Joined: 22 Aug 2012, 11:33
Has thanked: 480 time
Have thanks: 626 time

Re: Hooking...

Postby WarrantyVoider » 14 Mar 2013, 15:03

Image
can readout name/classes
always backup your files!
mess with the best or die like the rest!
"I tried everything!" - "mkay, please list that..." ; please dont pm me for help, we have a help section

WarrantyVoider has been thanked by:
User avatar
WarrantyVoider
Emeritus
 
Posts: 2270
Joined: 22 Aug 2012, 11:33
Has thanked: 480 time
Have thanks: 626 time

Re: Hooking...

Postby WarrantyVoider » 14 Mar 2013, 19:56

other valid GObj offsets :

cracked version 0x01AAF304
original version 0x01AB5634
always backup your files!
mess with the best or die like the rest!
"I tried everything!" - "mkay, please list that..." ; please dont pm me for help, we have a help section
User avatar
WarrantyVoider
Emeritus
 
Posts: 2270
Joined: 22 Aug 2012, 11:33
Has thanked: 480 time
Have thanks: 626 time

Re: Hooking...

Postby WarrantyVoider » 17 Mar 2013, 22:12

here some valid c++ code for dumping all objects to file:

Code: Select all
void LogStuff()
{
   FILE* L = NULL;     
   fopen_s ( &L, "Loot.txt", "a+" );
            
            
   for ( DWORD i = 0x0; i < GObjObjects->Num(); i++ )
        {
                // check if it's a valid object
                if ( ! GObjObjects->Data[ i ] ) { continue; }
               
                // log the object
                fprintf (L, "%6i : 0x%p %s\n", i, GObjObjects->Data[ i ], GObjObjects->Data[ i ]->GetFullName());
        }
   fclose ( L );
}

void onAttach()
{     
      LogStuff();
}


and here the end of the (looong dump):
Spoiler:
Code: Select all
107420 : 0x242B6D80 SFXGUIValue_HUDPowerIcon SFXGUIInteraction.SFXSFHandler_PCHUD.SFXGUIValue_HUDPowerIcon
107421 : 0x242B6C00 SFXGUIValue_HUDPowerIcon SFXGUIInteraction.SFXSFHandler_PCHUD.SFXGUIValue_HUDPowerIcon
107422 : 0x24AFE000 BioSFHandler_PCConversation SFXGameViewportClient.SFXGUIInteraction.BioSFHandler_PCConversation
107423 : 0x24B9F600 BioSFHandler_BlackScreen SFXGameViewportClient.SFXGUIInteraction.BioSFHandler_BlackScreen
107424 : 0x24B9F300 BioSFHandler_MessageBox SFXGameViewportClient.SFXGUIInteraction.BioSFHandler_MessageBox
107425 : 0x24A89C60 UIInputConfiguration Transient.UIInputConfiguration
107427 : 0x242B6900 WwiseAudioComponent PersistentLevel.BioWorldInfo.WwiseAudioComponent
107428 : 0x24A895A0 InterpGroupInst Main_Sequence.SeqAct_Interp.InterpGroupInst
107429 : 0x1155F820 InterpTrackInstFloatProp SeqAct_Interp.InterpGroupInst.InterpTrackInstFloatProp
107430 : 0x1155F7D0 BioEvtSysTrackDOFInst SeqAct_Interp.InterpGroupInst.BioEvtSysTrackDOFInst
107431 : 0x24A89540 InterpGroupInstDirector Main_Sequence.SeqAct_Interp.InterpGroupInstDirector
107432 : 0x24B7E240 InterpTrackInstDirector SeqAct_Interp.InterpGroupInstDirector.InterpTrackInstDirector
107433 : 0x24A894E0 InterpGroupInst Main_Sequence.SeqAct_Interp.InterpGroupInst
107434 : 0x24B7E200 InterpTrackInstEvent SeqAct_Interp.InterpGroupInst.InterpTrackInstEvent
107435 : 0x24AE7800 MatineeActor TheWorld.PersistentLevel.MatineeActor
107439 : 0x24AE7300 MatineeActor TheWorld.PersistentLevel.MatineeActor
107451 : 0x24AE7080 MatineeActor TheWorld.PersistentLevel.MatineeActor
107454 : 0x2495B980 SkyLightComponent SkeletalMeshActor.DynamicLightEnvironmentComponent.SkyLightComponent
107455 : 0x24AE6900 PointLightComponent SkeletalMeshActor.DynamicLightEnvironmentComponent.PointLightComponent
107456 : 0x11A63CA0 BioPathQueue Transient.BioPathQueue
107457 : 0x11A60280 Canvas Transient.CanvasObject
107458 : 0x11A603C0 SFXGUI_MainMenu_RightComputer SFXGUIInteraction.BioSFHandler_PCMainMenu.SFXGUI_MainMenu_RightComputer
107459 : 0x24B9EA00 BioSFHandler_PCMainMenu SFXGameViewportClient.SFXGUIInteraction.BioSFHandler_PCMainMenu
107460 : 0x11D82D80 SFXGUI_MainMenu_Message_GAW Transient.SFXGUI_MainMenu_Message_GAW
107461 : 0x24B8E620 GFxValue GUI_EntryMenu.MainMenu_RTT_RC.GFxValue
107463 : 0x242B6480 WwiseAudioComponent Transient.WwiseAudioComponent
107464 : 0x24B8E2A0 SFXOnlineEvent Transient.SFXOnlineEvent
107465 : 0x11552B20 SFXSaveLoadWidgetProxy SFXGameViewportClient.SFXGUIInteraction.SFXSaveLoadWidgetProxy
107467 : 0x24962F80 Texture2D Transient.Texture2D
107473 : 0x24B6E480 SFXOnlineSaveGameMP Transient.SFXOnlineSaveGameMP
107474 : 0x3494FDC0 SFXMatchResultsData Transient.SFXMatchResultsData
107475 : 0x24B68E00 SFXGUI_MainMenu_Message_Text Transient.SFXGUI_MainMenu_Message_Text
107476 : 0x24A89960 SFXMPClassRecord Transient.SFXMPClassRecord
107477 : 0x23FF2940 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107478 : 0x12884C80 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107479 : 0x128848C0 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107480 : 0x12884800 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107481 : 0x24A880A0 SFXMPClassRecord Transient.SFXMPClassRecord
107482 : 0x12884740 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107483 : 0x12884680 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107484 : 0x128845C0 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107485 : 0x12884500 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107486 : 0x12884440 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107487 : 0x24A87FE0 SFXMPClassRecord Transient.SFXMPClassRecord
107488 : 0x12884380 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107489 : 0x128842C0 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107490 : 0x12884200 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107491 : 0x12884140 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107492 : 0x24A88040 SFXMPClassRecord Transient.SFXMPClassRecord
107493 : 0x12883FC0 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107494 : 0x12883F00 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107495 : 0x12883E40 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107496 : 0x12883D80 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107497 : 0x24A87F80 SFXMPClassRecord Transient.SFXMPClassRecord
107498 : 0x12883CC0 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107499 : 0x12883C00 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107500 : 0x12883B40 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107501 : 0x12883A80 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107502 : 0x24A87EC0 SFXMPClassRecord Transient.SFXMPClassRecord
107503 : 0x128839C0 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107504 : 0x12883900 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107505 : 0x12883840 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107506 : 0x12883780 SFXMPCharacterRecord Transient.SFXMPCharacterRecord
107507 : 0x24966F40 SFXUberPostProcessEffect Transient.SFXUberPostProcessEffect
107509 : 0x24B8DF90 SFXOnlineEvent Transient.SFXOnlineEvent
107512 : 0x24B8DE40 SFXOnlineEvent Transient.SFXOnlineEvent
107525 : 0x24965F00 Texture2D Transient.Texture2D
107526 : 0x249630C0 Texture2D Transient.Texture2D
107529 : 0x3494BB80 SFXOnlineHTTPRequest Transient.SFXOnlineHTTPRequest
always backup your files!
mess with the best or die like the rest!
"I tried everything!" - "mkay, please list that..." ; please dont pm me for help, we have a help section
User avatar
WarrantyVoider
Emeritus
 
Posts: 2270
Joined: 22 Aug 2012, 11:33
Has thanked: 480 time
Have thanks: 626 time

Re: Hooking...

Postby WarrantyVoider » 19 Mar 2013, 10:10

Here my current implementation of hooking ProcessEvents (used for all kinds of updates)

Spoiler:
#include "sdk_test.h"

DWORD GObjObjects_offset = 0x01ACF7D4;
DWORD ProcessEventOrig = 0x004535E0;//0x00452960;

TArray< UObject* >* GObjObjects = ( TArray< UObject* >* ) GObjObjects_offset;

typedef void (__stdcall *ProcessEvent ) ( UFunction*, void*, void* );

UFunction *pUFunc = NULL;
void *pParms = NULL;
void *pResult = NULL;
UObject *pCallObject = NULL;

UObject* pHUD = NULL;
UObject* pPlayerController = NULL;
PDWORD dwOldVMT_HUD = NULL;
PDWORD dwOldVMT_PlayerController = NULL;
PDWORD dwNewVMT_HUD = NULL;
PDWORD dwNewVMT_PlayerController = NULL;

UINT CountVMTFunctions ( PDWORD pdwVMT )
{
UINT dwIndex = 0;
for ( dwIndex = 0; pdwVMT [ dwIndex ]; dwIndex++ )
{
if ( IsBadCodePtr ( ( FARPROC ) pdwVMT [ dwIndex ] ) )
break;
}
return dwIndex;
}

bool SwapVMT ( PDWORD *ppdwClassBase )
{
PDWORD pdwOldVMT = *ppdwClassBase;
UINT dwVMTSize = CountVMTFunctions ( pdwOldVMT );
if ( ! dwVMTSize ) { return false; }
PDWORD pdwNewVMT = new DWORD [ dwVMTSize ];
if ( ! pdwNewVMT ) { return false; }
memcpy ( pdwNewVMT, pdwOldVMT, sizeof ( DWORD ) * dwVMTSize );
*ppdwClassBase = pdwNewVMT;
return true;
}

bool HookVMTFuncion ( PDWORD *ppdwClassBase, DWORD dwNewFunction, UINT uiFunctionIndex )
{
PDWORD pdwVMT = *ppdwClassBase;
if ( pdwVMT && uiFunctionIndex <= CountVMTFunctions ( pdwVMT ) && uiFunctionIndex >= 0 )
{
pdwVMT [ uiFunctionIndex ] = dwNewFunction;
return true;
}
return false;
}

void Log(char * text)
{
FILE* Log = NULL;
fopen_s ( &Log, "Loot.txt", "a+" );
fprintf (Log, text);
fclose ( Log );
}

void Log(int i)
{
FILE* Log = NULL;
fopen_s ( &Log, "Loot.txt", "a+" );
fprintf (Log, "0x%x", i);
fclose ( Log );
}

void Log(float f)
{
FILE* Log = NULL;
fopen_s ( &Log, "Loot.txt", "a+" );
fprintf (Log, "%f", f);
fclose ( Log );
}

void LogStuff()
{
FILE* L = NULL;
fopen_s ( &L, "Loot.txt", "a+" );
for ( DWORD i = 0x0; i < GObjObjects->Num(); i++ )
{
if ( ! GObjObjects->Data[ i ] ) { continue; }
fprintf (L, "%6i : 0x%p %s\n", i, GObjObjects->Data[ i ], GObjObjects->Data[ i ]->GetFullName());
}
fclose ( L );
}

void __declspec(naked) ProcessEventHooked ()
{

__asm mov pCallObject, ecx; //get caller from ecx register and save it in pCallObject

__asm
{
push eax
mov eax, dword ptr [esp + 0x8]
mov pUFunc, eax
mov eax, dword ptr [esp + 0xC]
mov pParms, eax
mov eax, dword ptr [esp + 0x10]
mov pResult, eax
pop eax
} // Manually get the proper parameters for the function

__asm pushad //Save registers on stack

Log(pCallObject->GetFullName());
Log("... Yay!\n");
__asm popad //restore registers from stack
__asm
{
push pResult
push pParms
push pUFunc
call ProcessEventOrig

retn 0xC
} //put parameters on stack and call the orginal function

}

UObject* FindObject(char * name)
{
for ( DWORD i = 0x0; i < GObjObjects->Num(); i++ )
{
if ( ! GObjObjects->Data[ i ] ) { continue; }
if (!strcmp(GObjObjects->Data[ i ] ->GetFullName(), name))
{
Log("Found :");
Log(name);
Log("\n");
return GObjObjects->Data[ i ] ;
}
}
return NULL;
}

void Hook()
{
Log(1);Log("\n");
pHUD = FindObject("BioHUD TheWorld.PersistentLevel.BioHUD");
Log(2);Log("\n");
pPlayerController = FindObject("sfxplayercontroller TheWorld.PersistentLevel.sfxplayercontroller");
Log(3);Log("\n");
FILE* L = NULL;
fopen_s ( &L, "Loot.txt", "a+" );
fprintf (L, "0x%p\n0x%p\n", pHUD, pPlayerController);
fclose ( L );
dwOldVMT_HUD = * ( PDWORD* ) pHUD;
Log(4);Log("\n");
dwOldVMT_PlayerController = * ( PDWORD* ) pPlayerController;
Log(5);Log("\n");
if (SwapVMT ( ( PDWORD* ) pHUD ) )
{
Log(6);Log("\n");
dwNewVMT_HUD = * ( PDWORD* ) pHUD;
Log(7);Log("\n");
HookVMTFuncion ( ( PDWORD* ) pHUD, ( DWORD ) ProcessEventHooked, ( UINT ) 60 );
}
Log(8);Log("\n");
if ( SwapVMT ( ( PDWORD* ) pPlayerController ) )
{
Log(9);Log("\n");
dwNewVMT_PlayerController = * ( PDWORD* ) pPlayerController;
Log(10);Log("\n");
HookVMTFuncion ( ( PDWORD* ) pPlayerController, ( DWORD ) ProcessEventHooked, ( UINT ) 60 );
}
Log(11);Log("\n");
}

void onAttach()
{
Log("Hello World\n");
Hook();
//LogObject();
//LogStuff();

}

BOOL WINAPI DllMain ( HMODULE hModule, DWORD dwReason, LPVOID lpReserved )
{
switch ( dwReason )
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls ( hModule );
CreateThread ( NULL, 0, ( LPTHREAD_START_ROUTINE ) onAttach, NULL, 0, NULL );
return true;
break;

case DLL_PROCESS_DETACH:
return true;
break;
}
return true;
};


and the result... still cant find out why my new ProcessEvents never gets called
Spoiler:
Hello World
0x1
Found :BioHUD TheWorld.PersistentLevel.BioHUD
0x2
Found :sfxplayercontroller TheWorld.PersistentLevel.sfxplayercontroller
0x3
0x242CEA00
0x13276C00
0x4
0x5
0x6
0x7
0x8
0x9
0xa
0xb
always backup your files!
mess with the best or die like the rest!
"I tried everything!" - "mkay, please list that..." ; please dont pm me for help, we have a help section
User avatar
WarrantyVoider
Emeritus
 
Posts: 2270
Joined: 22 Aug 2012, 11:33
Has thanked: 480 time
Have thanks: 626 time

Re: Hooking...

Postby WarrantyVoider » 20 Mar 2013, 10:54

yay! I got my process event hook working! ME3 has modefied the VMTs, so ProcessEvent is now idx 70!

here download

code:
Spoiler:
#include "sdk_test.h"

DWORD GObjObjects_offset = 0x01ACF7D4;//0x01AAF304
DWORD ProcessEventOrig = 0x004535E0;//0x00452960;

TArray< UObject* >* GObjObjects = ( TArray< UObject* >* ) GObjObjects_offset;

toolkit::VMTHook* hook;

typedef void (__stdcall *ProcessEvent ) ( UFunction*, void*, void* );

UFunction *pUFunc = NULL;
void *pParms = NULL;
void *pResult = NULL;
UObject *pCallObject = NULL;

UObject* pHUD = NULL;
UObject* pPlayerController = NULL;
PDWORD dwOldVMT_HUD = NULL;
PDWORD dwOldVMT_PlayerController = NULL;

void Log(char * text)
{
FILE* Log = NULL;
fopen_s ( &Log, "Loot.txt", "a+" );
fprintf (Log, text);
fclose ( Log );
}

void Log(int i)
{
FILE* Log = NULL;
fopen_s ( &Log, "Loot.txt", "a+" );
fprintf (Log, "0x%x", i);
fclose ( Log );
}

void Log(float f)
{
FILE* Log = NULL;
fopen_s ( &Log, "Loot.txt", "a+" );
fprintf (Log, "%f", f);
fclose ( Log );
}

void LogStuff()
{
FILE* L = NULL;
fopen_s ( &L, "Loot.txt", "a+" );
for ( DWORD i = 0x0; i < GObjObjects->Num(); i++ )
{
if ( ! GObjObjects->Data[ i ] ) { continue; }
fprintf (L, "%6i : 0x%p %s\n", i, GObjObjects->Data[ i ], GObjObjects->Data[ i ]->GetFullName());
}
fclose ( L );
}

void __declspec(naked) ProcessEventHooked ()
{
__asm mov pCallObject, ecx;
__asm
{
push eax
mov eax, dword ptr [esp + 0x8]
mov pUFunc, eax
mov eax, dword ptr [esp + 0xC]
mov pParms, eax
mov eax, dword ptr [esp + 0x10]
mov pResult, eax
pop eax
}
__asm pushad
if ( pUFunc )
{
if ( ! strcmp ( pUFunc->GetFullName(), "Function SFXGame.BioHUD.PostRender" ) )
{
Log(pUFunc->GetFullName());
Log("\n");
}

if (! strcmp ( pUFunc->GetFullName(), "Function SFXGame.BioPlayerController.PlayerTick"))
{
Log(pUFunc->GetFullName());
Log("\n");
}
if (! strcmp ( pUFunc->GetFullName(), "Function SFXGame.sfxplayercontroller.Destroyed"))
{
Log(pUFunc->GetFullName());
Log("\n");
}
}
__asm popad
__asm
{
push pResult
push pParms
push pUFunc
call ProcessEventOrig
retn 0xC
}

}

UObject* FindObject(char * name)
{
for ( DWORD i = 0x0; i < GObjObjects->Num(); i++ )
{
if ( ! GObjObjects->Data[ i ] ) { continue; }
if (!strcmp(GObjObjects->Data[ i ] ->GetFullName(), name))
{
Log("Found :");
Log(name);
Log("\n");
return GObjObjects->Data[ i ] ;
}
}
return NULL;
}

void Hook()
{
pHUD = FindObject("BioHUD TheWorld.PersistentLevel.BioHUD");
pPlayerController = FindObject("sfxplayercontroller TheWorld.PersistentLevel.sfxplayercontroller");
dwOldVMT_HUD = * ( PDWORD* ) pHUD;
dwOldVMT_PlayerController = * ( PDWORD* ) pPlayerController;
hook = new toolkit::VMTHook(pHUD);
hook->HookMethod(&ProcessEventHooked, 70);
hook = new toolkit::VMTHook(pPlayerController);
hook->HookMethod(&ProcessEventHooked, 70);
}

void onAttach()
{
Log("Hello World\n");
Hook();
//LogStuff();
}

BOOL WINAPI DllMain ( HMODULE hModule, DWORD dwReason, LPVOID lpReserved )
{
switch ( dwReason )
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls ( hModule );
CreateThread ( NULL, 0, ( LPTHREAD_START_ROUTINE ) onAttach, NULL, 0, NULL );
return true;
break;

case DLL_PROCESS_DETACH:
return true;
break;
}
return true;
};

and the result:
Spoiler:
Hello World
Found :BioHUD TheWorld.PersistentLevel.BioHUD
Found :sfxplayercontroller TheWorld.PersistentLevel.sfxplayercontroller
Function SFXGame.BioHUD.PostRender
Function SFXGame.BioHUD.PostRender
Function SFXGame.BioHUD.PostRender
Function SFXGame.BioPlayerController.PlayerTick
Function SFXGame.BioHUD.PostRender
Function SFXGame.BioPlayerController.PlayerTick
Function SFXGame.BioHUD.PostRender
Function SFXGame.BioPlayerController.PlayerTick
Function SFXGame.BioHUD.PostRender
Function SFXGame.BioPlayerController.PlayerTick
Function SFXGame.BioHUD.PostRender
Function SFXGame.BioPlayerController.PlayerTick
...


greetz WV
always backup your files!
mess with the best or die like the rest!
"I tried everything!" - "mkay, please list that..." ; please dont pm me for help, we have a help section
User avatar
WarrantyVoider
Emeritus
 
Posts: 2270
Joined: 22 Aug 2012, 11:33
Has thanked: 480 time
Have thanks: 626 time

Re: Hooking...

Postby WarrantyVoider » 20 Mar 2013, 12:08

Image

Drawing a line never was so beautifull :P
always backup your files!
mess with the best or die like the rest!
"I tried everything!" - "mkay, please list that..." ; please dont pm me for help, we have a help section

WarrantyVoider has been thanked by:
User avatar
WarrantyVoider
Emeritus
 
Posts: 2270
Joined: 22 Aug 2012, 11:33
Has thanked: 480 time
Have thanks: 626 time

Re: Hooking...

Postby Renmiri » 21 Mar 2013, 04:31

GZ Voider!

Hey did you see how easy it is to make Thane's death to never happen ? Is just a check value for a binary variable.

I wonder if something that simple could be ported to xbox...

Just trying to think on ways to rub Bioware's face in: "No, you don't get to kill our heroes and our Shepard" ;)
Renmiri
Emeritus
 
Posts: 207
Joined: 31 Aug 2012, 20:42
Has thanked: 141 time
Have thanks: 37 time

Re: Hooking...

Postby WarrantyVoider » 21 Mar 2013, 06:02

We already have tools to edit xbox content, its just that you need to JTag/Glitch your xbox to get it running. Someone is trying to use a DLC injection disk, but I havent heard from him again

greetz
always backup your files!
mess with the best or die like the rest!
"I tried everything!" - "mkay, please list that..." ; please dont pm me for help, we have a help section
User avatar
WarrantyVoider
Emeritus
 
Posts: 2270
Joined: 22 Aug 2012, 11:33
Has thanked: 480 time
Have thanks: 626 time

Next

Return to Coders' Help

Who is online

Users browsing this forum: No registered users and 0 guests

suspicion-preferred