Ripping from Pokkén Tournament - CHEMI6DER - 04-07-2016
Hello. I want to rip from Pokkén Tournament, but I have no idea how to open containers from game data. Everythig is contained in .drp containers. If you have any idea on how to open these containers, please tell me. I'l include one of the containers in attachments.
RE: Ripping from Pokkén Tournament - Random Talking Bush - 04-07-2016
It's pretty much impossible to get at them, everything in the game has a second layer of encryption on it. Won't be possible until someone finds the correct AES key in the game's coding, which could take a long time.
(EDIT: No longer the case, see later posts in this topic!)
RE: Ripping from Pokkén Tournament - CHEMI6DER - 04-08-2016
Yeah. But I know how to disasemble wii u binaries and I have a lot of free time, so I may try to find the decryption key.
RE: Ripping from Pokkén Tournament - CHEMI6DER - 04-08-2016
I've sucesefully dumped load_drp instruction from ferrum_app.rpx:
.text:02B83D30
.text:02B83D30
.text:02B83D30 # _Q2_5sysdr12ResourceData::load_drp__Q2_5sysdr36__N_20_dr_resource_list_cpp_8bdc2d44FQ2_5sysdr41SharedPtr__tm(void)
.text:02B83D30 load_drp__Q2_5sysdr36__N_20_dr_resource_list_cpp_8bdc2d44FQ2_5sysdr41SharedPtr__tm__24_Q2_5sysdr12ResourceData:
.text:02B83D30 # DATA XREF: sysdr::ResourceListManager::ResourceListManager((void))+4F0o
.text:02B83D30 # sysdr::ResourceListManager::ResourceListManager((void))+4FCo
.text:02B83D30
.text:02B83D30 .set var_10, -0x10
.text:02B83D30 .set var_C, -0xC
.text:02B83D30 .set var_8, -8
.text:02B83D30 .set var_4, -4
.text:02B83D30 .set arg_4, 4
.text:02B83D30
.text:02B83D30 mflr r0
.text:02B83D34 stwu r1, -0x18(r1)
.text:02B83D38 stw r30, 0x18+var_8(r1)
.text:02B83D3C stw r29, 0x18+var_C(r1)
.text:02B83D40 stw r31, 0x18+var_4(r1)
.text:02B83D44 stw r0, 0x18+arg_4(r1)
.text:02B83D48 mr r29, r3
.text:02B83D4C li r6, 0
.text:02B83D50 lwz r3, 0(r3)
.text:02B83D54 mr r4, r6
.text:02B83D58 stw r6, 0x18+var_10(r1)
.text:02B83D5C addi r5, r1, 0x18+var_10
.text:02B83D60 stw r6, 0x470(r3)
.text:02B83D64 bl ReadFile__Q2_5sysdr12ResourceDataFiPPvb # sysdr::ResourceData::ReadFile((int,void **,bool))
.text:02B83D68 mr. r30, r3
.text:02B83D6C mr r31, r4
.text:02B83D70 bgt loc_2B83DA0
.text:02B83D74 blt loc_2B83D80
.text:02B83D78 cmplwi r31, 0
.text:02B83D7C bgt loc_2B83DA0
.text:02B83D80
.text:02B83D80 loc_2B83D80: # CODE XREF: _Q2_5sysdr12ResourceData::load_drp__Q2_5sysdr36__N_20_dr_resource_list_cpp_8bdc2d44FQ2_5sysdr41SharedPtr__tm(void)+44j
.text:02B83D80 lwz r29, 0x18+var_C(r1)
.text:02B83D84 lwz r0, 0x18+arg_4(r1)
.text:02B83D88 lwz r30, 0x18+var_8(r1)
.text:02B83D8C mtlr r0
.text:02B83D90 lwz r31, 0x18+var_4(r1)
.text:02B83D94 addi r1, r1, 0x18
.text:02B83D98 li r3, 0
.text:02B83D9C blr
.text:02B83DA0 # ---------------------------------------------------------------------------
.text:02B83DA0
.text:02B83DA0 loc_2B83DA0: # CODE XREF: _Q2_5sysdr12ResourceData::load_drp__Q2_5sysdr36__N_20_dr_resource_list_cpp_8bdc2d44FQ2_5sysdr41SharedPtr__tm(void)+40j
.text:02B83DA0 # _Q2_5sysdr12ResourceData::load_drp__Q2_5sysdr36__N_20_dr_resource_list_cpp_8bdc2d44FQ2_5sysdr41SharedPtr__tm(void)+4Cj
.text:02B83DA0 lwz r3, 0x18+var_10(r1)
.text:02B83DA4 mr r4, r31
.text:02B83DA8 bl ResourcePackDecrypt__5sysdrFPvUi # sysdr::ResourcePackDecrypt((void *,uint))
.text:02B83DAC cmpwi r3, 0
.text:02B83DB0 bne loc_2B83DDC
.text:02B83DB4 lwz r3, 0x18+var_10(r1)
.text:02B83DB8 bl SystemFree__5sysdrFPv # sysdr::SystemFree((void *))
.text:02B83DBC lwz r29, 0x18+var_C(r1)
.text:02B83DC0 lwz r0, 0x18+arg_4(r1)
.text:02B83DC4 lwz r30, 0x18+var_8(r1)
.text:02B83DC8 mtlr r0
.text:02B83DCC lwz r31, 0x18+var_4(r1)
.text:02B83DD0 addi r1, r1, 0x18
.text:02B83DD4 li r3, 0
.text:02B83DD8 blr
.text:02B83DDC # ---------------------------------------------------------------------------
.text:02B83DDC
.text:02B83DDC loc_2B83DDC: # CODE XREF: _Q2_5sysdr12ResourceData::load_drp__Q2_5sysdr36__N_20_dr_resource_list_cpp_8bdc2d44FQ2_5sysdr41SharedPtr__tm(void)+80j
.text:02B83DDC lwz r10, 0(r29)
.text:02B83DE0 lwz r0, 0x18+var_10(r1)
.text:02B83DE4 stw r31, 0x488(r10)
.text:02B83DE8 li r3, 1
.text:02B83DEC stw r0, 0x480(r10)
.text:02B83DF0 stw r3, 0x470(r10)
.text:02B83DF4 lwz r29, 0x18+var_C(r1)
.text:02B83DF8 lwz r0, 0x18+arg_4(r1)
.text:02B83DFC lwz r30, 0x18+var_8(r1)
.text:02B83E00 mtlr r0
.text:02B83E04 lwz r31, 0x18+var_4(r1)
.text:02B83E08 addi r1, r1, 0x18
.text:02B83E0C blr
.text:02B83E0C # End of function _Q2_5sysdr12ResourceData::load_drp__Q2_5sysdr36__N_20_dr_resource_list_cpp_8bdc2d44FQ2_5sysdr41SharedPtr__tm(void)
.text:02B83E0C
.text:02B83E10
RE: Ripping from Pokkén Tournament - TGE - 04-11-2016
.text:02B83DA8 bl ResourcePackDecrypt__5sysdrFPvUi # sysdr::ResourcePackDecrypt((void *,uint))
Dump this function. If you're using IDA Pro you just have to go jump to the bl'd function name.
RE: Ripping from Pokkén Tournament - CHEMI6DER - 04-12-2016
(04-11-2016, 07:19 AM)TGE Wrote: .text:02B83DA8 bl ResourcePackDecrypt__5sysdrFPvUi # sysdr::ResourcePackDecrypt((void *,uint))
Dump this function. If you're using IDA Pro you just have to go jump to the bl'd function name.
Here you go:
.text:02B8EF8C
.text:02B8EF8C
.text:02B8EF8C # sysdr::ResourcePackDecrypt((void *, unsigned int))
.text:02B8EF8C ResourcePackDecrypt__5sysdrFPvUi: # CODE XREF: _Q2_5sysdr12ResourceData::load_drp__Q2_5sysdr36__N_20_dr_resource_list_cpp_8bdc2d44FQ2_5sysdr41SharedPtr__tm(void)+78p
.text:02B8EF8C
.text:02B8EF8C .set var_40, -0x40
.text:02B8EF8C .set var_2C, -0x2C
.text:02B8EF8C .set arg_4, 4
.text:02B8EF8C
.text:02B8EF8C stwu r1, -0x48(r1)
.text:02B8EF90 stmw r21, 0x48+var_2C(r1)
.text:02B8EF94 mflr r0
.text:02B8EF98 stw r0, 0x48+arg_4(r1)
.text:02B8EF9C lwz r5, 0x1C(r3)
.text:02B8EFA0 mr r30, r3
.text:02B8EFA4 cmpwi r5, 0
.text:02B8EFA8 mr r27, r4
.text:02B8EFAC beq loc_2B8F2C0
.text:02B8EFB0 lis r4, 0x133 # 0x132B471
.text:02B8EFB4 addi r3, r1, 0x48+var_40
.text:02B8EFB8 addi r4, r4, -0x4B8F # 0x132B471
.text:02B8EFBC bl Init__Q2_5sysdr8RandomXSFi # sysdr::RandomXS::Init((int))
.text:02B8EFC0 lwz r4, 0x1C(r30)
.text:02B8EFC4 addi r3, r1, 0x48+var_40
.text:02B8EFC8 bl Init__Q2_5sysdr8RandomXSFi # sysdr::RandomXS::Init((int))
.text:02B8EFCC clrlwi. r7, r27, 30
.text:02B8EFD0 li r23, 0
.text:02B8EFD4 beq loc_2B8F17C
.text:02B8EFD8 cmpwi r27, 0
.text:02B8EFDC beq loc_2B8F2C0
.text:02B8EFE0 srwi. r22, r27, 3
.text:02B8EFE4 ble loc_2B8F12C
.text:02B8EFE8 addi r24, r30, -8
.text:02B8EFEC li r31, -0x18
.text:02B8EFF0 li r29, -0x19
.text:02B8EFF4 li r26, -0x1A
.text:02B8EFF8 li r25, -0x1B
.text:02B8EFFC
.text:02B8EFFC loc_2B8EFFC: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+19Cj
.text:02B8EFFC addi r8, r31, -4
.text:02B8F000 cmplwi r8, 4
.text:02B8F004 lbzx r21, r30, r23
.text:02B8F008 blt loc_2B8F020
.text:02B8F00C addi r3, r1, 0x48+var_40
.text:02B8F010 bl GetInt__Q2_5sysdr8RandomXSFv # sysdr::RandomXS::GetInt((void))
.text:02B8F014 srawi r9, r3, 3
.text:02B8F018 xor r10, r21, r9
.text:02B8F01C stbx r10, r30, r23
.text:02B8F020
.text:02B8F020 loc_2B8F020: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+7Cj
.text:02B8F020 lbz r21, 9(r24)
.text:02B8F024 cmplwi r25, 4
.text:02B8F028 addi r24, r24, 8
.text:02B8F02C blt loc_2B8F044
.text:02B8F030 addi r3, r1, 0x48+var_40
.text:02B8F034 bl GetInt__Q2_5sysdr8RandomXSFv # sysdr::RandomXS::GetInt((void))
.text:02B8F038 srawi r0, r3, 3
.text:02B8F03C xor r0, r21, r0
.text:02B8F040 stb r0, 1(r24)
.text:02B8F044
.text:02B8F044 loc_2B8F044: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+A0j
.text:02B8F044 cmplwi r26, 4
.text:02B8F048 lbz r21, 2(r24)
.text:02B8F04C blt loc_2B8F064
.text:02B8F050 addi r3, r1, 0x48+var_40
.text:02B8F054 bl GetInt__Q2_5sysdr8RandomXSFv # sysdr::RandomXS::GetInt((void))
.text:02B8F058 srawi r0, r3, 3
.text:02B8F05C xor r0, r21, r0
.text:02B8F060 stb r0, 2(r24)
.text:02B8F064
.text:02B8F064 loc_2B8F064: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+C0j
.text:02B8F064 cmplwi r29, 4
.text:02B8F068 lbz r21, 3(r24)
.text:02B8F06C blt loc_2B8F084
.text:02B8F070 addi r3, r1, 0x48+var_40
.text:02B8F074 bl GetInt__Q2_5sysdr8RandomXSFv # sysdr::RandomXS::GetInt((void))
.text:02B8F078 srawi r0, r3, 3
.text:02B8F07C xor r0, r21, r0
.text:02B8F080 stb r0, 3(r24)
.text:02B8F084
.text:02B8F084 loc_2B8F084: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+E0j
.text:02B8F084 cmplwi r31, 4
.text:02B8F088 lbz r21, 4(r24)
.text:02B8F08C blt loc_2B8F0A4
.text:02B8F090 addi r3, r1, 0x48+var_40
.text:02B8F094 bl GetInt__Q2_5sysdr8RandomXSFv # sysdr::RandomXS::GetInt((void))
.text:02B8F098 srawi r8, r3, 3
.text:02B8F09C xor r0, r21, r8
.text:02B8F0A0 stb r0, 4(r24)
.text:02B8F0A4
.text:02B8F0A4 loc_2B8F0A4: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+100j
.text:02B8F0A4 addi r11, r25, 4
.text:02B8F0A8 cmplwi r11, 4
.text:02B8F0AC lbz r21, 5(r24)
.text:02B8F0B0 blt loc_2B8F0C8
.text:02B8F0B4 addi r3, r1, 0x48+var_40
.text:02B8F0B8 bl GetInt__Q2_5sysdr8RandomXSFv # sysdr::RandomXS::GetInt((void))
.text:02B8F0BC srawi r0, r3, 3
.text:02B8F0C0 xor r0, r21, r0
.text:02B8F0C4 stb r0, 5(r24)
.text:02B8F0C8
.text:02B8F0C8 loc_2B8F0C8: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+124j
.text:02B8F0C8 addi r0, r26, 4
.text:02B8F0CC cmplwi r0, 4
.text:02B8F0D0 lbz r21, 6(r24)
.text:02B8F0D4 blt loc_2B8F0EC
.text:02B8F0D8 addi r3, r1, 0x48+var_40
.text:02B8F0DC bl GetInt__Q2_5sysdr8RandomXSFv # sysdr::RandomXS::GetInt((void))
.text:02B8F0E0 srawi r5, r3, 3
.text:02B8F0E4 xor r0, r21, r5
.text:02B8F0E8 stb r0, 6(r24)
.text:02B8F0EC
.text:02B8F0EC loc_2B8F0EC: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+148j
.text:02B8F0EC addi r0, r29, 4
.text:02B8F0F0 cmplwi r0, 4
.text:02B8F0F4 lbz r21, 7(r24)
.text:02B8F0F8 blt loc_2B8F110
.text:02B8F0FC addi r3, r1, 0x48+var_40
.text:02B8F100 bl GetInt__Q2_5sysdr8RandomXSFv # sysdr::RandomXS::GetInt((void))
.text:02B8F104 srawi r0, r3, 3
.text:02B8F108 xor r0, r21, r0
.text:02B8F10C stb r0, 7(r24)
.text:02B8F110
.text:02B8F110 loc_2B8F110: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+16Cj
.text:02B8F110 addi r25, r25, 8
.text:02B8F114 addi r26, r26, 8
.text:02B8F118 addi r29, r29, 8
.text:02B8F11C addic. r22, r22, -1
.text:02B8F120 addi r23, r23, 8
.text:02B8F124 addi r31, r31, 8
.text:02B8F128 bne loc_2B8EFFC
.text:02B8F12C
.text:02B8F12C loc_2B8F12C: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+58j
.text:02B8F12C clrlwi. r29, r27, 29
.text:02B8F130 ble loc_2B8F2C0
.text:02B8F134 addi r31, r23, -0x1C
.text:02B8F138
.text:02B8F138 loc_2B8F138: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+1D8j
.text:02B8F138 cmplwi r31, 4
.text:02B8F13C lbzx r21, r30, r23
.text:02B8F140 blt loc_2B8F158
.text:02B8F144 addi r3, r1, 0x48+var_40
.text:02B8F148 bl GetInt__Q2_5sysdr8RandomXSFv # sysdr::RandomXS::GetInt((void))
.text:02B8F14C srawi r0, r3, 3
.text:02B8F150 xor r0, r21, r0
.text:02B8F154 stbx r0, r30, r23
.text:02B8F158
.text:02B8F158 loc_2B8F158: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+1B4j
.text:02B8F158 addic. r29, r29, -1
.text:02B8F15C addi r31, r31, 1
.text:02B8F160 addi r23, r23, 1
.text:02B8F164 bne loc_2B8F138
.text:02B8F168 lha r0, 0x14(r30)
.text:02B8F16C cmpwi r0, 3
.text:02B8F170 addi r0, r30, 0x60
.text:02B8F174 blt loc_2B8F30C
.text:02B8F178 b loc_2B8F2D0
.text:02B8F17C # ---------------------------------------------------------------------------
.text:02B8F17C
.text:02B8F17C loc_2B8F17C: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+48j
.text:02B8F17C srwi. r31, r27, 2
.text:02B8F180 lwz r26, 0x1C(r30)
.text:02B8F184 li r25, 0
.text:02B8F188 beq loc_2B8F2BC
.text:02B8F18C srwi. r22, r31, 3
.text:02B8F190 ble loc_2B8F284
.text:02B8F194 addi r24, r30, -0x20
.text:02B8F198 slwi r23, r22, 3
.text:02B8F19C
.text:02B8F19C loc_2B8F19C: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+2F4j
.text:02B8F19C lwzu r21, 0x20(r24)
.text:02B8F1A0 addi r3, r1, 0x48+var_40
.text:02B8F1A4 bl GetInt__Q2_5sysdr8RandomXSFv # sysdr::RandomXS::GetInt((void))
.text:02B8F1A8 xor r0, r21, r3
.text:02B8F1AC lwz r21, 4(r24)
.text:02B8F1B0 xor r4, r0, r25
.text:02B8F1B4 extlwi r25, r3, 1,13
.text:02B8F1B8 addi r3, r1, 0x48+var_40
.text:02B8F1BC stw r4, 0(r24)
.text:02B8F1C0 bl GetInt__Q2_5sysdr8RandomXSFv # sysdr::RandomXS::GetInt((void))
.text:02B8F1C4 xor r5, r21, r3
.text:02B8F1C8 lwz r21, 8(r24)
.text:02B8F1CC xor r6, r5, r25
.text:02B8F1D0 extlwi r25, r3, 1,13
.text:02B8F1D4 addi r3, r1, 0x48+var_40
.text:02B8F1D8 stw r6, 4(r24)
.text:02B8F1DC bl GetInt__Q2_5sysdr8RandomXSFv # sysdr::RandomXS::GetInt((void))
.text:02B8F1E0 xor r7, r21, r3
.text:02B8F1E4 lwz r21, 0xC(r24)
.text:02B8F1E8 xor r8, r7, r25
.text:02B8F1EC extlwi r25, r3, 1,13
.text:02B8F1F0 addi r3, r1, 0x48+var_40
.text:02B8F1F4 stw r8, 8(r24)
.text:02B8F1F8 bl GetInt__Q2_5sysdr8RandomXSFv # sysdr::RandomXS::GetInt((void))
.text:02B8F1FC xor r9, r21, r3
.text:02B8F200 lwz r21, 0x10(r24)
.text:02B8F204 xor r10, r9, r25
.text:02B8F208 extlwi r25, r3, 1,13
.text:02B8F20C addi r3, r1, 0x48+var_40
.text:02B8F210 stw r10, 0xC(r24)
.text:02B8F214 bl GetInt__Q2_5sysdr8RandomXSFv # sysdr::RandomXS::GetInt((void))
.text:02B8F218 xor r0, r21, r3
.text:02B8F21C lwz r21, 0x14(r24)
.text:02B8F220 xor r0, r0, r25
.text:02B8F224 extlwi r25, r3, 1,13
.text:02B8F228 addi r3, r1, 0x48+var_40
.text:02B8F22C stw r0, 0x10(r24)
.text:02B8F230 bl GetInt__Q2_5sysdr8RandomXSFv # sysdr::RandomXS::GetInt((void))
.text:02B8F234 xor r0, r21, r3
.text:02B8F238 lwz r21, 0x18(r24)
.text:02B8F23C xor r4, r0, r25
.text:02B8F240 extlwi r25, r3, 1,13
.text:02B8F244 addi r3, r1, 0x48+var_40
.text:02B8F248 stw r4, 0x14(r24)
.text:02B8F24C bl GetInt__Q2_5sysdr8RandomXSFv # sysdr::RandomXS::GetInt((void))
.text:02B8F250 xor r6, r21, r3
.text:02B8F254 lwz r21, 0x1C(r24)
.text:02B8F258 xor r7, r6, r25
.text:02B8F25C extlwi r25, r3, 1,13
.text:02B8F260 addi r3, r1, 0x48+var_40
.text:02B8F264 stw r7, 0x18(r24)
.text:02B8F268 bl GetInt__Q2_5sysdr8RandomXSFv # sysdr::RandomXS::GetInt((void))
.text:02B8F26C xor r8, r21, r3
.text:02B8F270 xor r9, r8, r25
.text:02B8F274 extlwi r25, r3, 1,13
.text:02B8F278 addic. r22, r22, -1
.text:02B8F27C stw r9, 0x1C(r24)
.text:02B8F280 bne loc_2B8F19C
.text:02B8F284
.text:02B8F284 loc_2B8F284: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+204j
.text:02B8F284 clrlwi. r24, r31, 29
.text:02B8F288 ble loc_2B8F2BC
.text:02B8F28C slwi r10, r23, 2
.text:02B8F290 add r31, r30, r10
.text:02B8F294 addi r31, r31, -4
.text:02B8F298
.text:02B8F298 loc_2B8F298: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+32Cj
.text:02B8F298 lwzu r21, 4(r31)
.text:02B8F29C addi r3, r1, 0x48+var_40
.text:02B8F2A0 bl GetInt__Q2_5sysdr8RandomXSFv # sysdr::RandomXS::GetInt((void))
.text:02B8F2A4 xor r11, r21, r3
.text:02B8F2A8 addic. r24, r24, -1
.text:02B8F2AC xor r12, r11, r25
.text:02B8F2B0 extlwi r25, r3, 1,13
.text:02B8F2B4 stw r12, 0(r31)
.text:02B8F2B8 bne loc_2B8F298
.text:02B8F2BC
.text:02B8F2BC loc_2B8F2BC: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+1FCj
.text:02B8F2BC # sysdr::ResourcePackDecrypt((void *,uint))+2FCj
.text:02B8F2BC stw r26, 0x1C(r30)
.text:02B8F2C0
.text:02B8F2C0 loc_2B8F2C0: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+20j
.text:02B8F2C0 # sysdr::ResourcePackDecrypt((void *,uint))+50j ...
.text:02B8F2C0 lha r0, 0x14(r30)
.text:02B8F2C4 cmpwi r0, 3
.text:02B8F2C8 addi r0, r30, 0x60
.text:02B8F2CC blt loc_2B8F30C
.text:02B8F2D0
.text:02B8F2D0 loc_2B8F2D0: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+1ECj
.text:02B8F2D0 lbz r4, 0xA9(r30)
.text:02B8F2D4 cmpwi r4, 0
.text:02B8F2D8 bne loc_2B8F30C
.text:02B8F2DC addi r3, r30, 4
.text:02B8F2E0 addi r4, r27, -4
.text:02B8F2E4 bl crc32__Q2_5sysdr36__N_20_dr_resource_pack_cpp_483f2493FPCvUi
.text:02B8F2E8 lwz r5, 0(r30)
.text:02B8F2EC cmplw r3, r5
.text:02B8F2F0 beq loc_2B8F30C
.text:02B8F2F4
.text:02B8F2F4 loc_2B8F2F4: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+3A4j
.text:02B8F2F4 # sysdr::ResourcePackDecrypt((void *,uint))+3B8j ...
.text:02B8F2F4 lmw r21, 0x48+var_2C(r1)
.text:02B8F2F8 lwz r0, 0x48+arg_4(r1)
.text:02B8F2FC mtlr r0
.text:02B8F300 addi r1, r1, 0x48
.text:02B8F304 li r3, 0
.text:02B8F308 blr
.text:02B8F30C # ---------------------------------------------------------------------------
.text:02B8F30C
.text:02B8F30C loc_2B8F30C: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+1E8j
.text:02B8F30C # sysdr::ResourcePackDecrypt((void *,uint))+340j ...
.text:02B8F30C lha r3, 0x16(r30)
.text:02B8F310 cmpwi r3, 0
.text:02B8F314 mr r31, r0
.text:02B8F318 ble loc_2B8F3F0
.text:02B8F31C srwi. r9, r3, 3
.text:02B8F320 ble loc_2B8F3CC
.text:02B8F324 mtctr r9
.text:02B8F328
.text:02B8F328 loc_2B8F328: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+43Cj
.text:02B8F328 subf r6, r30, r31
.text:02B8F32C cmplw r6, r27
.text:02B8F330 bge loc_2B8F2F4
.text:02B8F334 lwz r7, 0x44(r31)
.text:02B8F338 add r31, r31, r7
.text:02B8F33C subf r8, r30, r31
.text:02B8F340 cmplw r8, r27
.text:02B8F344 bge loc_2B8F2F4
.text:02B8F348 lwz r9, 0x44(r31)
.text:02B8F34C add r31, r31, r9
.text:02B8F350 subf r10, r30, r31
.text:02B8F354 cmplw r10, r27
.text:02B8F358 bge loc_2B8F2F4
.text:02B8F35C lwz r11, 0x44(r31)
.text:02B8F360 add r31, r31, r11
.text:02B8F364 subf r12, r30, r31
.text:02B8F368 cmplw r12, r27
.text:02B8F36C bge loc_2B8F2F4
.text:02B8F370 lwz r0, 0x44(r31)
.text:02B8F374 add r31, r31, r0
.text:02B8F378 subf r4, r30, r31
.text:02B8F37C cmplw r4, r27
.text:02B8F380 bge loc_2B8F2F4
.text:02B8F384 lwz r5, 0x44(r31)
.text:02B8F388 add r31, r31, r5
.text:02B8F38C subf r6, r30, r31
.text:02B8F390 cmplw r6, r27
.text:02B8F394 bge loc_2B8F2F4
.text:02B8F398 lwz r7, 0x44(r31)
.text:02B8F39C add r31, r31, r7
.text:02B8F3A0 subf r8, r30, r31
.text:02B8F3A4 cmplw r8, r27
.text:02B8F3A8 bge loc_2B8F2F4
.text:02B8F3AC lwz r9, 0x44(r31)
.text:02B8F3B0 add r31, r31, r9
.text:02B8F3B4 subf r10, r30, r31
.text:02B8F3B8 cmplw r10, r27
.text:02B8F3BC bge loc_2B8F2F4
.text:02B8F3C0 lwz r11, 0x44(r31)
.text:02B8F3C4 add r31, r31, r11
.text:02B8F3C8 bdnz loc_2B8F328
.text:02B8F3CC
.text:02B8F3CC loc_2B8F3CC: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+394j
.text:02B8F3CC clrlwi. r0, r3, 29
.text:02B8F3D0 ble loc_2B8F3F0
.text:02B8F3D4 mtctr r0
.text:02B8F3D8
.text:02B8F3D8 loc_2B8F3D8: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+460j
.text:02B8F3D8 subf r12, r30, r31
.text:02B8F3DC cmplw r12, r27
.text:02B8F3E0 bge loc_2B8F2F4
.text:02B8F3E4 lwz r0, 0x44(r31)
.text:02B8F3E8 add r31, r31, r0
.text:02B8F3EC bdnz loc_2B8F3D8
.text:02B8F3F0
.text:02B8F3F0 loc_2B8F3F0: # CODE XREF: sysdr::ResourcePackDecrypt((void *,uint))+38Cj
.text:02B8F3F0 # sysdr::ResourcePackDecrypt((void *,uint))+444j
.text:02B8F3F0 lmw r21, 0x48+var_2C(r1)
.text:02B8F3F4 lwz r0, 0x48+arg_4(r1)
.text:02B8F3F8 mtlr r0
.text:02B8F3FC addi r1, r1, 0x48
.text:02B8F400 li r3, 1
.text:02B8F404 blr
.text:02B8F404 # End of function sysdr::ResourcePackDecrypt((void *,uint))
.text:02B8F404
.text:02B8F408
RE: Ripping from Pokkén Tournament - Tiberious - 04-13-2016
Oh man... if you can get the key from that, you're a freakin' BOSS. I -really- like Bandai-Namco's more realistic take on some of the characters (Lucario's ears...), so being able to decrypt these files and get at the meshy goodness within is something I'd love to see. Plus, those alternate colors (so long as we can get rid of those stupid bands on the textures) would be pretty cool to have too.
RE: Ripping from Pokkén Tournament - CHEMI6DER - 04-14-2016
(04-13-2016, 07:14 AM)Tiberious Wrote: Oh man... if you can get the key from that, you're a freakin' BOSS. I -really- like Bandai-Namco's more realistic take on some of the characters (Lucario's ears...), so being able to decrypt these files and get at the meshy goodness within is something I'd love to see. Plus, those alternate colors (so long as we can get rid of those stupid bands on the textures) would be pretty cool to have too.
I'd like to, but theres one problem...I suck at programming and I don't know where to find the actual key. I'l ask on GbaTemp because here are many people who know how can help me with that. But if I'l find somethig I'l post it in this thread.
RE: Ripping from Pokkén Tournament - Demonslayerx8 - 04-29-2016
anything new yet for this game?
RE: Ripping from Pokkén Tournament - sammi-husky@live.com - 05-09-2016
(04-07-2016, 11:14 AM)Random Talking Bush Wrote: It's pretty much impossible to get at them, everything in the game has a second layer of encryption on it. Won't be possible until someone finds the correct AES key in the game's coding, which could take a long time.
Me and Dantarion were able to Reverse engineer this encryption algorithm. I'll put up a decrypter and possibly an extractor in a few days, if dant doesnt beat me to it Source code included of course.
RE: Ripping from Pokkén Tournament - nobody231 - 05-09-2016
(05-09-2016, 01:44 AM)sammi-husky@live.com Wrote: (04-07-2016, 11:14 AM)Random Talking Bush Wrote: It's pretty much impossible to get at them, everything in the game has a second layer of encryption on it. Won't be possible until someone finds the correct AES key in the game's coding, which could take a long time.
Me and Dantarion were able to Reverse engineer this encryption algorithm. I'll put up a decrypter and possibly an extractor in a few days, if dant doesnt beat me to it Source code included of course.
So... um... How do we know you're not lying? I mean, you've only been on the forums since yesterday.
RE: Ripping from Pokkén Tournament - Random Talking Bush - 05-09-2016
(05-09-2016, 09:26 PM)nobody231 Wrote: (05-09-2016, 01:44 AM)sammi-husky@live.com Wrote: (04-07-2016, 11:14 AM)Random Talking Bush Wrote: It's pretty much impossible to get at them, everything in the game has a second layer of encryption on it. Won't be possible until someone finds the correct AES key in the game's coding, which could take a long time.
Me and Dantarion were able to Reverse engineer this encryption algorithm. I'll put up a decrypter and possibly an extractor in a few days, if dant doesnt beat me to it Source code included of course.
So... um... How do we know you're not lying? I mean, you've only been on the forums since yesterday. He and Dantarion are well-known in the Smash hacking community.
RE: Ripping from Pokkén Tournament - nobody231 - 05-10-2016
(05-09-2016, 10:04 PM)Random Talking Bush Wrote: (05-09-2016, 09:26 PM)nobody231 Wrote: (05-09-2016, 01:44 AM)sammi-husky@live.com Wrote: Me and Dantarion were able to Reverse engineer this encryption algorithm. I'll put up a decrypter and possibly an extractor in a few days, if dant doesnt beat me to it Source code included of course.
So... um... How do we know you're not lying? I mean, you've only been on the forums since yesterday. He and Dantarion are well-known in the Smash hacking community.
oh
errors have been made
Thanks for correcting me! I kinda know almost nothing about the Smash hacking community.
RE: Ripping from Pokkén Tournament - sammi-husky@live.com - 05-11-2016
https://github.com/Sammi-Husky/Pokken-Tools/releases
There we go. It's not 100% tested yet, so if any files don't decrypt properly let me know. I'll be adding future features like decrypting all files in a directory or something later. Also remember this is a decrypter not an extractor! that may or may not come later
RE: Ripping from Pokkén Tournament - Random Talking Bush - 05-12-2016
Looks like it's working fine now! I'll letcha know if I find anything that doesn't unpack correctly, after I've written a QuickBMS script to decompress/unpack the decrypted files.
(EDIT: Here's the script! I was able to unpack the contents of every single file with this, so I'd say the decryption program works perfectly!)
(EDIT 2: And here's a work-in-progress texture-conversion script, which'll convert the images directly to DDS -- there's no GTX formatting in this game! Currently works with DXT1 and DXT5 images only.)
|