[Hack] IPSwitch

IPSwitch

移植はIDAかGHIDRAを使います。

タダなのでGHIDRAがお手軽で便利、オフセットはめんどくさいけれど。

Code

まだコード化してないので該当箇所っぽいところのバイナリを載せます。

メモみたいな感じなので、これを使ってみんななんとかしてくれ!!

ちなみにIPSwitch形式のアドレスに変換してあるのでGHIDRAでサーチする場合はアドレスをズラしてください。

多分このへんは4.6.1か4.5.0あたりのコード。

SpecialCost

loc_856A0 LDR X1, [SP,#0x6C0+var_660] ADRP X2, #aSpecialcost@PAGE ; “SpecialCost” SUB X0, X29, #-var_C8 ADD X2, X2, #aSpecialcost@PAGEOFF ; “SpecialCost” STR X19, [SP,#0x6C0+var_468] BL sub_19912E0 ADRP X2, #aLock@PAGE ; “Lock” SUB X0, X29, #-var_C8 ADD X1, SP, #0x6C0+var_468 ADD X2, X2, #aLock@PAGEOFF ; “Lock” STR WZR, [SP,#0x6C0+var_26C] BL sub_1991178 MOV W22, WZR

InkConsume

loc_13B1D20 MOV W8, #0x12D0 ADD X20, X19, X8 ADRP X8, #aMinkconsumeCoo@PAGE ; “mInkConsume_Coop” ADD X8, X8, #aMinkconsumeCoo@PAGEOFF ; “mInkConsume_Coop” STR X8, [X19,#0x12E0] ADD X8, X21, #0x10 STR X8, [X19,#0x12D0] LDR X8, [X19] STR XZR, [X19,#0x12D8] STR WZR, [X19,#0x12F8] STR XZR, [X19,#0x12F0] STR XZR, [X19,#0x12E8] LDR X8, [X8,#0x128] MOV X0, X19 MOV X1, X20 BLR X8 LDR X8, [X19,#0x12D0] LDR X8, [X8,#0xD8] LDR W24, [X19,#0x12F8] MOV X0, X20 BLR X8 TBNZ W24, #9, loc_13B1E54

App Version

loc_95A28 MOV W10, #0xC MADD X10, X20, X10, XZR LDR W8, [X19,#8] LDR X9, [X19,#0x10] ADD X10, X9, X10 CMP X8, X20 CSEL X24, X10, X9, HI ADRP X2, #aAppversion@PAGE ; “AppVersion” ADD X0, SP, #0xA0+var_70 MOV X1, X24 ADD X2, X2, #aAppversion@PAGEOFF ; “AppVersion” BL sub_19912E0

3.1.0

LocalDifficulty

sub_E5110 CMP W0, #0x63 MOV W8, #5 MOV W9, #0xA CSEL W8, W9, W8, GT MOV W9, #0xC8 ADD W8, W8, W0 CMP W8, #0xC8 CSEL W8, W9, W8, GT TST W1, #1 CSEL W0, W0, W8, EQ RET
__int64 __fastcall Cmn::Def::Coop::UpdateLocalDifficulty(__int64 result, char a2)
{
  signed int v2; // w8
  signed int v3; // w8

  if ( (signed int)result <= 99 )
    v2 = 5;
  else
    v2 = 10;
  v3 = v2 + result;
  if ( v3 > 200 )
    v3 = 200;
  if ( a2 &amp; 1 )
    result = (unsigned int)v3;
  else
    result = (unsigned int)result;
  return result;
}

Tank

// starts at 35DB8 SUB SP, SP, #0x20 STP X29, X30, [SP,#0x10+var_s0] ADD X29, SP, #0x10 ADRP X8, #off_4155FD0@PAGE LDR X8, [X8,#off_4155FD0@PAGEOFF] ADD X8, X8, #0x10 STR X8, [SP,#0x10+var_10] ADRP X8, #aTnkCoop@PAGE ; “Tnk_Coop” ADD X8, X8, #aTnkCoop@PAGEOFF ; “Tnk_Coop” MOV X1, SP STR X8, [SP,#0x10+var_8] BL _ZNK3Cmn12MushTankInfo12searchByNameERKN4sead14SafeStringBaseIcEE ; Cmn::MushTankInfo::searchByName(sead::SafeStringBase const&) LDR W0, [X0] LDP X29, X30, [SP,#0x10+var_s0] ADD SP, SP, #0x20 RET

Costume

// starts at A4390 STR X23, [SP,#-0x10+var_30]! STP X22, X21, [SP,#0x30+var_20] STP X20, X19, [SP,#0x30+var_10] STP X29, X30, [SP,#0x30+var_s0] ADD X29, SP, #0x30 ADRP X21, #off_41565A8@PAGE LDR X21, [X21,#off_41565A8@PAGEOFF] LDR X8, [X21] ; Cmn::MushDataHolder::sInstance MOV X19, X0 LDR X0, [X8,#0x38] MOV X20, X1 AND X23, X20, #0xFFFFFFFF MOV X1, X23 BL _ZNK3Cmn12MushGearInfo19searchIdCoopUniformENS_3Def8GearKindEi ; Cmn::MushGearInfo::searchIdCoopUniform(Cmn::Def::GearKind,int) LDR X8, [X21] ; Cmn::MushDataHolder::sInstance LDR X21, [X8,#0x38] MOV W22, W0 MOV X0, X21 MOV X1, X23 MOV W2, W22 BL _ZNK3Cmn20MushInfoWithKindBaseINS_8GearDataENS_3Def8GearKindEE7getByIdES3_i ; Cmn::MushInfoWithKindBase::getById(Cmn::Def::GearKind,int) CBNZ X0, loc_A4430

Packet

// starts at 208D1C MOV W8, #2 STRB W8, [X0] ADD X8, X0, #0x14 STRB WZR, [X0,#0x11] MOV W2, #0x54 STUR XZR, [X0,#9] STUR XZR, [X0,#1] MOV X0, X8 MOV W1, WZR B .memset
{
  *(_BYTE *)this = 2;
  *((_BYTE *)this + 17) = 0;
  *(_QWORD *)((char *)this + 9) = 0LL;
  *(_QWORD *)((char *)this + 1) = 0LL;
  return memset((char *)this + 20, 0LL, 84LL);
}

GotIkura

タマヒロイが金イクラを回収していく挙動の関数。

// starts at 4F236C LDR W8, [X0,#0x9D4] ADD W8, W8, W1 STR W8, [X0,#0x9D4] CMP W1, #1 B.LT locret_4F23AC SUB SP, SP, #0x20 STP X29, X30, [SP,#0x20+var_10] ADD X29, SP, #0x20+var_10 LDR X0, [X0,#0x320] ; this ADRP X1, #aGotikura@PAGE ; “GotIkura” ADD X1, X1, #aGotikura@PAGEOFF ; “GotIkura” MOV X8, SP MOV W2, WZR ; bool BL _ZN2Lp3Sys5XLink13searchAndPlayEPKcb ; Lp::Sys::XLink::searchAndPlay(char const*,bool) LDP X29, X30, [SP,#0x20+var_10] ADD SP, SP, #0x20 locret_4F23AC RET

Report

// starts at 5A7C68 ADRP X9, #off_4155FD0@PAGE LDR X9, [X9,#off_4155FD0@PAGEOFF] ADRP X10, #aCoopLocalResul@PAGE ; “coop_local_result_event” ADD X10, X10, #aCoopLocalResul@PAGEOFF ; “coop_local_result_event” ADD X9, X9, #0x10 STP X9, X10, [X8] RET

まとめ

4.7.0向けに7つほどコード移植したんですけど、公開したほうがいいですか?

公開されているコードを移植しただけなので、勝手に公開するつもりではないです悪しからず。