Skip to content
View in the app

A better way to browse. Learn more.

ResHax

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Help us keep the site running.

Gundam Battle: Gunpla Warfare .arc (Android)

Featured Replies

  • Author
  • Localization

aluigi, posted Thu Sep 26, 2019 10:38 am (50908)


The DFL file only contains the list of files in the archive folder.
The arc files are archives, "ARCC" header, but their content seems obfuscated probably with blowfish.
Don't have ways to know key/algorithm without working on the game (I can't now).
  • Author
  • Localization

ral7b, posted Mon Dec 23, 2019 3:34 pm (52754)


the ch folder might contain the mobile suits since the game wiki has pics of each suit & the image has the same file name as the files in ch folder.

i like the shop & mission bgm. thanks for uploading them
  • Author
  • Localization

Pentium, posted Wed Dec 02, 2020 11:31 am (60857)


aluigi wrote:
The DFL file only contains the list of files in the archive folder.
The arc files are archives, "ARCC" header, but their content seems obfuscated probably with blowfish.
Don't have ways to know key/algorithm without working on the game (I can't now).

Can you please look at this now? Or at least put in plans for the future? =)
  • Author
  • Localization

chrrox, posted Wed Dec 02, 2020 12:36 pm (60858)


Possible code for blowfish.
https://pastebin.com/JpMQy4DA

Code:
/* rJson::load(MtStream&) */

bool __thiscall rJson::load(rJson *this,MtStream *param_1)

{
  uint uVar1;
  uchar *puVar2;
  uchar *puVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  bool bVar7;
  MtDataReader aMStack1240 [24];
  MtMemoryStream aMStack1216 [24];
  MtDataReader aMStack1192 [4];
  int *local_4a4;
  MtDataWriter aMStack1168 [808];
  MtCipher aMStack360 [320];
  int iStack40;
 
  iStack40 = (int)__stack_chk_guard;
  MtDataReader::MtDataReader(aMStack1192,param_1,0x1000);
  uVar1 = (**(code **)(*local_4a4 0x48))();
  puVar2 = (uchar *)(**(code **)(**(int **)(MtMemory::mpInstance 0x128) 0x1c))
                              (*(int **)(MtMemory::mpInstance 0x128),uVar1,0x10);
  puVar3 = (uchar *)(**(code **)(**(int **)(MtMemory::mpInstance 0x128) 0x1c))
                              (*(int **)(MtMemory::mpInstance 0x128),uVar1 0x400,0x10);
  MtDataReader::read(aMStack1192,puVar2,uVar1);
  MtCipher::MtCipher(aMStack360);
  MtCipher::setKeyString(aMStack360,"VMmpt7L9vQE8");
  MtCipher::initializeBF(aMStack360);
  MtCipher::decryptBF(aMStack360,puVar2,puVar3,uVar1);
  MtMemoryStream::MtMemoryStream(aMStack1216,puVar3,uVar1,3);
  MtDataReader::MtDataReader(aMStack1240,(MtStream *)aMStack1216,0x1000);
  iVar4 = MtDataReader::readU32(aMStack1240);
  iVar5 = MtDataReader::readU32(aMStack1240);
  MtDataReader::readU32(aMStack1240);
  if (iVar4 == 0x4e4f534a) {
    MtDataWriter::MtDataWriter(aMStack1168,(MtStream *)aMStack1216,uVar1,0x1000);
    *(undefined4 *)(puVar3 4) = 0;
    iVar4 = MtCRC::getCRC(puVar3,uVar1,0xffffffff);
    if (iVar4 != iVar5) {
      MtDebug::crashLog((MtDebug *)MtDebug::mInstance,
                                               
                        "C:\\app\\jenkins\\workspace\\guns_android_na\\BNE\\client\\App\\AndroidGUNSBoot\\guns\\src\\resource\\json\\rJson.cpp"
                        ,0x9d,"E",&DAT_01380819);
    }
    else {
      iVar6 = MtDataReader::getPosition(aMStack1240);
      MtString::operator=((MtString *)(this 0xa0),(char *)(puVar3 iVar6));
      (**(code **)(**(int **)(MtMemory::mpInstance 0x128) 0x28))
                (*(int **)(MtMemory::mpInstance 0x128),puVar2);
      (**(code **)(**(int **)(MtMemory::mpInstance 0x128) 0x28))
                (*(int **)(MtMemory::mpInstance 0x128),puVar3);
    }
    bVar7 = iVar4 == iVar5;
    MtDataWriter::~MtDataWriter(aMStack1168);
  }
  else {
    MtDebug::crashLog((MtDebug *)MtDebug::mInstance,
                                           
                      "C:\\app\\jenkins\\workspace\\guns_android_na\\BNE\\client\\App\\AndroidGUNSBoot\\guns\\src\\resource\\json\\rJson.cpp"
                      ,0x93,"E",&DAT_013807e1);
    bVar7 = false;
  }
  MtDataReader::~MtDataReader(aMStack1240);
  MtMemoryStream::~MtMemoryStream(aMStack1216);
  MtCipher::~MtCipher(aMStack360);
  MtDataReader::~MtDataReader(aMStack1192);
  if ((int)__stack_chk_guard != iStack40) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return bVar7;
}



Code:
/* MtCipher::MtCipher() */

MtCipher * __thiscall MtCipher::MtCipher(MtCipher *this)

{
  undefined4 uVar1;
  MtBigInt *this_00;
  MtBigInt *this_01;
  MtBigInt aMStack232 [64];
  MtBigInt aMStack168 [64];
  MtBigInt aMStack104 [68];
  int local_24;
 
  this_01 = (MtBigInt *)(this 0xc);
  local_24 = (int)__stack_chk_guard;
  this_00 = (MtBigInt *)(this 0x4c);
  *(undefined ***)this = &PTR_~MtCipher_01526180;
  MtBigInt::MtBigInt(this_01);
  MtBigInt::MtBigInt(this_00);
  MtBigInt::MtBigInt((MtBigInt *)(this 0x8c));
  MtBigInt::MtBigInt((MtBigInt *)(this 0xcc));
  setKeyString(this,"mofumofu capcom(^-^)");
  MtBigInt::MtBigInt(aMStack104,"0x0001bed0dbf11fc0420c3d83");
  __aeabi_memcpy(this_01,aMStack104,0x40);
  MtBigInt::MtBigInt(aMStack104,"0x000064aa206d48ff5be4a9c3");
  __aeabi_memcpy(this_00,aMStack104,0x40);
  MtBigInt::MtBigInt(aMStack104,"0x00026063");
  __aeabi_memcpy((MtBigInt *)(this 0xcc),aMStack104,0x40);
  MtBigInt::MtBigInt(aMStack168,this_00);
  MtBigInt::operator*(aMStack104,SUB41(this_01,0));
  __aeabi_memcpy((MtBigInt *)(this 0x8c),aMStack104,0x40);
  MtBigInt::MtBigInt(aMStack232,this_00);
  MtBigInt::operator*(aMStack104,SUB41(this_01,0));
  uVar1 = MtBigInt::getUsedByteSize(aMStack104);
  *(undefined4 *)(this 0x10c) = uVar1;
  *(undefined4 *)(this 0x110) = 0;
  *(undefined4 *)(this 0x114) = 0;
  if ((int)__stack_chk_guard != local_24) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return this;
}
  • Author
  • Localization

Pentium, posted Wed Dec 02, 2020 12:39 pm (60859)


chrrox wrote:
Possible code for blowfish.
[/code]

One guy actually told me, that this could be xored encrypted
  • Author
  • Localization

chrrox, posted Wed Dec 02, 2020 12:44 pm (60860)


You can try following this code
https://gitlab.com/svanheulen/mhff/-/bl ... ds/arcc.py
or info on this post
viewtopic.php?t=1684


Code:
cQuickSortFilter * __thiscall cQuickSortFilter::cQuickSortFilter(cQuickSortFilter *this)

{
  undefined4 *puVar1;
  int iVar2;
 
  cQuickSavedata::cQuickSavedata((cQuickSavedata *)this,"PCr7RXW09R2rRmDy",10);
  iVar2 = 0x27;
  puVar1 = (undefined4 *)(this 0x10);
  *(undefined ***)this = &PTR_~cQuickSortFilter_014eba34;
  do {
    puVar1[-1] = &PTR_~FilterData_014eba84;
    *puVar1 = 0;
    puVar1[1] = 0;
    puVar1[2] = &PTR_~MtObject_014ebab0;
    __aeabi_memclr4(puVar1 3,0x6c);
    iVar2 = iVar2 -1;
    puVar1 = puVar1 0x1f;
  } while (iVar2 != 0);
  initDefaultSort(this);
  initDefaultFilter(this);
  *(uint *)(this 0x98) = *(uint *)(this 0x98) | 1;
  *(uint *)(this 0x114) = *(uint *)(this 0x114) | 1;
  *(uint *)(this 0x950) = *(uint *)(this 0x950) | 1;
  cQuickSavedata::load((cQuickSavedata *)this);
  return this;
}


cQuickSortFilter * __thiscall cQuickSortFilter::cQuickSortFilter(cQuickSortFilter *this)

{
  undefined4 *puVar1;
  int iVar2;
 
  cQuickSavedata::cQuickSavedata((cQuickSavedata *)this,"PCr7RXW09R2rRmDy",10);
  iVar2 = 0x27;
  puVar1 = (undefined4 *)(this 0x10);
  *(undefined ***)this = &PTR_~cQuickSortFilter_014eba34;
  do {
    puVar1[-1] = &PTR_~FilterData_014eba84;
    *puVar1 = 0;
    puVar1[1] = 0;
    puVar1[2] = &PTR_~MtObject_014ebab0;
    __aeabi_memclr4(puVar1 3,0x6c);
    iVar2 = iVar2 -1;
    puVar1 = puVar1 0x1f;
  } while (iVar2 != 0);
  initDefaultSort(this);
  initDefaultFilter(this);
  *(uint *)(this 0x98) = *(uint *)(this 0x98) | 1;
  *(uint *)(this 0x114) = *(uint *)(this 0x114) | 1;
  *(uint *)(this 0x950) = *(uint *)(this 0x950) | 1;
  cQuickSavedata::load((cQuickSavedata *)this);
  return this;
}
  • Author
  • Localization

Pentium, posted Wed Dec 02, 2020 6:15 pm (60867)


chrrox wrote:
You can try following this code
https://gitlab.com/svanheulen/mhff/-/bl ... ds/arcc.py
or info on this post
viewtopic.php?t=1684

?I?'?m? ?a? ?n?o?o?b? ?l?i?k?e? ?a? ?c?o?o?k? ?w?h?o? ?i?s? ?t?r?y?i?n?g? ?t?o? ?a?s?s?e?m?b?l?e? ?a? ?n?u?c?l?e?a?r? ?r?e?a?c?t?o?r?,? ?c?a?n? ?y?o?u? ?e?x?p?l?a?i?n? ?i?n? ?m?o?r?e? ?d?e?t?a?i?l? ?w?h?a?t? ?n?e?e?d?s? ?t?o? ?b?e? ?d?o?n?e? ?w?i?t?h? ?t?h?i?s?,? ?i?f? ?i?t?'?s? ?n?o?t? ?d?i?f?f?i?c?u?l?t? ?f?o?r? ?y?o?u??? ?I? ?u?n?d?e?r?s?t?a?n?d? ?a?b?o?u?t? ?m?t?m?o?b?i?l?e?-?t?o?o?l?s? ?a?n?d? ? ?a?r?c?c?.?p?y?,? ?b?u?t? ?d?o?n?'?t? ?k?n?o?w? ?h?o?w? ?t?o? ?r?u?n? ?t?h?e?m?.?

Edit. Maybe I'm completely noob, but I think tools and scripts for capcom .arc are not suitable for banco .arc
  • Author
  • Localization

Pentium, posted Fri Dec 04, 2020 9:33 am (60895)


Well, game have same engine as kamen rider city wars, and according to this thread viewtopic.php?t=5153 it is impossible to extract.
Gundam breaker btw have ARC archives, instead of using zips with nonextractable models.
Maybe they used archives with blowfish instead of nonextractable models to simplify work for developers to update the game, I don't know.
For now I lost all motivation, good luck to those who will try to encript this. I'll keep the files on gdrive.
  • Author
  • Localization

Pentium, posted Fri Feb 03, 2023 7:17 pm (75279)


Trying to bring some attention here, will try again on the files but I'm still quite bad at it.
A few samples. All files.

Newer samples. Please, someone, look into it.
Guest
This topic is now closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.