ããã©ãŒã§æžããããé »ç¹ã«ã²ãŒã ããã¬ã€ããããšãèªããªããã°ãªããŸããããããªãºãã«ã«ãªããžã£ã³ã«ã«ã¯åžžã«äžå®ã®åŒ±ç¹ããããŸããã ãã€ãŠãç§ã¯Audiosurfãæ¬åœã«å¥œãã§ããããåŸã«ããã®ç°ãªãã¯ããŒã³ãBeat Hazardãosuã«åºäŒããŸããã ãã®åŸãApp Storeã§DeemoãšDuetã«åºäŒããããããããããã®æ¥œããæéãéãããŸããã

çµããã®ãªãç ãã¬å€ãããŸããŸãªå Žæã§ç ãã«ã€ããåã°ãç§ã¯èªåã®èå³ã®èŒªã®äžéšã§ãã
å°ããªããšã«æ°ã¥ããŸããã ç¡æããŠã³ããŒããããªãã¿ã®äŒç€Ÿããããããã¯ããããã®ææã³ã³ãã³ããããããšãæå³ããŸãã äžæ¹ã圌ãã¯ããããç¡æã§äœããããã§ãããã æãããªçµè«ãåºããŠãç§ã¯ã²ãŒã ãããŠã³ããŒãããŸãã...ãããŠãåŠå¥³ã®çœãç»é¢ãèŠãŸããã
ãã以äžã®è°è«ã¯ãã³ãŒãã倱ã£ãããæŽæ°ãèšé²ãããããªãã·ã£ãŒã®é倱ãåŒãèµ·ãããææ
ãæºãã¶ããã®ã§ã¯ãªããããããªçµ¶æã®ç¶æ³ã§æãã§ãããã®ãæã«å
¥ããããšã«ã€ããŠã§ãã
説æãèªãã§ãæã«ã¯ããã§ãããããã®ããããšã¯ã2ã€ã®ãã¥ãŒã¹ããããããŸããïŒ
- iOS 9ãšã®äºææ§ã¯ãããŸãããæªåé«ãçœãç»é¢ã衚瀺ãããŸãã
- ã²ãŒã ã¯ãµããŒããããªããªãã8æã«ã¹ãã¢ããåé€ãããŸããã¢ããªå
賌å
¥ã¯ã§ããŸããã
ãŽãŒãžã£ã¹ã ããããããã©ãããã©ãŒã ãx86ã§ã¯ãªããã²ãŒã ããããããªããªã©ã®çç±ã§ãå€ãã®äººã¯ãã®åŸæ€åããã§ãããïŒãã ããåŸã§ã¡ã«ããã¯ãæ¬åœã«å¥œãã§ãããïŒã ããããç§ã¯å人çãªin蟱ãåããç¿æãæ£è
ã蚺å¯ããããšã«ããŸããã
掻æ§å
æåã®ã¹ãããã¯èŠãããšã§ãããã¢ã³ã¹ã¿ãŒã¯äœããèšé²ããŠããŸãããïŒ sshã§è¡ã£ãŠã
syslogã¢ãã¿ãªã³ã°ãéããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãã ããã«ç»é¢ã次ã®åœ¢åŒã®ã¡ãã»ãŒãžã§ãã£ã±ãã«ãªããŸãã
bird [1792] <ãšã©ãŒ>ïŒèšå®ãšã©ãŒïŒ<NSErrorïŒ0x15df7ba0ïŒBRCloudDocsErrorDomainïŒ5ïŒ-{
NSDescription = "URLã«ããã¥ã¡ã³ãããããŸãã";
NSFilePath = "/ private / var / mobile / Library / Mobile Documents / JZKSZCX743ãcomãsquare-enixãtact / oks_savedata.bin";
NSUnderlyingError = "<NSErrorïŒ0x15df7b60ïŒNSPOSIXErrorDomainïŒ2ïŒ-{\ n NSDescription = \"ãã®ãããªãã¡ã€ã«ãŸãã¯ãã£ã¬ã¯ããªã¯ãããŸãã\ "; \ n}>";
}>
ãã£ãšããã«ãºã¢ã€ã iOS 9ã¯iCloudã®ããã¡ããå£ããäœããã®çç±ã§ä¿åãšèšå®ã®ãããã¡ã€ã«ã¯äœæããããèµ·åã¯ç¡éã«ãŒãã«å
¥ããŸããã äœæããŠã¿ãŸãããã
touch "/ private / var / mobile / Library / Mobile Documents / JZKSZCX743ãcomãsquare-enixãtact / oks_savedata.bin"
ãããŠãããã0_oã€ã³ã¿ãŒãã§ãŒã¹ã§ãã èœã¡çããç§ã¯ã¹ããŒãªãŒã«ç»ããåæã«ããããã©ã³ãã€ããŸããã ããã«ç§ã¯èŠãïŒãŸã äœããªãïŒïŒ

ãã¡ã€ã«ãäœããã®æ§é ãæã£ãŠããå¿
èŠãããããšã¯çè§£ã§ããŸãã ãã¡ã€ã«åã§ããã«æ€çŽ¢ãããšã次ã®2ã€ã®å Žæã«ç§»åããŸãã
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
ããããæ²ããããªãæåã®ãã¡ã€ã«èªäœã¯2çªç®ã®ãã¡ã€ã«ãªãã§ã¯äœæãããŸããã ãã£ãšæ·±ãããå¿
èŠããããŸãã
ã¢ããªã±ãŒã·ã§ã³ããã³ãããipaãè§£åããŸãïŒããã¯éåžžã®zipã§ãïŒãã¢ããªã±ãŒã·ã§ã³ãã³ãã«ã®å
容ã確èªããŸãã
- Info.plist
- PkgInfo
- ResourceRules.plist
- Shader.fsh
- Shader.vsh
- _CodeSignature
- archived-expanded-entitlements.xcent
- en.lproj
- ããããŸãã
- oks_icon_a.png
- oks_sqex copy-Info.plist
- oks_sqex.entitlements
- pre_build.sh
- ããã³ffdf8df97e7c9bcb7f42d1cc8ad09b08ãšãã圢åŒã®ååãæã€ä»ã®1,500åã®ãã¡ã€ã«ã
Info.plistã®
CFBundleExecutableã«ãããšãå®è¡å¯èœãã¡ã€ã«ã¯oksã2ã€ã®ã¢ãŒããã¯ãã£ãåãã
FAT binarã§ãã
jtool -h OK
ãã¡ãããã€ããªãããã°ãšã³ãã£ã¢ã³ã2ã¢ãŒããã¯ãã£ïŒarmv7ãarmv7s
-archã¹ã€ããã§ãããã®ã¢ãŒããã¯ãã£ã®ãããããæå®ããããARCHç°å¢å€æ°ããšã¯ã¹ããŒãããŸã
ã»ã
ãã¢ãŒã ãªã64ã ãŸããç§ã«ãšã£ãŠããã¯ããæå³ã§ãã©ã¹ã§ããiOSãšãã®ãã¥ãŒãã³ã®å¶éãããã«ã¯ã¢ãŒã ã®è©³çްãã-玹ä»ã«ãããããããç§ã®ãããã¯ã§ã¯ãªãããã§ãã ç§ã¯ããã§ãã£ãã«èµ°ããŸããããè¯ã人çããã§ã¯ãããŸããã iCloudã®æšæºã»ããã®ããã«ãè³æ Œã確èªããŸãã
Jtoolã®åºå jtool --ent -arch armv7s oks
èŠåïŒã³ã³ãããªã³ãã¡ã€ã«./oks.ARMïŒäžæïŒ.69981636-7F33-3C43-BD58-7F5BBE2A6CCAãèŠã€ãããŸãã
<ïŒ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>
<é
å>
<string> JZKSZCX743.com.square-enix.tact </ string>
</ array>
<key> com.apple.developer.ubiquity-container-identifiers </ key>
<é
å>
<string> JZKSZCX743.com.square-enix.tact </ string>
</ array>
<key>ã¢ããªã±ãŒã·ã§ã³èå¥å</ key>
<string> JZKSZCX743.com.square-enix.tacthd </ string>
</ dict>
</ plist>
ããã«èãã蚪ããŸãããããããå¿
èŠãã©ããã ãžã§ã€ã«ãã¬ã€ã¯ïŒå眲åïŒããã«ã¢ããªã±ãŒã·ã§ã³ãåŸã§ããã€ã¹ã«é
眮ãããšãiCloudã¯åäœããªããªããåäœããªãå Žåã¯ããã«åæãããå¯èœæ§ããããŸãã åæã«ãçªç¶åäœãå§ããŸããïŒ èšããã-å®äºïŒ
è³æ Œãæå®ããã«
èªå·±çœ²åèšŒææžã§å
眲å ïŒ
codesign -f -s mycert oks ïŒ
ãããšåæã«ãiTunesçµç±ã§ããã¯ã¢ãã
ããã¯ã¢ããã®ããã«
Info.plistã«UIFileSharingEnabledããããã£ã远å ãïŒãããŠçªç¶äŸ¿å©ã«ãªãïŒãã¢ããªã±ãŒã·ã§ã³ãipaã«ããã¯ããããã€ã¹ã«ã€ã³ã¹ããŒã«ããŸãã
ãæ³åã®ãšããããã®åŸæ°åéæºè¶³ããŠãã¬ã€ããŸããã ã©ãºããªãŒãã¢ããªå
賌å
¥ã«ãã£ãŠæ®é
·ã«ã«ãããããæåã®4ã€ã®ã¬ãã«ãééããçŽåã [ã¹ãã¢]ã»ã¯ã·ã§ã³ã«ç§»åãããšãäŸ¡æ Œãé«ãã ãã§ãªããäŸ¡æ Œãéåžžã«é«ãããšãããããŸãã ããŒã³ãã修埩ãããšãã«ã¹ãã¢ãå£ããã®ã¯ãæ¬åœã«ãããå Žåã§ãæ©èœããªãããã§ãã ãã®æãŸã§ã«ãç§ã¯ãã§ã«å
ã®IPAãåé€ããŠããã®ã§ãããŠã³ããŒãããããããŸããã§ããã ç§ã¯æããããŸããŸããç§ã¯ããã«inappsã«ããããé©çšããçµããã«å¯ŸåŠããŸãã
ãžã£ã³ãçªå·1ãä¿®æ£
Objective-Cã¯ã©ã¹ã®ãªã¹ãã調ã¹ãåé¡ã«é¢é£ãããã®ãæ¢ããŸãã
ã¯ã©ã¹ãªã¹ã jtool -dã«ObjC OKS oksAppDelegate oksExtendView EAGLView oksViewController SeqLogo SeqTitleã·ãŒã±ã³ã¹ã®Seqmanã¹ãã©ã€ãSprMan SndOne SndMan SeqIngame Dataoneã®DataManã®TouchEff TouchOne KEYMAN ChartObj ResultIconOne ResultIcon楜å£ChobjEndEffOne ChobjEndEff FadeMan NumberSpr SeqResult MenuStatusãããã¢ããSeqMainMenu SeqStory SptMan SptCharaOne SptChara SptMsgLog SptMsg SptBg SptStill SptCol SptShake SptSnd SeqSelConcert MenuCmnBtn OnpuEffOne OnpuEff SelStoryChap SelStoryLine SeqSelStory StaffData SeqStaffRoll MusicStill SeqMusicã¡ãã¥ãŒãªãã·ã§ã³SeqDownload MyStoreObserverãã¥ãŒããªã¢ã«FontMan VerificationController Reachability
ååãã倿ãããšã
SeqStory ã
SelStoryChapããŸãã¯
SeqSelStoryã® ããããã«
ãªããŸãã ãããŠããã§ã«2幎çã§ã幞éã¯ç§ãã¡ã«åŸ®ç¬ã¿ãŸãã
ãã³ãæ¹æ³ jtool -d SelStoryChap -arch armv7s oks
èŠåïŒã³ã³ãããªã³ãã¡ã€ã«./oks.ARMïŒäžæïŒ.69981636-7F33-3C43-BD58-7F5BBE2A6CCAãèŠã€ãããŸãã
//ãã³ãã¯ã©ã¹45ïŒSelStoryChapïŒ
@interface SelStoryChapïŒCoreFoundation :: _ OBJC_METACLASS _ $ _ NSObject
//ããããã£ã¯ãããŸãã..
// 11åã®ã€ã³ã¹ã¿ã³ã¹å€æ°
/ * 0 * / unsigned intãã©ã°ã //ç§
/ * 1 * / int storyId; //ç§
/ * 2 * / int prio; //ç§
/ * 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; //ç§
// 25ã®ã€ã³ã¹ã¿ã³ã¹ã¡ãœãã
/ * 0 * / 0x38f01-isUnlock; //ãããã³ã«c8 @ 0ïŒ4
/ * 1 * / 0x38f15-isHave; //ãããã³ã«c8 @ 0ïŒ4
/ * 2 * / 0x38f29-canPlay; //ãããã³ã«c8 @ 0ïŒ4
/ * 3 * / 0x38f3d-canSelect; //ãããã³ã«c8 @ 0ïŒ4
/ * 4 * / 0x38f81-isTouch; //ãããã³ã«c8 @ 0ïŒ4
/ * 5 * / 0x38fd5-plateTye; //ãããã³ã«i8 @ 0ïŒ4
/ * 6 * / 0x3900d-isKeyDisp; //ãããã³ã«c8 @ 0ïŒ4
/ * 7 * / 0x39031-isPlayingDisp; //ãããã³ã«c8 @ 0ïŒ4
/ * 8 * / 0x39045-isChapTitleDisp; //ãããã³ã«c8 @ 0ïŒ4
/ * 9 * / 0x39085-ã¢ã«ãã¡; //ãããã³ã«f8 @ 0ïŒ4
/ * 10 * / 0x390d9-isDisp; //ãããã³ã«c8 @ 0ïŒ4
/ * 11 * / 0x39135-ã¯ãªã¢; //ãããã³ã«v8 @ 0ïŒ4
/ * 12 * / 0x391d5-ãªã»ãã; //ãããã³ã«v8 @ 0ïŒ4
/ * 13 * / 0x392a5-ããŒã; //ãããã³ã«v8 @ 0ïŒ4
/ * 14 * / 0x396d1-initWithPrioïŒ; //ãããã³ã«@ 12 @ 0ïŒ4i8
/ * 15 * / 0x39725-dealloc; //ãããã³ã«v8 @ 0ïŒ4
/ * 16 * / 0x397a1-setStoryIdïŒ; //ãããã³ã«v12 @ 0ïŒ4i8
/ * 17 * / 0x39859-updatePos; //ãããã³ã«v8 @ 0ïŒ4
/ * 18 * / 0x3991d-setOriPosïŒyïŒ; //ãããã³ã«v16 @ 0ïŒ4f8f12
/ * 19 * / 0x3994d-setOfstPosïŒyïŒ; //ãããã³ã«v16 @ 0ïŒ4f8f12
/ * 20 * / 0x3996d-setDispïŒ; //ãããã³ã«v12 @ 0ïŒ4c8
/ * 21 * / 0x39aa1-startSelEff; //ãããã³ã«v8 @ 0ïŒ4
/ * 22 * / 0x39c7d-storyId; //ãããã³ã«i8 @ 0ïŒ4
/ * 23 * / 0x39c8d-posx; //ãããã³ã«f8 @ 0ïŒ4
/ * 24 * / 0x39c9d-è±æ; //ãããã³ã«f8 @ 0ïŒ4
@end
ã¡ã³ããŒã·ããã¡ãœãã
isUnlock /
isHaveãåªãããã³ãïŒãããèŠãå¿
èŠããããŸãã ç§ã®ä»£ããã«æèœãªäººãFlexããããæžããã
Mobile Cydia Substrateã®çãã©ã€ãã©ãªãäœæããŸãã ããããã»ãªã®æãäžè¬çãªäžååããšããŠãç§ã¯å
¥ããŸããã§ããããããŠãç§ã¯ãã¬ãã¯ã¹ã䜿ããŸããã ã¡ãœããã¹ãŠã£ãºã«çšã®æšæºââAPIã䜿çšããŠéåžžã®ãã€ãããã¯ã©ã€ãã©ãªãäœæããããšã¯ã§ããŸããããããã¯ç§ã«ã¯èµ·ãããŸããã§ããããããŠã圹ã«ç«ããªãããšãæããã«ãªããŸããã ãã¡ã€ã«ãIDAã«ããŒãããã¡ãœããã«ç§»åããŠãå
å®¹ãæ§é äœ
mov r0ãïŒ1ïŒbx lrã«çœ®ãæããŸãã
ãã®ããã«
â

ããã€ã¹ã®å®è¡å¯èœãã¡ã€ã«ã®å€èŠ³ãæŽæ°ããåŸãisUnlockã¯ããšããœãŒããã²ãŒã ã§å©çšå¯èœãã©ãããã§ããããisHaveãã¯è³Œå
¥ã¹ããŒã¿ã¹ã§ããããšãããããŸããã 以åéãããšããœãŒããéããšãã¬ãŒãã«ä¹ã£ãŠããããšãããããŸãã

äžèº«ã確èªããå¿
èŠããããŸãã armã¯ç§ã«ãšã£ãŠæã銎æã¿ã®ããã¢ãŒããã¯ãã£ã§ã¯ãªãã®ã§ãç¹ã«æ©èœãçããããŸãæéããããããªãã®ã§ãå¿
èŠãªãã¢ã»ã³ãã©ã³ãŒãã䜿çšããŸããã ã³ãŒã
isHave /
isUnlockãèŠãŠ
ãã ãã ïŒ
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; }
ããããããã®ã¡ãœããã¯æ¢ã«èšå®ãããŠããå€ã®ã¿ãèªã¿åããŸããããããã©ããå¥ã®å Žæã§å®éã«ãã§ãã¯ããŸãã XREF
ãã©ã°ã䜿çšããŠã
ãã©ã°ã«æžã蟌ãã¡ãœãããèŠã€ããŸãïŒä»¥éãèªã¿ãããããããã«ååãéšåçã«æåã§è¿œå ããŸãïŒã
2çªç®ã®ãããããã§ãã¯ããå¿
èŠãããããšãç¥ã£ãŠã
checkStoryFlag2ã®å
容ãèŠãŠãå¿
èŠã«å¿ããŠèª¿æŽããŸãã
ããå°ã詳现 int __fastcall checkStoryFlag2(int a1) { return checkStoryStatus(a1, dword_7D84C); } signed int __fastcall inRange(int value, int start, int end) { signed int result;
äœããã®çš®é¡ã®å€ããŒãã«ã
dword_7D84C ïŒåŸã§SHA-256ããã·ã¥ãããããšãããããŸããïŒã«æ ŒçŽãããŠãããçŸåšã®IDã«å¯ŸããŠæ°ããèšç®ããããã®ããã§ãã¯ãããããã§ãã ãã®å Žåãç« ãéããŸãã ããã¯ãã¹ããåé€ããå Žæã§ãããèããªãå Žæã ãšæããŸãã ãŠãããã®ç¡æ¡ä»¶åŸ©åž°ã¯ãã®ä»äºãæãããç§ã¯ãã¹ãŠã®16ç« ãééããŸãã:)ã
ãžã£ãçªå·2ãä¿®æ£
ãã®ã¹ããŒãªãŒã¯ã1ã€ã§ã¯ãªãã«ããŠãå®äºã§ããŸããã

æ®ãã®24ãã©ãã¯ã¯ã©ãã«ãããŸããïŒ ããã§ãã圌ãã¯å¥ã
ã«è³Œå
¥ãããŸãã ããã§ç§ã¯ããã¡ããå°ãå«ãã«ãªãå§ããŸããããäœããåã®æé ã¯ç°¡åãããŸãããäœãä»ã®ãã®ãããã«éããããŸããã ããããç§ã¯åã³å¹žéã§ããã ããã«ãsetupSelMusicãšãã䟿å©ãªååã®ã¡ãœããã®1ã€ã§ããã©ãã¯ãå埩åŠçããããã€ãã®é¢æ°ãåŒã³åºãã³ãŒããèŠã€ãããŸããïŒD
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;
ãã§ãã¯ã®ã³ã³ããã¹ãã«åºã¥ããŠãæ©èœã4ã€ã®ç¢ºèªã®ã»ãããšããŠè§£éããŸããïŒãã©ãã¯ã¯èš±å®¹ç¯å²ïŒ0ã127ïŒã«ããããã©ãã¯ã¯ã²ãŒã ã®ããŒã¹ã«ååšãããã©ãã¯ã¯è³Œå
¥ãããå°ãªããšã1ã€ã®ã¬ãã«ãã²ãŒã ã§å©çšå¯èœã§ãã
æ¬äŒŒã³ãŒã signed int __fastcall trackCheckingFunction(int track) { signed int ret;
checkTrackStatusã«æ¡ä»¶ãªãã§ãŠããã
ãè¿ãããã«åŒ·å¶ãã...å°ã£ãããšã«ãªããŸããã 賌å
¥å¯èœãªãã©ãã¯ã¯ã¹ãã¢ã«è¡šç€ºãããªããªããŸããããã²ãŒã ã¡ãã¥ãŒã«ã衚瀺ãããŸããã§ããã ããã§ããã°ããã®éãé ã骚æããŸãããæåã¯ã¬ãã«ãäœãããŠããã¹ãŠãè§£é ããããšããŠãããšèããŠããŸããã ããããç§ã®äžã®åç䞻矩è
ã¯ãå°ãåŸã§ãåãã©ãã¯ã«ã¯æå€§4ã€ã®é£æåºŠã¢ãŒããããããããããåã®ãã©ãã¯ã«å¯ŸããŠååã«é«ãããŒã¯ãåŸããããšãã«éãããšãæãåºããŸããã ã€ãŸãããã®é¢æ°ã®
lvl倿°ã¯ãã¬ã€ã€ãŒã®ãã€ã³ããšã¯é¢ä¿ãªããå°ãªããšã1ã€ã®é£æåºŠã¢ãŒãã®ãéæŸæ§ããåçŽã«æ±ºå®ããŸãã ã³ãŒãã®ãããªãç ç©¶ã«ãããããã確èªãããŸããã
ããå°ã BOOL __fastcall isEntryAvailble(int *table, signed int index) { return (table[index >> 5] & (1 << (index & 0x1F))) != 0; }
ããŒãšã蚺æã¯äžãããŸãããç§ãã¡ã¯ã©ãããŸããïŒ
checkTrackPassedLevelã«ããããåœãŠãããšãã§ããŸãããããã»ãŒãžã«é¢ä¿ãªãããã¹ãŠã®ãã©ãã¯ãšé£æåºŠã¢ãŒããå©çšå¯èœã«ãªããŸãã ãã®ãªãã·ã§ã³ã¯å人çã«ã¯ããŸãã«ã倱瀌ãªããã«æããã®ã§ãç§ã®å®æå®¶ã¯åæååãæ¢ãããã«ãªããŸããã track_status_listã«é©åãªXREFããªãã£ã
ã®ã§ ãç§ã¯ãã§ã«ãã®ãããªæãããŠããªããããã¬ãŒã
䜿ããããšæã£ãŠããŸããã æåŸã®ç¬éãç§ã¯ã¢ã€ãã¢ãæãã€ããŸãããç¹å®ã®ããŒãã«ã§çæãããããã·ã¥ã«è³ãå Žåãããã«äœãã眮ãã¹ãã§ãããããã·ã¥ãã©ãã«ãããã¯ã¹ããŒã¿ã¹ã§ãã éçºè
ã2ã€ã®ç°ãªã颿°ã䜿çšããŠïŒãã®æçš¿ã®2ã3ã®èšç®ããã§ãã³ããŒãšè²Œãä»ãã«é¢ãããã¹ãŠãæããã§ããïŒãèšç®ããããšã¯
ã»ãšãã©ãããŸãããXREFloadEntryHashã調ã¹ãŸããã æåéãæ°åæ€çŽ¢ããåŸããã®ã³ã³ãã³ãã§æ©èœãèŠã€ãã£ããšæããŸãã
int *__fastcall sub_xxxx(int track) { int *result;
ç§ã®æèŠã§ã¯ãååã倿Žããã«ãããããã©ãã¯ã®è³Œå
¥/ééåŸã«åŒã³åºãããäžçš®ã®ãªãŒãããŒã§ããããšã¯æããã§ãã ãããã«ããããããã®å°ããªãã®ã¯åã«ããã«ã€ããŠå«ã³ãŸãã-XREFã«é¢ããäžèšã®
[MyStoreObserver complete_subïŒ]ã¯ç§ã«åæããŸãã:)æè¡çãªåé¡ïŒãããã䟿å©ãªå Žæã«ãã®é¢æ°ã®åŒã³åºããæ¿å
¥ããããšã¯ãããããåããŠã¢ã»ã³ãã©ãŒãç§ã«ãšã£ãŠæ¬åœã«åœ¹ã«ç«ã¡ãŸããã
checkTrackStatusã§ãã©ãã¯ã®IDãçŽæ¥ãã§ãã¯ããæãç°¡åãªæ¹æ³ã§
ããªãã¯ãè¡ããããã¹ãŠãéåžžã«è¯ããªããŸããã
ããªãã¡
â

çµè«ã®ä»£ããã«
æããã«ããã®ãããªå°ããªå€æŽã¯ãäœãã®ãµããããããšã¯ã»ãšãã©ãããŸããã ç§ã¯ãã¯ããã«å³ãããè²»çšã®ãããç¶æ³ãããããšãç¥ã£ãŠããŸãã ã¯ããããšãã°ããã§ãããã·ã¢èªïŒããã¹ãããŒã¿ã¯UTF-16 LEãšã³ã³ãŒãã®èŠããäžåçŽãªåœ¢åŒã§ä¿åãããäžè¬ã«ã°ã©ãã£ãã¯ããŒã¿ã¯PNGã§ä¿åãããŸãïŒãŸãã¯iTunesã©ã€ãã©ãªããã®åçãªèªã¿èŸŒã¿ã§ç¬èªã®ãã©ãã¯ã远å ããããšãã§ããŸããã ããã«ãåŸè
ã®å Žåãã²ãŒã ãªãœãŒã¹ã«ã¯ãã€ããªæ§é ã ãã§ãªããããããåä¿¡ããããã®ãœãŒã¹ãã¡ã€ã«ããããŸããã
ãã®ãããªãã¡ã€ã«ã®äŸ ããã¯å¯èœã§ãããããããã®è¶£å³ã«ã¯æéãšæ³ååã®äž¡æ¹ã«éçããããç§ã«ãšã£ãŠã¯æ°æéãè²»ãããŸããã ãã®èšäºã®ç®çã¯ãã¢ãã€ã«ãã©ãããã©ãŒã ãæããªãããã«ããããšã§ããã¢ãã€ã«ãã©ãããã©ãŒã ã«ã¯å€ãã®å¶éããããŸãããTEXTã«ãã€ããåçã«æžã蟌ãããšã¯ãªããããã°ãã©ã¶ãŒãšéãã¯ãããŸããã ä»ã®äººã®ã³ãŒããæãäžããããšãheããªãã§ãã ãããããã»ã©é£ããã¯ãªããæã«ã¯éåžžã«åºæ¿çã§ãïŒç§ã®ããã¹ãã®NFSã«é¢ããæè¿ã®äžé£ã®èšäºãšã¯ç°ãªããããã¯ã»ãšãã©æããããŸããïŒã
PSæåŸã«ãªã£ãŠãããŠããããšãã
PPS販売çµäºåã«ãã£ã¹ããªãã¥ãŒã·ã§ã³ãé
åžããããšã¯ãæ³åŸäžã®çç±ãã䟡å€ããªããšæããŸãããããŠããªãã誰ãã«ãšã£ãŠããã¯å®è·µããçµ¶å¥œã®æ©äŒã§ãã
å
責äºé
ïŒãã®èšäºã§ã¯ãã©ã€ã»ã³ã¹å¥çŽã®éåããããã³ã°ããŸãã¯ãœãããŠã§ã¢ã®äžæ£äœ¿çšãäžåæ±ããŠããŸããã ãã®ããã¹ãã¯ãçŽç²ã«æè²ããã³æ
å ±æäŸã®ããã«æç€ºãããŠããŸãã