bird [1792] <Error>: setting error: <NSError: 0x15df7ba0 (BRCloudDocsErrorDomain: 5) - { NSDescription = "No document at URL"; NSFilePath = "/ private / var / mobile / Library / Mobile Documents / JZKSZCX743 ~ com ~ square-enix ~ tact / oks_savedata.bin"; NSUnderlyingError = "<NSError: 0x15df7b60 (NSPOSIXErrorDomain: 2) - {\ n NSDescription = \" No such file or directory \ "; \ n}>"; }>
touch "/ private / var / mobile / Library / Mobile Documents / JZKSZCX743 ~ com ~ square-enix ~ tact / oks_savedata.bin"
find / private / var -name oks_savedata.bin /private/var/mobile/Containers/Data/Application/long-uuid/Documents/oks_savedata.bin / private / var / mobile / Library / Mobile Documents / JZKSZCX743 ~ com ~ square-enix ~ tact / oks_savedata.bin
jtool -h oks Fat binary, big-endian, 2 architectures: armv7, armv7s Specify one of these architectures with the environment switch
jtool --ent -arch armv7s oks Warning: companion file ./oks.ARM (unknown) .69981636-7F33-3C43-BD58-7F5BBE2A6CCA not found <! DOCTYPE plist PUBLIC "- // Apple // DTD PLIST 1.0 // EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version = "1.0"> <dict> <key> keychain-access-groups </ key> <array> <string> JZKSZCX743.com.square-enix.tact </ string> </ array> <key> com.apple.developer.ubiquity-container-identifiers </ key> <array> <string> JZKSZCX743.com.square-enix.tact </ string> </ array> <key> application-identifier </ key> <string> JZKSZCX743.com.square-enix.tacthd </ string> </ dict> </ plist>
jtool -d objc oks oksAppDelegate oksExtendView EAGLView oksViewController SeqLogo SeqTitle Sequence SeqMan Sprite SprMan SndOne SndMan SeqIngame DataOne DataMan TouchEff TouchOne KeyMan ChartObj ResultIconOne ResultIcon Gakudan ChobjEndEffOne ChobjEndEff FadeMan NumberSpr SeqResult MenuStatus PopUp SeqMainMenu SeqStory SptMan SptCharaOne SptChara SptMsgLog SptMsg SptBg SptStill SptCol SptShake SptSnd SeqSelConcert MenuCmnBtn OnpuEffOne OnpuEff SelStoryChap SelStoryLine SeqSelStory StaffData SeqStaffRoll MusicStill SeqMusic MenuOption SeqDownload MyStoreObserver Tutorial FontMan VerificationController Reachability
jtool -d SelStoryChap -arch armv7s oks Warning: companion file ./oks.ARM (unknown) .69981636-7F33-3C43-BD58-7F5BBE2A6CCA not found // Dumping class 45 (SelStoryChap) @interface SelStoryChap: CoreFoundation :: _ OBJC_METACLASS _ $ _ NSObject // No properties .. // 11 instance variables / * 0 * / unsigned int flag; // I / * 1 * / int storyId; // i / * 2 * / int prio; // i / * 3 * / float oriPosx; // f / * 4 * / float oriPosy; // f / * 5 * / float posx; // f / * 6 * / float posy; // f / * 7 * / float plate_w_2; // f / * 8 * / float plate_h_2; // f / * 9 * / sprAry; // ^ @ / * 10 * / int sprNum; // i // 25 instance methods / * 0 * / 0x38f01 - isUnlock; // Protocol c8 @ 0: 4 / * 1 * / 0x38f15 - isHave; // Protocol c8 @ 0: 4 / * 2 * / 0x38f29 - canPlay; // Protocol c8 @ 0: 4 / * 3 * / 0x38f3d - canSelect; // Protocol c8 @ 0: 4 / * 4 * / 0x38f81 - isTouch; // Protocol c8 @ 0: 4 / * 5 * / 0x38fd5 - plateTye; // Protocol i8 @ 0: 4 / * 6 * / 0x3900d - isKeyDisp; // Protocol c8 @ 0: 4 / * 7 * / 0x39031 - isPlayingDisp; // Protocol c8 @ 0: 4 / * 8 * / 0x39045 - isChapTitleDisp; // Protocol c8 @ 0: 4 / * 9 * / 0x39085 - alpha; // Protocol f8 @ 0: 4 / * 10 * / 0x390d9 - isDisp; // Protocol c8 @ 0: 4 / * 11 * / 0x39135 - clear; // Protocol v8 @ 0: 4 / * 12 * / 0x391d5 - reset; // Protocol v8 @ 0: 4 / * 13 * / 0x392a5 - load; // Protocol v8 @ 0: 4 / * 14 * / 0x396d1 - initWithPrio :; // Protocol @ 12 @ 0: 4i8 / * 15 * / 0x39725 - dealloc; // Protocol v8 @ 0: 4 / * 16 * / 0x397a1 - setStoryId :; // Protocol v12 @ 0: 4i8 / * 17 * / 0x39859 - updatePos; // Protocol v8 @ 0: 4 / * 18 * / 0x3991d - setOriPos: y :; // Protocol v16 @ 0: 4f8f12 / * 19 * / 0x3994d - setOfstPos: y :; // Protocol v16 @ 0: 4f8f12 / * 20 * / 0x3996d - setDisp :; // Protocol v12 @ 0: 4c8 / * 21 * / 0x39aa1 - startSelEff; // Protocol v8 @ 0: 4 / * 22 * / 0x39c7d - storyId; // Protocol i8 @ 0: 4 / * 23 * / 0x39c8d - posx; // Protocol f8 @ 0: 4 / * 24 * / 0x39c9d - posy; // Protocol f8 @ 0: 4 @end
char __cdecl -[SelStoryChap isHave](struct SelStoryChap *self, SEL a2) { return (self->flag >> 1) & 1; } char __cdecl -[SelStoryChap isUnlock](struct SelStoryChap *self, SEL a2) { return (self->flag >> 2) & 1; }
// SelStoryChap - (void)setStoryId:(int) void __cdecl -[SelStoryChap setStoryId:](struct SelStoryChap *self, SEL a2, int story_id) { self->storyId = story_id; self->flag &= 0xFFFFFF80; if ( checkStoryFlag1(self->storyId) ) self->flag |= 1u; if ( checkStoryFlag2(self->storyId) ) // isHave self->flag |= 2u; if ( checkStoryFlag4(self->storyId) ) // isUnlock self->flag |= 4u; ... }
int __fastcall checkStoryFlag2(int a1) { return checkStoryStatus(a1, dword_7D84C); } signed int __fastcall inRange(int value, int start, int end) { signed int result; // r0@1 result = 0; if ( start <= value && value <= end ) result = 1; return result; } signed int __cdecl checkStoryStatus(int story_id, int *table) { signed int ret; // r4@1 ret = 0; if ( table ) { ret = 0; if ( inRange(story_id, 0, 63) ) { ret = 0; if ( sub_xxxx(global_entry1, story_id, table, 's') ) { if ( !memcmp(global_entry1, &table[8 * story_id + 6], 0x20u) ) ret = 1; } } } return ret; }
v3 = 0; memset(self->ctrl_music_idx, 0, 0x200u); v1 = 0; self->music_max = 0; do { if ( sub_36C24(v1) ) self->ctrl_music_idx[v3++] = v1; ++v1; } while ( v1 != 128 ); self->music_max = v3;
i = 0; memset(self->ctrl_music_idx, 0, 0x200u); track_id = 0; self->music_max = 0; do { if ( trackCheckingFunction(track_id) ) self->ctrl_music_idx[i++] = track_id; ++track_id; } while ( track_id != 128 ); self->music_max = i;
signed int __fastcall trackCheckingFunction(int track) { signed int ret; // r5@1 int lvl; // r6@4 char open; // r0@6 ret = 0; if ( inRange(track, 0, 127) ) // { ret = 0; if ( trackExists2(track) ) // { ret = 0; if ( checkTrackStatus(track, dword_7D84C) ) // { lvl = 1; do { ret = 0; if ( lvl > 4 ) break; open = checkTrackPassedLevel(track, lvl++); // ret = 1; } while ( !open ); } } } return ret; }
BOOL __fastcall isEntryAvailble(int *table, signed int index) { return (table[index >> 5] & (1 << (index & 0x1F))) != 0; } // - ... signed int __fastcall checkTrackStatus(int track, int *table) { signed int ret; // r4@1 ret = 0; if ( table ) { ret = 0; if ( inRange(track, 0, 127) ) { ret = 0; if ( loadEntryHash(hash, track, table, 'm') ) { if ( !memcmp(hash, &table[8 * track + 522], 0x20u) ) ret = 1; } } } return ret; } BOOL __fastcall checkTrackPassedLevel(int track, int level) { BOOL ret; // r6@1 ret = 0; if ( inRange(track, 0, 127) ) { ret = 0; if ( inRange(level, 1, 4) ) { ret = 0; if ( checkTrackStatus(track, dword_7D84C) ) ret = isEntryAvailble(&track_status_list, level + 4 * track - 1); } } return ret; }
int *__fastcall sub_xxxx(int track) { int *result; // r0@1 result = inRange(track, 0, 127); if ( result ) { performLoadHashForTrack(track); sub_36EC0(track, 1); result = dword_7D84C; unk_7D860[0] |= 1u; } return result; }
/****************************************************************************** * wav-file : jupiter.mp3 * midi-file : jupiter.mid * create at 2012/8/17 20:54 ******************************************************************************/ //////////////// ヘッダ情報 //////////////// ST_CHDATA_HEAD s_chdata_head = { "OKCH", // 固定値"OKCH" 7 , // メジャーバージョン値(引き継ぎ不可更新) 1~ 0 , //マイナーバージョン値(引き継ぎ可更新) 0~ 294.40034f, // 曲尺 [秒] 625, // オブジェクト総数154.00015f, // 初期スクロールスピード[dot / sec] 154.00015f, // 初期BPM [beat / minutes] E_HAKU_2_4, // 初期拍子0, // (パディング用ダミー) 0, // (パディング用ダミー) 0, // (パディング用ダミー) 0, // (パディング用ダミー) 0, // (パディング用ダミー) 0, // (パディング用ダミー) 0, // (パディング用ダミー) 0, // (パディング用ダミー) 0, // (パディング用ダミー) }; //////////////// 本体データ //////////////// ST_CHOBJ_HAKU s_chdata_main_0000[] = { {E_CHOBJ_HAKU , 16 , 0.00000f , 0.00000f , E_HAKU_2_4}, }; ST_CHOBJ_BPM s_chdata_main_0001[] = { {E_CHOBJ_BPM , 20 , 0.00000f , 0.00000f , 120.00000f , 500000}, }; …
Source: https://habr.com/ru/post/303164/
All Articles