Advertisement
llBeastModell

AW Ban Bypass TU5

May 2nd, 2016
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.11 KB | None | 0 0
  1. AW Ban Bypass TU5
  2.  
  3. if(XamGetCurrentTitleId() == AW)
  4. {
  5.    BuildResponse();
  6.    HookFunctionStart((PDWORD)0x821E3C78, (PDWORD)SaveStub, (DWORD)answerChallengesHook);
  7. }
  8.  
  9. void PatchInJump(unsigned long* Address, unsigned long Destination, bool Linked)
  10. {
  11.    Address[0] = ((Destination & 0x8000) ? 0x3D600000 + (((Destination >> 16) & 0xFFFF) + 1) : 0x3D600000 + ((Destination >> 16) & 0xFFFF));
  12.     Address[1] = 0x396B0000 + (Destination & 0xFFFF);
  13.     Address[2] = 0x7D6903A6;
  14.    Address[3] = ((Linked) ? 0x4E800421 : 0x4E800420);
  15. }
  16.  
  17. void __declspec(****d) GLPR(VOID)
  18. {
  19.     __asm
  20.     {
  21.         std     r14, -0x98(sp)
  22.         std     r15, -0x90(sp)
  23.         std     r16, -0x88(sp)
  24.         std     r17, -0x80(sp)
  25.         std     r18, -0x78(sp)
  26.         std     r19, -0x70(sp)
  27.         std     r20, -0x68(sp)
  28.         std     r21, -0x60(sp)
  29.         std     r22, -0x58(sp)
  30.         std     r23, -0x50(sp)
  31.         std     r24, -0x48(sp)
  32.         std     r25, -0x40(sp)
  33.         std     r26, -0x38(sp)
  34.         std     r27, -0x30(sp)
  35.         std     r28, -0x28(sp)
  36.         std     r29, -0x20(sp)
  37.         std     r30, -0x18(sp)
  38.         std     r31, -0x10(sp)
  39.         stw     r12, -0x8(sp)
  40.       blr
  41.    }
  42. }
  43.  
  44. DWORD RelinkGPLR(DWORD SFSOffset, PDWORD SaveStubAddress, PDWORD OriginalAddress)
  45. {
  46.     DWORD Instruction = 0, Replacing; PDWORD Saver = (PDWORD)GLPR;
  47.    if(SFSOffset & 0x2000000){ SFSOffset = SFSOffset | 0xFC000000; }
  48.     Replacing = OriginalAddress[SFSOffset / 4];
  49.     for(int i = 0; i < 20; i++){
  50.         if(Replacing == Saver[i]){
  51.                 int NewOffset = (int)&Saver[i]-(int)SaveStubAddress;
  52.             Instruction = 0x48000001 | (NewOffset & 0x3FFFFFC);
  53.         }
  54.     }
  55.     return Instruction;
  56. }
  57.  
  58. void HookFunctionStart(PDWORD Address, PDWORD SaveStub, DWORD Destination)
  59. {
  60.     if((SaveStub != NULL) && (Address != NULL))
  61.     {
  62.         DWORD AddressRelocation = (DWORD)(&Address[4]);
  63.  
  64.         if(AddressRelocation & 0x8000)
  65.             SaveStub[0] = 0x3D600000 + (((AddressRelocation >> 16) & 0xFFFF) + 1);
  66.         else
  67.             SaveStub[0] = 0x3D600000 + ((AddressRelocation >> 16) & 0xFFFF);
  68.  
  69.         SaveStub[1] = 0x396B0000 + (AddressRelocation & 0xFFFF);
  70.         SaveStub[2] = 0x7D6903A6;
  71.  
  72.         for(int i = 0; i < 4; i++)
  73.             if((Address[i] & 0x48000003) == 0x48000001)
  74.             SaveStub[i + 3] = RelinkGPLR((Address[i] & ~0x48000003), &SaveStub[i + 3], &Address[i]);
  75.             else
  76.                 SaveStub[i + 3] = Address[i];
  77.  
  78.         SaveStub[7] = 0x4E800420;
  79.         __dcbst(0, SaveStub);
  80.         __emit(0x7c0004ac);
  81.         __emit(0x4C00012C);
  82.  
  83.         PatchInJump(Address, Destination, FALSE);
  84.     }
  85. }
  86.  
  87. inline __declspec(****d) int SaveStub(int r3, int r4, int r5)
  88. {
  89.     __asm
  90.     {
  91.         nop
  92.         nop
  93.         nop
  94.         nop
  95.         nop
  96.         nop
  97.         nop
  98.         blr
  99.     }
  100. }
  101.  
  102. byte Response[] = {
  103.    0x00, 0x00, 0x00, 0x00, //IP Address
  104.    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //Machine Id
  105.    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //Enet
  106.    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //Unknown1
  107.    0x00, 0x00, //Unknown2
  108.    0x2, //Retail Flag
  109.    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //Console Key
  110.    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, //Console Index
  111.    0x42, 0xFE //Kernel
  112. };
  113.  
  114. void answerChallengesHook(int r3, int r4, int r5)
  115. {
  116.    memcpy((void*)(r5 + 0x22), Response, 0x3A);
  117.    SaveStub(r3, r4, r5);
  118.    0x2//Retail
  119. }
  120.  
  121. void BuildResponse()
  122. {
  123.    srand((unsigned int)time(NULL));
  124.    BYTE IPAddress[4], MachineId[8], Enet[8], ConsoleKey[13], ConsoleIndex[12];
  125.    for(int i = 0; i < 4; i++)IPAddress[i] = rand() % 90;
  126.    for(int i = 0; i < 8; i++){ MachineId[i] = rand() % 90; Enet[i] = rand() % 90; }
  127.    for(int i = 0; i < 12; i++)ConsoleIndex[i] = rand() % 90;
  128.    for(int i = 0; i < 13; i++)ConsoleKey[i] = rand() % 90;
  129.  
  130.    memcpy(Response, IPAddress, 4);
  131.    memcpy(Response + 0x4, &MachineId, 8);
  132.    memcpy(Response + 0xC, &Enet, 8);
  133.    memcpy(Response + 0x1F, &ConsoleKey, 13);
  134.    memcpy(Response + 0x2C, &ConsoleIndex, 12);
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement