æåã®éšåã§ã¯ãããŒã¿ã®ä¿åãšéä¿¡ã®ã»ãã¥ãªãã£åé¡ã®ããã€ãã調ã¹ãŸããã æ¬¡ã«ã
å®è¡å¯èœã³ãŒãã®ä¿è·ã«ã€ããŠèª¬æã
ãŸã ã å®è¡æã«iOSã¢ããªã±ãŒã·ã§ã³ã®æ©èœã倿ŽãããªããŒã¹ãšã³ãžãã¢ãªã³ã°ãè¡ããŸãã ãããŠãããäžåºŠèŠããŠãããŠãã ããïŒ ç§ãã¡ã®ç®æšã¯ãèŠèŠããã¯ã©ãã«ãŒã«ãªãããšã§ã¯ãªããæªæã®ããã¢ã¯ã·ã§ã³ããã¢ããªã±ãŒã·ã§ã³ãšãŠãŒã¶ãŒãä¿è·ããããšã§ãã ãããè¡ãã«ã¯ãã¯ã©ãã«ãŒãã§ããããšãçè§£ããå¿
èŠããããŸãã

ãã®ã¬ãã¹ã³ãæ£åžžã«å®äºããã«ã¯ãã¢ã»ã³ãã©ãŒãšã¯äœããçè§£ããå¿
èŠããããŸãã ãã®èšäºã®èè
ã¯ã
ARMã®
ãã¥ãŒããªã¢ã« ïŒè±èªïŒãèªãããšããå§ãããŸãã
å®éãã¬ãã¹ã³ã®æå³ãçè§£ããããã«å¿
èŠãªç¥èã®ã¬ãã«ã¯ãGoogleãéäžã§æ°åãããããšã§ãã ããŠãèšäºã®çµããè¿ãã§ãã¢ã»ã³ãã©ãŒãåŠã¶å¿
èŠããããã©ãããæ±ºå®ããŸãã :)
-çŽ ãããå§ããŸããã
å¿
èŠãªãã®ïŒ
- åã®éšåã®ãããžã§ã¯ãMeme Collectorããã¹ãããŸãã
- ãŠãŒãã£ãªãã£class-dump-z
- OS Xçšã®ãªãŒãã³ãœãŒã¹HEXãšãã£ã¿ãŒïŒ Hex Fiend
- IDAãã¢ã¯ãããç¥ããããã«ãããã»ããµã®éã¢ã»ã³ãã©ããã³ãããã¬ã§ãã ãã¢çã«ã¯ããã®ã¬ãã¹ã³ã§ã¯éèŠã§ã¯ãªãå¶éããããŸãã
ãããã®ããŒã«ã«ã€ããŠå€ããåŠãã§ããã ããã°å¹žãã§ãïŒ
ã©ã³ã¿ã€ã æäœ
åã®ã·ãªãŒãºã§ã¯ã.plistãã¡ã€ã«ã倿ŽããŠã¢ã«ãŠã³ãã®æ®é«ã倿ŽããŸããã ã§ã¯ãå®è¡æã«å€æ°ãšã¡ãœãããæäœããæ¹æ³ïŒå®è¡æãšåŒã°ããæ¹æ³ïŒãèŠãŠã¿ãŸãããã ãããè¡ãã«ã¯ãLLDBãããã¬ãŒã䜿çšããŸãã
å
ã®èšäºã§ã¯ããã¹ãŠã®äŸã¯GDBã䜿çšããŠããŸãããXcodeã5.0.1ïŒç¿»èš³æã®çŸåšã®ããŒãžã§ã³ïŒã«ã¢ããã°ã¬ãŒãããåŸãGDBãå®è¡ããã«ã¯ã¿ã³ããªã³ãšèžãå¿
èŠããããŸãã ãããã£ãŠããã¥ãŒããªã¢ã«ã«è² æ
ããããªãããã«ã
LLDBãšGDBã®éã®ã³ãã³ã察å¿è¡šã«åŸã£ãŠããã¥ãŒããªã¢ã«ãããçŽããŸããã
-泚 ããã ã¿ãŒããã«ã®iOSã·ãã¥ã¬ãŒã¿ãŒã«ã€ã³ã¹ããŒã«ãããŠããã¡ã€ã³ãã³ãã«ãã©ã«ããŒïŒ
Meme Collector.app
ïŒãéããŸãã ãããè¡ãããã«è¿·ã£ãŠããå Žåã¯ã
æåã®éšåãèŠãŠãã ããã
éå§äœçœ®ãå æããŸããã·ãã¥ã¬ãŒã¿ã¯å®è¡ãããŠããŸãããã¢ããªã±ãŒã·ã§ã³ã¯ã€ã³ã¹ããŒã«ãããŠããŸãããå®è¡ãããŠããŸããã
ã¿ãŒããã«ã§ã次ãå
¥åããŸãã
lldb
ãããã¬ãŒã¯å®è¡äžã§ãã æ¬¡ã®è¡ã«ã¯ã圌ããã®æåŸ
ç¶ã衚瀺ãããŸãïŒ
(lldb)
ãããã¬ãŒã®ã³ãã³ããå
¥åããŸãã
è¡ã®å
é ã«æå(lldb)
ãèšè¿°ããªãã®ã§ãã³ããŒãããšãã«æ··ä¹±ããªãããã«ããŸãã attach --name "Meme Collector" --waitfor
attach
ã³ãã³ãã¯ãç¹å®ã®ããã»ã¹ã«æ¥ç¶ããããã«äœ¿çšãããŸãã ããã§ã¯ãLLDBã«ã
Meme Collector
ããšåŒã°ããæ°ããããã»ã¹ãéå§ããŠæ¥ç¶ããã®ãåŸ
ã€ããã«äŸé ŒããŸãã
ãããã£ãŠããããã¬ã¯åŸ
æ©ããŠããŸãã iOSã·ãã¥ã¬ãŒã¿ãŒã«é²ã¿ãåŸæ¥ã®ïŒã¬ãã¹ã³ã®æåŸã®éšåã§ïŒãã«ãã¿ã¹ã¯ããã¢ããªã±ãŒã·ã§ã³ãã¢ã³ã€ã³ã¹ããŒã«ããŠããåèµ·åããŸãïŒIDEããã§ã¯ãªããã·ãã¥ã¬ãŒã¿ãŒããå®è¡ããŸãïŒ-以éããåèµ·åããšåŒã³ãŸãã
ãã¹ãŠãæ£ããè¡ããããšãLLDBã¯ã·ãã¥ã¬ãŒã¿ãŒã®ããã»ã¹ãš
äžç·ã«æ¥œãã¿å§ããŸãã ãããã¬ãŒã¯ããã»ã¹ã«æ¥ç¶ããå®è¡ãäžæåæ¢ããŠæ¬¡ã®ããã«èšããŸãã
Process 1427 stopped Executable module set to "/Users/dmitriy/Library/Application Support/iPhone Simulator/7.0.3/Applications/9A72F266-8851-4A25-84E4-9CF8EFF95CD4/Meme Collector.app/Meme Collector". Architecture set to: i486-apple-macosx.
ãããŠãæ°ããã³ãã³ããå
¥åããããã³ããïŒ
(lldb)
åViewControllerã衚瀺ããåã«ãã¬ãŒã¯ãã€ã³ãã远å ããŸãããã ããã¯ãå€ãã®è峿·±ãããšãéåžžèµ·ããå Žæã§ãã å€ãã®å Žåãã¢ããªã±ãŒã·ã§ã³ããžãã¯ã®å€§éšåã¯ããã§æ±ºå®ãããŸãã ããšãã°ã
viewDidLoad
ã¡ãœããã®ãã¹ãŠã®åŒã³åºãã«ãã¬ãŒã¯ãã€ã³ãã远å ããŸããããiOSã§ã¯ã
UIViewController
ãµãã¯ã©ã¹ãã»ãšãã©ã®å Žå
viewDidLoad
ãªãŒããŒã©ã€ãããããã§ãã
ã¿ãŒããã«ã§å®è¡ïŒ
b viewDidLoad
ã¡ãœããåã§ã¯å€§æåãšå°æåãåºå¥ãããããã
viewdidload
ãªãã·ã§ã³
viewdidload
倱æããŸãã
ããã«ããã
viewDidLoad
ãšåŒã°ãããã¹ãŠã®ã¡ãœããïŒC ++ããã³Objective-Cã¡ãœãããå«ãïŒã«ãã¬ãŒã¯ãã€ã³ããèšå®ãããŸãã å¿
èŠã«å¿ããŠãç¹å®ã®ObjCã»ã¬ã¯ã¿ãŒã«å¯ŸããŠã
-[UIViewController viewDidLoad]
ãªã©ã®ååãå
¥åã§ããŸããããã®ãªãã·ã§ã³ã¯
UIViewController
ã¯ã©ã¹ã®åå«ã§ã¯
UIViewController
ãªãããšã«æ³šæããŠãã ããã
ãããã£ãŠãLLDBã¯ããã¬ãŒã¯ãã€ã³ãã«é©ãã15ã®å ŽæãèŠã€ãããšèšã£ãŠããŸãã
Breakpoint 1: 15 locations.
çŽ æŽãããã 圌ãã©ãã«çœ®ããã®ãèŠãŠã¿ãŸãããã æ¬¡ã®ã³ãã³ããå
¥åããŸãã
br l
ïŒããã¯
breakpoint list
ç¥ã§ããå¿
èŠã«å¿ããŠãã³ãã³ãã®å®å
šãªããŒãžã§ã³ãæžãããšãã§ããŸããïŒ
ããŠãããã«åœŒãã¯ïŒ
Current breakpoints: 1: name = 'viewDidLoad', locations = 15, resolved = 15 1.1: where = Meme Collector`-[ViewController viewDidLoad] + 18 at ViewController.m:27, address = 0x0001f482, resolved, hit count = 0 1.2: where = UIKit`-[UIViewController viewDidLoad], address = 0x005d3db5, resolved, hit count = 0 1.3: where = UIKit`-[_UIModalItemsPresentingViewController viewDidLoad], address = 0x0065ab4b, resolved, hit count = 0 1.4: where = UIKit`-[UIKeyboardCandidateGridCollectionViewController viewDidLoad], address = 0x00680729, resolved, hit count = 0 1.5: where = UIKit`-[UIActivityGroupViewController viewDidLoad], address = 0x008d2b6b, resolved, hit count = 0 1.6: where = UIKit`-[UIPrintPanelTableViewController viewDidLoad], address = 0x009be80f, resolved, hit count = 0 1.7: where = UIKit`-[UIPrintStatusViewController viewDidLoad], address = 0x009c8828, resolved, hit count = 0 1.8: where = UIKit`-[UIPrintRangeViewController viewDidLoad], address = 0x009d29ae, resolved, hit count = 0 1.9: where = UIKit`-[_UILongDefinitionViewController viewDidLoad], address = 0x00a10cf4, resolved, hit count = 0 1.10: where = UIKit`-[_UINoDefinitionViewController viewDidLoad], address = 0x00a1249d, resolved, hit count = 0 1.11: where = UIKit`-[UIReferenceLibraryViewController viewDidLoad], address = 0x00a13bd4, resolved, hit count = 0 1.12: where = UIKit`-[_UIFallbackPresentationViewController viewDidLoad], address = 0x00a77877, resolved, hit count = 0 1.13: where = UIKit`-[_UIViewServiceViewControllerOperator viewDidLoad], address = 0x00aba23b, resolved, hit count = 0 1.14: where = UIKit`-[UIActivityViewController viewDidLoad], address = 0x00b4f296, resolved, hit count = 0 1.15: where = UIKit`-[_UITextEditingController viewDidLoad], address = 0x00b9a6ec, resolved, hit count = 0
å®éããã¬ãŒã¯ãã€ã³ãã1ã€ã ãæ®ãå¿
èŠãããããšã¯æããã§ã
-[ViewController viewDidLoad]
ãæ®ãã¯Apple Private APIã«å±ããŠããããã ããããç§ãã¡ã¯èå³ãããã®ã§ãããããæ®ããŠãã ããã
ã¢ããªã±ãŒã·ã§ã³ã®èµ·åã«æ»ããŸãããïŒ æ¬¡ã®ã³ãã³ããå
¥åããŸãã
c
ããã¯ãã«ããŒãžã§ã³ã§ã¯
continue
ããã«èŠããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ã
viewDidLoad
æåã®åŒã³åºããŸã§ã³ãŒãã®å®è¡ãç¶ã
viewDidLoad
ã
Process 1427 resuming Process 1427 stopped * thread
ããããŠä»... e-yer ...ããã¯ç§ãã¡ã楜ããæéã§ãïŒããã§ãªããã°ç§ã¯ãã¬ãŒããŸããïŒã

ViewController
ã¯ã©ã¹ïŒViewController.mãã¡ã€ã«ïŒã®ãã¬ãŒã ã§ããã»ã¹ã忢ããŸããã ãã®ãããã€ã³ã¹ã¿ã³ã¹å€æ°ãšã¡ãœããã«ã¢ã¯ã»ã¹ã§ããŸãã ãã£ããã ãããŠãã£ãšïŒ ã³ãŒãã»ã¯ã·ã§ã³ã¯æ¢ã«ã¡ã¢ãªã«ããŒããããŠããŸãã ãããã£ãŠã以äžãå«ãä»ã®ãã¹ãŠã®ã¯ã©ã¹ã«ã¢ã¯ã»ã¹ã§ããŸã-泚æïŒ -ã·ã³ã°ã«ããŒã³ã
ã¯ããã·ã³ã°ã«ããŒã³ã
æåã®éšåã§ãã®ç¹ãæ³šææ·±ã調ã¹ãå Žåã
MoneyManager
ãšåŒã°ãããè峿·±ããã¯ã©ã¹ã«æ°ä»ããããããŸããã 圌ã¯ãã¹ãããã
purchaseCurrency
ã¡ãœãããæã£ãŠããŸãããïŒ :)
(lldb)
ã¿ãŒããã«ã«å
¥åããŸãïŒ
call [[MoneyManager sharedManager] purchaseCurrency]
ã¡ãœãããåŒã³åºããŸããïŒ ãããã¬ãŒã¯å®è¡çµæãåºåããŸãã
(BOOL) $0 = YES
çãã
YES
å Žåãä»®æ³éè²šãæ£åžžã«ãååŸãããããšãæå³ããŸãã ïŒããã§èè
ã¯ãããã¯ã€ã³ãµã€ããŒæ
å ±ã§ããç§ãã¡ãã¯ã©ãã«ãŒã¯ããããç¥ãã¹ãã§ã¯ãããŸããã-ãããããã
ã ïŒ
LLDBã¯ãEnterããŒãæŒããŠåã®ã³ãã³ããç¹°ãè¿ããŸãã ãããã£ãŠãEnterããŒãæ°åæŒããŠãMikhail
Mikhalkovãããå°ã匷奪ããŸãã
(lldb) call [[MoneyManager sharedManager] purchaseCurrency] (BOOL) $0 = YES (lldb) (BOOL) $1 = YES (lldb) (BOOL) $2 = YES (lldb) (BOOL) $3 = YES (lldb) (BOOL) $4 = YES (lldb) (BOOL) $5 = YES (lldb) (BOOL) $6 = YES (lldb) (BOOL) $7 = YES (lldb)
ç¡æã³ã³ãã³ãã®è³Œå
¥ã¯ããããŸã§ã«ãªãç°¡åã«ãªããŸããïŒ ã³ãã³ããæ°åå
¥åããŠãã ãã
c
...ããã§ãèšå®ãããã¹ãŠã®ãã¬ãŒã¯ãã€ã³ããçµäºããã·ãã¥ã¬ãŒã¿ã§çµæãè©äŸ¡ãããŸãã

æªããªãã§ããïŒ ããŠãããã«ã€ããŠäœãã§ãããèŠãŠã¿ãŸãããã
ã¢ããªã±ãŒã·ã§ã³ãäžæåæ¢ããŠã³ãã³ãã©ã€ã³ã«åã³æ»ãã«ã¯ãã¿ãŒããã«ã«åãæ¿ããŠãããã§Ctrl + CãæŒããŸãã LLDBãããã¬ãŒã¯ãã³ãã³ããå床å®è¡ããæºåãã§ããŠããŸãã
ãšãããããããã°ã»ãã·ã§ã³ãçµäºããŸãããïŒ
q
ã³ãã³ããå
¥åããŠãã
y
ã確èªããŠãã ããïŒ
(lldb) q Quitting LLDB will detach from one or more processes. Do you really want to proceed: [Y/n] y
éçºè
ã®åŽã«æ»ããŸãã ãããã¬ãŒãä»ããŠã¢ããªã±ãŒã·ã§ã³ãæäœããã人ãè£åãããšã¯å¯èœã§ããïŒ
ã©ã³ã¿ã€ã æäœã«å¯Ÿããä¿è·
幞ãããããã¬ãã³ãŒãã«æ¥ç¶ãããŠãããã©ããã確èªããæ¹æ³ããããŸãïŒ ãããã1ã€ã®åé¡ããããŸãã ãã®ãã§ãã¯ã¯ããã®ç¹å®ã®æéã«ãããã¬ãæ¥ç¶ãããŠãããã©ããã倿ããŸãã ããã«ãŒïŒã¯ã©ãã«ãŒãè©æ¬ºåž«ãªã©ïŒã¯ããã®ãã§ãã¯ã®åŸãã¢ããªã±ãŒã·ã§ã³ãå±éºãèªèããªããªã£ããšãã«ãã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ã§ããŸãã ãã®åé¡ã¯ãå°ãªããšã2ã€ã®æ¹æ³ã§è§£æ±ºã§ããŸãã
- ãã§ãã¯ãç¶ç¶çã«å®è¡ãããããã«ãå®è¡ã«ãŒãã«ãã§ãã¯ãå«ããŸãã
- ã»ãã¥ãªãã£ã«ã€ããŠæãæžå¿µããŠããã³ãŒãã®æãéèŠãªéšåã«ãã§ãã¯ãå
¥ããŸãã
éåžžãæåã®ãªãã·ã§ã³ã¯æãŸãããããŸããã ãã®äŸ¡æ Œã¯
ãããã€ã¹ãå ç±ããããã®è²Žéãªããã»ããµæéã®ç¡é§ã§ãã 2çªç®ã®æ¹æ³ã«è¡ããŸãããã
ãšã¬ã¬ã³ããªãœãªã¥ãŒã·ã§ã³ã®1ã€ã¯ã
MoneyManager
ã·ã³ã°ã«ãã³ã§ãããã¬ã®ã¢ã¯ãã£ããã£ããã§ãã¯ããããšã§ãã ããšãã°ããããã°ãè¡ãããŠãããšå€æããå Žåãã¯ã©ã¹ã®éçã€ã³ã¹ã¿ã³ã¹ã®ä»£ããã«
nil
ãè¿ããŸãã
æ¡åŒµã¢ãŒãObjective-Cã§ã¯ããããç°¡åã«è¡ãããšãã§ããŸãã Objective-Cã®ã¡ãœããã¯æ¬è³ªçã«ã¡ãœããã§ã¯ãªãã
ã¡ãã»ãŒãžã§ãã ããã¯ã空ã®ãªããžã§ã¯ãã«ã¡ãã»ãŒãžãéä¿¡ããããšã¯çµ¶å¯Ÿã«å®å
šã§ããããšãæå³ããŸã-ããã¯äœãããŸããã ã³ãŒãã¯ã¯ã©ãã·ã¥ããŸããã
ããŠãæåŸã«ãã³ãŒããæäœããŸãããïŒ ïŒãæ°ã«å
¥ãã®IDEãŸãã¯Xcodeã§ïŒãããžã§ã¯ããéããMoneyManager.mãã¡ã€ã«ã«ç§»åããŸãã ããã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãã©ã®æ§æã§æ§ç¯ãããŠãããã確èªããããªããã»ããµãã¯ãã远å ãããªãªãŒã¹ã®å Žåã¯ãããã¬ãå®è¡ãããŠãããã©ããã確èªããŸãã éå§ãããšã
nil
ãè¿ããŸãã ãã以å€ã®å Žåã¯ããã¹ãŠãéåžžã©ããè¡ãããŸãã
sharedManager
ã¯ã©ã¹ã®
sharedManager
ã¡ãœããã®å
é ã«3è¡ã远å ããŸãã
#ifndef DEBUG SEC_IS_BEING_DEBUGGED_RETURN_NIL(); #endif
ããã§ãã¡ãœããã¯æ¬¡ã®ããã«ãªããŸãã

SEC_IS_BEING_DEBUGGED_RETURN_NIL()
ã¯ããããã¬ãã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ãããŠããå Žåã«
nil
ãè¿ãæšæºããªããã»ããµãã¯ãã®åŒã³åºãã§ãã
泚ïŒãã®ãã¯ãã¯ããªãªãŒã¹æ§æã§ã®ã¿äœ¿çšå¯èœã§ãã æåã®éšåã§ç§ãã¡ããã©ããŒããŠããå Žåã¯ããã§ã«ãªãªãŒã¹ã«åãæ¿ããŠããã¯ãã§ãã
ïŒå¿µã®ãããæãåºãããŠãã ããïŒXcodeïŒ è£œå>ã¹ããŒã >ã¹ããŒã ã®ç·šé... ïŒ â< ïŒ-å·ŠåŽã®[å®è¡...]ãå³åŽã®[æ
å ±]> [ãã«ãæ§æïŒãªãªãŒã¹]ã¿ããéžæããŸãã
AppCodeïŒ å®è¡>æ§æã®ç·šé... >æ§æïŒãªãªãŒã¹ã
æ¡åŒµã¢ãŒãããªããã»ããµãã¯ãã®ä»£ããã«ãObjCã¡ãœãããŸãã¯C颿°ãèšè¿°ããæ¹ãè¯ããšèšã人ããããããããŸããã ãããïŒ ãã¯ãã䜿çšããéåžžã«å
·äœçãªçç±ããããŸãã ãã¹ãŠã®ã¡ãœããã®ååãã¹ãã€ããããæ¯ãèãã倿Žãããã§ããããšãæ¢ã«ç¥ã£ãŠããã®ã§ïŒå
ãèŠãŠïŒãããæ¬¡ã«è¡ããŸãïŒ-ãããç¥ã£ãŠããã®ã§ããã§ãã¯ãé衚瀺ã«ããŸãïŒããšãã°ãã·ã³ã°ã«ãã³ã¡ãœããå
ïŒã äžè¬ã«ãã¯ã©ãã«ãŒãã»ãã¥ãªãã£ãã§ãã¯ãèŠã€ããŠããããåœãŠãã®ã¯ã¯ããã«é£ãããªããŸãããã¯ãã®å Žåãã¢ã»ã³ãã©ããããå¿
èŠããããŸãã
IDEããã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãïŒãªãªãŒã¹æ§æãéžæããã®ãå¿ããŠããŸãããïŒïŒ
XcodeïŒ
å®è¡ ïŒâRïŒ
AppCodeïŒ
ãããã° ïŒCtrl + DïŒ
[å®è¡]ãéžæãããšãXcodeã¯LLDBãããã¬ãŒãèªåçã«æå¹ã«ããŸãã çµæïŒå£åº§æ®é«ã¯è¡šç€ºãããŸããïŒ ç¢ºãã«ãã©ããã«ãã
nil
ïŒ

ãŸããAppCodeã«ã¯ã2ã€ã®ç°ãªãã³ãã³ãããããŸããRunã³ãã³ãã¯ãããã¬ãŒãæ¥ç¶ããŸãã
ãDebugã³ãã³ãã¯æ¥ç¶ããŸãã 䟿å©ã«ã
æçµçã«ç§ãã¡ã®ä¿è·ãæ©èœããããšã確èªããã«ã¯ããã§ãã¯ããŠãã ããïŒä»ããäœãã賌å
¥ã§ããŸããïŒ
MoneyManager
䜿çšã§ããŸãããã€ãŸãã䜿çšã§ããŸããã
IDEã®[
忢 ]ãã¿ã³ïŒåè§ïŒãã¯ãªãã¯ããŠãã¢ããªã±ãŒã·ã§ã³ã
忢ããŸãã LLDBãããã¬ãŒã忢ããŸãã ã·ãã¥ã¬ãŒã¿ãŒã«åãæ¿ããŠãããããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯é貚ã衚瀺ããŸãããªããªã ãããã¬ãŒãæ¥ç¶ãããŠããŸããã
æ¢ã«è¿°ã¹ãããã«ãèµ·åæã ãã§ãªããéåžžã¯ä»»æã®æç¹ã§ãããã¬ãããã»ã¹ã«æ¥ç¶ã§ããŸãã ã¿ãŒããã«ã§å®è¡ïŒ
ps aux | grep "Meme Collector"
ãã®ã³ãã³ãã®åºåã«ã¯ããMeme Collectorããšãããã¬ãŒãºã衚瀺ãããååã®ãã¹ãŠã®ããã»ã¹ã®ãªã¹ããå«ãŸããŸãã
dmitriy 2008 0,0 0,0 2432784 636 s001 S+ 1:05 0:00.00 grep Meme Collector dmitriy 2001 0,0 0,4 857416 32240 ?? S 1:04 0:00.65 /Users/dmitriy/Library/Application Support/iPhone Simulator/7.0.3/Applications/9A72F266-8851-4A25-84E4-9CF8EFF95CD4/Meme Collector.app/Meme Collector
2è¡ç®ãã·ãã¥ã¬ãŒã¿ãŒã®ã¢ããªã±ãŒã·ã§ã³ãã©ã«ããŒã«å¯Ÿå¿ããŠããããšãããããŸãã ãã®ããã»ã¹ã®æ°ã«æ³šæããŠãã ããïŒ2åç®ïŒã ç§ã®å Žåãããã¯2001å¹Žã®æ°åã§ãã
端æ«ãã
-p
ã¹ã€ãããæå®ããŠLLDBãå®è¡ããçªå·ã§ããã»ã¹ã«æ¥ç¶ããŸãã
lldb -p { }
ããšãã°ããlldb -p 2001ããšå
¥åããå¿
èŠããããŸãã
LLDBãéå§ããããã»ã¹ãžã®æ¥ç¶ãæåããããšãå ±åããŸãã
Attaching to process with: process attach -p 2001 Process 2001 stopped Executable module set to "/Users/dmitriy/Library/Application Support/iPhone Simulator/7.0.3/Applications/9A72F266-8851-4A25-84E4-9CF8EFF95CD4/Meme Collector.app/Meme Collector". Architecture set to: i486-apple-macosx.
LLDBã®å®è¡äžã«
MoneyManager
ã·ã³ã°ã«ãã³ã«
MoneyManager
ã¿ãŠãã ããã
call [[MoneyManager sharedManager] purchaseCurrency]
é貚ãã賌å
¥ãããããšãããšã
NO
ãè¿ãããŸããã€ãŸããééããŸããã
ãããŠ
sharedManager
ãªããžã§ã¯ãã®èª¬æãå°å·ããŠã¿ãŠãã ããã æ¬¡ã®ã³ãã³ããå
¥åããŸãã
po [MoneyManager sharedManager]
ãããŠããã®èª¬æã«ã¯äœãå«ãŸããŠããŸããïŒ
nil
éæããããã«å¿
èŠãªãã®ïŒ ã·ã³ã°ã«ãã³ã¯ãå°ãªããšãããããããçµæãè¿ããã賌å
¥ããã»ã¹äžã«ãšã©ãŒã¡ãã»ãŒãžã衚瀺ããŸããã ã¯ã©ãã«ãŒ
nil
åçŽã§çè§£ã§ããªãã
次ã®ã³ãã³ãã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®å®è¡ãç¶ç¶ããŸãã
c
[é貚ã®è³Œå
¥]ãã¿ã³ã䜿çšããŠãã¢ã«ãŠã³ããæ³çã«è£å
ããŠãã ããã äœãèµ·ãããŸããïŒ çµå±ã®ãšãããLLDBã¯ãŸã ããã»ã¹ã«æ¥ç¶ãããŠããŸãã

ããã»ã¹ãããããã¬ãŒãåæããŸã
ãCtrl+ CãæŒããŠããã
qã³ãã³ããå
¥åããŸãã [é貚ã®è³Œå
¥]ãã¿ã³ãåã³æ©èœããŸãã
ãããã¬ãŒã®ç¢ºèªã«å ããŠãããå³å¯ãªã¢ãããŒããåãããšãã§ããŸãã
ptrace
颿°ã¯
ãå¯èœãªéã GDB / LLDBãã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶
ããªãããã«ããã®ã«åœ¹ç«ã¡ãŸãã
ãããè¡ãã«ã¯ãIDEã«æ»ã£ãŠ
main.mãéã
ãŸãã 1ã€ã®ããããŒãã¡ã€ã«ã远å ããŸãã
#include <sys/ptrace.h>
ãããŠã
main
颿°ã®å
é ãŸã§ã®3è¡ïŒ
#ifndef DEBUG ptrace(PT_DENY_ATTACH, 0, 0, 0); #endif
ptrace
颿°ã¯ãGDBãLLDBãè¡ãããã«ããããã¬ãŒã§äžè¬çã«ããã»ã¹ã«æ¥ç¶ããããã«äœ¿çšãããŸãã
ptrace
ãžã®åŒã³åºãã远å ããŸãããããã¯ãç¹å¥ãªãã©ã¡ãŒã¿ãŒ
PT_DENY_ATTACH
ã䜿çšããŠããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ä»ã®ããã»ã¹ïŒã€ãŸãããããã¬ãŒïŒãã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ããªãããã«èŠæ±ããŸãã
IDEããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãã
Xcode ïŒã¢ããªã±ãŒã·ã§ã³ãèµ·åããŠããªãããã§ãã äœãèµ·ãã£ãŠããã®ïŒ ããã«æ¶ããé»ãç»é¢ã衚瀺ãããŸã-ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ã¡ã¢ãªã«ããŒããããå®è¡ãéå§ããŸãã åæã«ãXcodeã¯LLDBãæ¥ç¶ããããšãæãã§ããŸãããiOSã¯ãããèš±å¯ããããããã¬ãŒããã»ã¹ãçµäºããŸãã ããããã¬ãŒãå®äºãããšãXcodeã¯ãã¢ããªã±ãŒã·ã§ã³ãçµäºããã®ã§ã忢ããŸãããšèããŸãã æåŸã®ãã¬ãŒãºã¯ã¯ã€ã«ãã«èãããŸããããã®ããã«æ©èœããŸãã
-泚 ãããAppCode ïŒ
å®è¡ ïŒâRïŒã³ãã³ãã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ãæ£åžžã«èµ·åãã
ãããã°ã³ãã³ãïŒCtrl + DïŒã䜿çšãããšãXcodeã®ããã«ã¯ã©ãã·ã¥ããŸãã
ãããŠãã·ãã¥ã¬ãŒã¿ãŒããæ£ããèµ·åããŸãã äžèšã®ããã«ããããã¬ãŒãä»ããæ¥ç¶ããŠã¿ãŠãã ããã
lldb -p { Meme Collector}
çµæã¯äºæž¬å¯èœã§ãïŒ
Attaching to process with: process attach -p 3435 error: attach failed: process did not stop (no such process or permission problem?)
ããã¯ãhabrãèªãã 幌å
ãã¢ããªã±ãŒã·ã§ã³ã§éãã§ããŸãã®ãé²ãè¯ãããŒã«ã§ãã ããããããã¯ããã²ããçãããããã«ãŒãæ¢ããŸããã ç¶è¡ããåã«ã
ptrace
颿°ãåŒã³åºããŠå€æŽãããšããã»ã¹ã忢ããŸãã

äžè¬çã«ãããŸãã«ãå¿«é©ã«æããããšã¯ãããŸããã ããã«ãŒã¯ãç¹ã«å®è¡æã«ObjCã¢ããªã±ãŒã·ã§ã³ãæäœããããã«ã
Cycript ïŒJavaScriptã飿³ãããã¹ã¯ãªããèšèªïŒã®äœ¿çšã
奜ã¿ãŸãã ç§ãã¡ãè¡ã£ããããã¬ä¿è·ã¯ãCycriptããããªããä¿è·ããŸããã åã®èšäºã§äŒè©±ãå§ããæ¹æ³ãæãåºããŠãã ããã
å®å
šãªã¢ããªã±ãŒã·ã§ã³ã¯ãããŸããïŒ
ãã€ããªãæºåããŠããŸã
ãã€ããªãã¡ã€ã«ã®å€æŽã«é²ãåã«ããããããŒãã«åè§£ããæ¹æ³ãšããã®å
容ã確èªããŸãããã
ç¹å®ã®æŠå¿µã説æããããã«ããã€ããªå
ã®ç¹å®ã®ã¢ãã¬ã¹ã宿çã«åç
§ããŸãã ç§ã®ãããªããŒãžã§ã³ã®ã³ã³ãã€ã©ïŒããšãã°ãæ°ããXcodeã«ä»å±ïŒããªãå Žåã¯ããªãªãŒã¹ã®ä»£ããã«ãããã°æ§æãã³ã³ãã€ã«ãããããããžã§ã¯ãã«èªåã§å€æŽãå ããŸããã¢ãã¬ã¹ã¯ç°ãªãå ŽåããããŸãã ããã¯æ°ã«ããªããããããŸãã-ã¢ã€ãã¢ãçè§£ããããã«ãã¬ãŒã³ããŒã·ã§ã³ã«åŸã£ãŠãã ããã
OS Xããã³iOSã®å®è¡å¯èœãã¡ã€ã«åœ¢åŒã¯
Mach-OãšåŒã°ããŸãã ååãšããŠããã€ããªã¯ããã€ããªã®å ŽæãšããŒã¿ã«é¢ãããã¹ãŠã®æ
å ±ãå«ã
ããããŒã§å§ãŸããŸãã ãã®æ
å ±ã®åŸã«ã¯ãã»ã°ã¡ã³ãããšã«ãã¡ã€ã«ãããŒã¯ã¢ããããæ¹æ³ã瀺ãããŒãã³ãã³ããç¶ããŸãã ããã«ããããã®ã³ãã³ãã¯ç¹å¥ãªãã©ã°ãå®çŸ©ããŸããããšãã°ããã¡ã€ã«å
ã®ãã€ããªããŒã¿ãæå·åããããã©ããã§ãã
å
ã»ã°ã¡ã³ã ïŒã»ã°ã¡ã³ãïŒã«ã¯ã1ã€ãŸãã¯è€æ°ã®
ã»ã¯ã·ã§ã³ ïŒã»ã¯ã·ã§ã³ïŒããããŸãã 2ã€ã®ã¿ã€ãã®ã»ã¯ã·ã§ã³ã«æ³šç®ãã䟡å€ããããŸãã
- ããã¹ãã»ã¯ã·ã§ã³ ã äž»ã«èªã¿åãå°çšããŒã¿çšã ããšãã°ããœãŒã¹ã³ãŒããCè¡ã宿°ãªã©ã èªã¿åãå°çšããŒã¿ã®ç¹æ§ã¯ãã·ã¹ãã ãRAMã䜿ãæãããšããããã®ã»ã¯ã·ã§ã³ããããŒã¿ãç°¡åã«è§£æŸããåŸã§ïŒå¿
èŠã«å¿ããŠïŒãã¡ã€ã«ããå床ããŒãã§ããããšã§ãã
- ããŒã¿ã»ã¯ã·ã§ã³ ã äž»ã«ã³ãŒããã倿Žã§ããããŒã¿çšã éç倿°ã®BSSã»ã¯ã·ã§ã³ãã°ããŒãã«å€æ°ã®å
±éã»ã¯ã·ã§ã³ãªã©ãå«ãŸããŸãã
Appleã«ã¯ãè±èªã®
åªããMach-O圢åŒã®ãªãã¡ã¬ã³ã¹ããã
ãŸã ã
-泚 ãããæ¬¡ã«ã
Meme Collector
ãã€ããªã調ã¹ãŠããã¹ãŠã®åäœã確èªããŸãã èŠåºãããå§ããŸãããã ã¿ãŒããã«ã®ã¡ã€ã³ãã³ãã«ãã©ã«ããŒãMeme Collector.appãã«ã次ã®ããã«å
¥åããŸãã
otool -h "Meme Collector"
ãã®ã³ãã³ãã¯ãMeme Collectorãã€ããªå®è¡å¯èœãã¡ã€ã«ã®ããããŒãåºåããŸãã ãã®ãããªãã®ïŒ
Meme Collector: Mach header magic cputype cpusubtype caps filetype ncmds sizeofcmds flags 0xfeedface 7 3 0x00 2 25 3372 0x01000085
æ¡åŒµã¢ãŒã0xfeedfaceïŒ0xFEEDFACEïŒã¯16鲿°ã®ã¢ãã¬ã¹ã...è±èªã®ãã¬ãŒãºã§ãããïŒ
ãŠã£ãããã£ã¢ã®åçã
-泚 ããã æ³šïŒãã¡ã€ã«ã«ã¯25åã®ããŒãã³ãã³ãïŒ
cmds
ïŒãããããããã¯3372ãã€ãïŒ
sizeofcmds
ïŒãå æããŸãã ãããã®ã³ãã³ããèŠãŠã¿ãŸãããïŒ
otool -l "Meme Collector"
ïŒãã®åã«ãâKãæŒããŠã¿ãŒããã«ãŠã£ã³ããŠãã¯ãªã¢ã§ããŸããã¹ã¯ããŒã«ãããšäŸ¿å©ã§ãã-
泚 ïŒ
ããããã®è¡ãååŸããŸãã ãããã®è¡ããïŒäºåçãªæºåããªããŠãïŒãã»ã°ã¡ã³ããšã»ã¯ã·ã§ã³ãã¡ã¢ãªã«ããŒãããé åºã«é¢ããå€ãã®è峿·±ãããšãããããŸãã ãããããã®ç ç©¶ã¯ãã®ãã¥ãŒããªã¢ã«ã®ç¯å²ãè¶
ããŠããŸã;
ç¬ç«ããç ç©¶ã®ããã«æã奜å¥å¿ã®åŒ·ãèªè
ã«ãä»»ãããŸãããã
ãããŠãã¬ãã¹ã³ãç¶ããŸãã
__objc_classnameãšããïŒ
âF ïŒã»ã¯ã·ã§ã³ãèŠã€ããŠã
offset
泚æããŠãã ãããããã¯ãã¢ããªã±ãŒã·ã§ã³ãå æããä»®æ³ã¡ã¢ãªã®å
é ã«å¯Ÿãããã®ã»ã¯ã·ã§ã³ã®ãäœçœ®ããŸãã¯ãã·ãããã§ãã
æ¡åŒµã¢ãŒãoffset
ã«ã€ã㊠æã奜å¥å¿ãçãªãããããããã§ã«
addr
ãš
offset
éããçè§£ããŠããã®ã¯ããªããã®éãã¯ã©ãã§ã0x1000 = 4096ãã€ãã«çããã®ã§ããããïŒ ãŸã èªãã§ããªãå Žåã¯ãéåžžã«è峿·±ãããŒãžã§ãã
__PAGEZERO
詳现ã
__PAGEZERO
èªã¿ãã ããã
ããã§ã
__objc_classname
ã»ã¯ã·ã§ã³ã®ã·ããã¯159942ãã€ãïŒ10鲿°ïŒã§ãã äžã®ç»åã§ã¯ãå·ŠåŽã«èµ€ã®äžç·ãåŒãããŠããŸãã
ã¿ãŒããã«ã«ç§»åããŸãã æ°ããã¿ãŒããã«ãŠã£ã³ããŠïŒ
âN ïŒãéããåããã©ã«ããŒãMeme Collector.appããã以äžãå®è¡ããŸãã
strings -o "Meme Collector"
strings
ã³ãã³ãã¯ãã€ããªãã¡ã€ã«å
ã®è¡ãæ€çŽ¢ãã
-o
ãã©ã°ã¯åè¡ã«ãã¡ã€ã«ã®å
é ããã®çžå¯Ÿäœçœ®ãæžã蟌ã¿ãŸãã
ããŠã159942ã«ã¯äœããããŸããïŒ ã¯ã©ã¹åïŒ ïŒèµ€ã§åŒ·èª¿è¡šç€ºãããŠããŸããïŒè«ççã«ã
__objc_classname
ã»ã¯ã·ã§ã³ãæ¢ããŠããŸããã

ãã®ã»ã¯ã·ã§ã³ã®ããäžã«ã¯ã
__objc_methname
ã»ã¯ã·ã§ã³ãããã140887ããå§ãŸããŸããããã§ã¯ã
init
ã¡ãœããã§å§ãŸãã¡ãœããåïŒéã§åŒ·èª¿è¡šç€ºïŒããã
init
ã
æ¡åŒµã¢ãŒãinit
ã¡ãœãããæåã«æ¥ãã®ã¯ãªãã ãããïŒ
ã¡ãœããåãçµãããšããã§ãã¯ã©ã¹åã¯ããã«å§ãŸããŸãã
__objc_classname
ã»ã¯ã·ã§ã³ã¯ã
__objc_methname
ã»ã¯ã·ã§ã³ã®çŽåŸã«
__objc_methname
ãŸãã ããŒãã³ãã³ãã§ã¯ããããã¯æ¬¡ã
ã«å®è¡ãããã¡ã¢ãªã«é 次ããŒããããŸãã
ãããã£ãŠãããŒãã³ãã³ãã䜿çšãããšãMach-Oãã€ããªã®æ··ãæŽçããããšãã§ããŸãã ãã®ç¥èã§ç§ãã¡ã¯é²ã¿ãŸã... tadaaamïŒ ã³ãŒãã»ã¯ã·ã§ã³ã®ä¿®æ£ã«ã
éç ²ïŒéã¢ã»ã³ãã©ãŒãšãªããŒã¹ãšã³ãžãã¢ãªã³ã°
æ·±å»ãªéãçºå°ããæºåã¯ã§ããŠããŸããïŒ æåŸã«ãã¢ããªã±ãŒã·ã§ã³ãã€ããªãã¡ã€ã«ã倿Žããæ¹æ³ãåŠç¿ããŸãã
ããªãã¯ããããããªãã®äººçã§ãã°ãã°ãã¬ãŒãºãèãã§ãããïŒã¢ããªã±ãŒã·ã§ã³ã¯ããããã³ã°ãããŠããŸããã ããã¯ã誰ããã¢ããªã±ãŒã·ã§ã³ãä¿®æ£ããŠã... mmm ...éçºè
ãæå³ãããã®ãšã¯ç°ãªãåäœãããããšãæå³ããŸãã ããšãã°ãç»é²ãæ±ããŸããã ãããã£ãŠãç§ãã¡ïŒèè
ããã³ç¿»èš³è
ïŒã¯ãç§ãã¡ã®ä»äºãããªãã«åœ¹ç«ã€ããšãå¿ããé¡ã£ãŠããŸãã ã¢ããªã±ãŒã·ã§ã³ãä¿è·ãããã
ã ãã«ã
IDA Demoãšã
Hex Fiendãªã©ã®HEXãšãã£ã¿ãŒãããŠã³ããŒãããŸãã IDAã¯ãããã«ãŒããã€ããªãåŠç¿ãããšãã«æãé »ç¹ã«äœ¿çšããããŒã«ã§ãã ããã¯éåžžã«åŒ·åãªéã¢ã»ã³ãã©ããããã¬ããã³ã³ãã€ã©ã§ãã ãããŠããã«ããŒãžã§ã³ã¯ããã»ã©é«äŸ¡ã§ã¯ãããŸããã
ããããçŽ15ç§åã«èããããã°ã©ã ã賌å
¥ããæºåãã§ããŠããªãå ŽåãIDAã¯æ©èœãå¶éããããã¢çãæäŸããŸãã ãã¢çã«ã¯ãåŠç¿ã§ããã¢ã»ã³ãã©ãã¡ã€ã«ã®çš®é¡ãéãããŠããŸãã
ãŸããã³ãŒãã倿Žããæ©èœã¯ç¡å¹ã«ãªã£ãŠããŸãããã ããx86ã¢ã»ã³ãã©ãŒåããããŸãããããŠããã¹ãŠã®å€æŽãå¥ã®ããã°ã©ã -Hex Fiendã§æåã§è¡ããŸããæ¡åŒµã¢ãŒã« ⊠x86? ARM?» â . , iOS- ARM-. x86. , , .
IDAãã€ã³ã¹ããŒã«ããŠå®è¡ããŸããäžçåã®ããã°ã©ããŒã§ããAda Lovelaceã«æè¿ãããŠã
ãŸããGoãã¿ã³ãæŒããŠãã ãããã¿ãŒããã«ã§ã¯ãïŒã¯ããã¯ãïŒãŸã ãã³ãã«ãã©ã«ããŒïŒMeme Collector.app
ïŒã«ããŸããæ¬¡ã®ã³ãã³ããå
¥åããŠããã®ãã©ã«ããŒãFinderã«è¡šç€ºããŸãã open -R .
æåŸã®ãã€ã³ããå¿ããªãã§ãã ãããããã®ãããèšå·ã¯ãçŸåšã®ãã©ã«ããŒããæå³ããŸããæ¬¡ã«ãéããFinderãŠã£ã³ããŠã§ãå³ã¯ãªãã¯> ããã±ãŒãžã®å
容ã衚瀺ïŒ
ïŒOS Mavericksã¯ãã·ã¢èªã§ãã³ãã«ããããã±ãŒãžããšåŒã³ãŸããããã®ååã¯ç§ã«ã¯æ
å ±ããªãããã§ãã- 泚ïŒãã³ãã«ããã±ãŒãžå
ã«ã¯ãå®è¡å¯èœãã¡ã€ã«ããããŸããMeme Collector
ãIDAãŠã£ã³ããŠã«ãã©ãã°ããŠãã€ã¢ãã°ããã¯ã¹ã衚瀺ããŸãã
å®éãIDAã¯ãã®ãã€ããªãi386ã¢ãŒããã¯ãã£ã®å®è¡å¯èœãã¡ã€ã«ã§ãããšå€æããŸãããèšå®ã¯äžèšã®èšå®ã«å¯Ÿå¿ããŠããå¿
èŠããããŸãïŒäœã倿Žããå¿
èŠã¯ãªããšæããŸãïŒ-[ Let's goïŒ ]ãã¯ãªãã¯ããŸããOKéã¢ã»ã³ãã©ãŒã¯ããã¡ã€ã«ãå°ããªæçã«è§£æãããã®ã¹ããŒã ïŒãããã³ã°ïŒãäœæããŸã-äžèšã§è¡ã£ãããšãããã...èšãæ¹...ããå°éçã«ã :)
ãObjective-C 2.0æ§é ãæ€åºãããŸãããããããè§£æããã¡ãœããã®ååã倿ŽããŸããïŒ "-ã¯ããçããŸãã ãè¿æ¥ãã¥ãŒãã«ã€ããŠè³ªåããå Žåã¯ãããããšçããŸããIDAããã€ããªãã¡ã€ã«ã®åŠçãå®äºãããšããã¡ãããã·ã§ãã¯ãåããŠã¡ã€ã³ç»é¢ã衚瀺ãããŸãã IDAãŠã£ã³ããŠãäžã®ãŠã£ã³ããŠãšããŸã䌌ãŠããªãå Žåã¯ãå·Šããã«ã§é¢æ°åãèŠã€ããŠstart
ã¯ãªãã¯ããçŸãããããŒãã£ãŒãã衚瀺ããããŸã§ã¹ããŒã¹ããŒãæŒããŸã:(
ç§ã®å Žåã1ã€ã®ã¹ããŒã¹ã§ã¯äžååã§ããããäœåãEnterããŒãæŒããªããã°ãªããŸããã§ããããäœãäœãªã®ãããã«ããããŸã-ãããPerïŒãããŠãXcodeãŸãã¯AppCodeã§ãããžã§ã¯ããéããŸãããã¬ãŒã³ããŒã·ã§ã³ãæžããããã«ãã³ãŒããå°ãèŠãŠãããŸããéãMoneyManager.mãšã¡ãœãããèŠãŠã¿ãŸãããbuyObject:
- (BOOL)buyObject:(id<PurchasableItemProtocol>)object { NSUInteger totalMoney = self.money.unsignedIntegerValue; NSUInteger cost = [object cost].unsignedIntegerValue; if (totalMoney < cost) { return NO; } _money = @(totalMoney - cost); return [self saveState]; }
ã¢ã«ãŽãªãºã ãåŠã¶ãããã¯éåžžã«ç°¡åã§ããã€ã³ã¹ã¿ã³ã¹å€æ°ã«_money
ååãªæ¯æãããªãå Žåã颿°ã¯æ»ãNO
ããã©ã³ã¶ã¯ã·ã§ã³ã¯å®äºããŸããã賌å
¥ãèš±å¯/çŠæ¢ãããã®æ¡ä»¶æã¯ã1ã€ã®ããŒã«å€ã«äŸåããŠããŸãããŠãŒã¶ãŒã«ã¯ååãªãéããããŸããïŒ ïŒã¹ãã¢å
ã®äžéšã®äººã
ã®è¡åãæãåºãããŸããïŒ- çŽïŒãã®ãã¹ããåé¿ããå ŽåïŒã¢ã»ã³ãã©ãŒçšèªã§ããžã£ã³ããªãŒããŒãïŒ-奜ããªãã®ã賌å
¥ã§ããå Žåãå€_money
ã¯è³Œå
¥æã®èŠçŽ ãšã¯èŠãªãããªããªããŸããããã§ãéã¢ã»ã³ãã©ã§åãã³ãŒããèŠã€ãããŸããã IDAã«æ»ãã[颿°]ããã«ã§ä»»æã®é¢æ°ãã¯ãªãã¯ããŠïŒãã®ããã«ãã¢ã¯ãã£ãã«ããã ãïŒãCtrl + FãæŒããŸãïŒãŸãã¯ã¡ãã¥ãŒããïŒ[ ç·šé ] > [ã¯ã€ãã¯ãã£ã«ã¿ãŒ]ïŒãå
¥åããã¯ã¹ã衚瀺ããã颿°ãæ€çŽ¢ããŸããbuyObject:
ãããèŠã€ãã£ããã¡ãœããã®ååãããã«ã¯ãªãã¯ããå¿
èŠããããŸãã IDAã«ã¯éã¢ã»ã³ãã©ãŠã£ã³ããŠã衚瀺ãããæ¡ä»¶ä»ãã¹ããŒãã¡ã³ããšã³ãŒãåå²ãå®å
šã«å®èšŒããŸããã¢ã»ã³ãã©ã¹ã¯ãŒã«ã³ãŒã¹ã®
ç¥èããªããŠãããœãŒã¹ã³ãŒãããã¯ãç·è²ã®ãå³ãç¢å°ããŸãã«ããã«ãŒã«è¡ãããå Žæã§ãããšæ³å®ã§ããŸããããã§å€ãã®ã¢ã¯ã·ã§ã³ãå®è¡ãããŸããèµ€ãç¢å°ãå·Šãã®äžã®çãã³ãŒãã¯ãããç°¡æœãªããã«äŒŒãŠããŸããã¢ã»ã³ãã©ãå°ãããŒãããŸããäžã®ãããã¯ã®äžçªäžã«ããæ¡ä»¶æŒç®åïŒããžã£ã³ããïŒãèŠãŠã¿ãŸãããããããã2ã€ã®ç¢å°ïŒèµ€ãšç·ïŒãåºãŸããããã¯buyObject:
return nil
jnb
ãã以äžã§ãªãå Žåã¯ãžã£ã³ããïŒãæªæºãã®å Žåã¯ç§»åïŒãæå³ããŸããã©ãããããã®åœä»€ããåžžã«ãžã£ã³ãã-åœä»€ã«çœ®ãæããå¿
èŠããããŸãjmp
ãæç€ºã眮ãæããã«ã¯ããããèŠã€ããå¿
èŠããããŸãããªãã©ã³ããããã«ã¯ãªãã¯ããŸãjnb
ãé»è²ã§åŒ·èª¿è¡šç€ºãããŸããæ¬¡ã«ãã¹ããŒã¹ããŒãæŒããŠããã¹ãã¢ãŒãã«åãæ¿ããŸããããã¯åãæ
å ±ã§ãããç·åœ¢åœ¢åŒã§ããã³ãã³ãã§è¡çªå·ãèŠã€ããŸãjnb
ïŒãã®è¡ã¯åŒ·èª¿è¡šç€ºãããŠããŸãïŒïŒ
ç§ã®å Žåãã¢ãã¬ã¹ã¯0x00018D88ã§ãããä»ã®ã¢ãã¬ã¹ã䜿çšã§ããŸãããªãã©ã³ãã³ãŒããjnb short
ãã¯0x73??
ãçå笊ã衚瀺ãããçžå¯Ÿãªãã»ããããã€ãåäœã§ç€ºãå Žæã§ãããªãã©ã³ãã³ãŒãã0xEB??
-ç¡æ¡ä»¶ãžã£ã³ãã³ãŒã " ã«å€æŽããå¿
èŠããããŸãjmp short
ãïŒåããã€ãæ°ã®å ŽåïŒããªãã©ã³ãã³ãŒãã¯ã©ãã§å
¥æããŸãããïŒããšãã°ãIntel Software Developer's ManualããïŒã¡ãªã¿ã«ããšããµã€ãã£ã³ã°ãªèªã¿ç©ã§ãïŒïŒããŠã³ããŒãïŒãŸã ããŠã³ããŒãããŠããªãå ŽåïŒHex Fiendãããšãã°ããã©ã«ãã«ã³ããŒããŠã€ã³ã¹ããŒã«ããŸã/Applications
ã ïŒãŸã ãã³ãã«ãã©ã«ããŒãMeme Collector.appãã«ãããšä»®å®ããŠïŒã³ãã³ããå
¥åããŸãïŒ open -a "/Applications/Hex Fiend.app/" "Meme Collector"
ãŠã£ã³ããŠãéãããã€ããªã衚瀺ãããŸããããã§ãã ããã«ãããŸã-ç§ãã¡ã®å人ïŒ__objc_classname
ãšä»ã®ã»ã¯ã·ã§ã³ãç§ãã¡ã®åã«ã¯ãæããã«å®è¡å¯èœãã¡ã€ã«ã®ããããŒããããŸãã
ã¿ãŒããã«ã«å
¥åããŸãïŒ otool -l "Meme Collector" | grep -a10 "sectname __text"
åã«èŠãããã«ãotool -l
ãã€ããªãã¡ã€ã«ãã¡ã¢ãªã«ããŒãããã³ãã³ãã衚瀺ããŸããã³ãŒãã»ã¯ã·ã§ã³ïŒãããã¹ããã»ã¯ã·ã§ã³ïŒã«é¢å¿ããããããã³ãã³ãã§æ€çŽ¢é åãçµã蟌ã¿grep
ãŸããæ¬¡ã®ãããªãã®ãåŸãŸããïŒ segname __TEXT vmaddr 0x00001000 vmsize 0x0002e000 fileoff 0 filesize 188416 maxprot 0x00000007 initprot 0x00000005 nsects 11 flags 0x0 Section sectname __text segname __TEXT addr 0x00002970 size 0x0001dec3 offset 6512 align 2^4 (16) reloff 0 nreloc 0 flags 0x80000400 reserved1 0 reserved2 0
ããã§ã¯ãã»ã¯ã·ã§ã³ã®éå§ã¢ãã¬ã¹ïŒaddr
ïŒ0x00002970ãããã³ã·ããïŒoffset
ïŒ-6512 ïŒ10鲿°ïŒã衚瀺ãããŸããIDAãååŸããã³ãŒããéå§ããéå§ã¢ãã¬ã¹ãæ£ç¢ºã«0x2970ã§ããããšã確èªã§ããŸãããã®ããã«ã¯ãæäžéšãŸã§ã¹ã¯ããŒã«ïŒãç·åœ¢ã圢åŒïŒããå¿
èŠããããŸããïŒç¹å®ã®å€ã¯ç°ãªãå ŽåããããŸãããæå³ã¯åãã§ãïŒããããïŒ
ç®è¡ãè¡ãæéïŒåœä»€ã®ãªãã»ããjnb
ïŒãããã¹ããã»ã¯ã·ã§ã³ã§èŠã€ãã£ãïŒããã€ããªãã¡ã€ã«å
ã®çµ¶å¯Ÿå€ã«åèšç®ããå¿
èŠããããŸãã IDAã§èŠã€ãã£ãã¢ãã¬ã¹ã®ãã€ãã倿Žããããšãããšãããããã©ããã§ã¯ã©ãã·ã¥ããã£ããããŸãããããã¯äžèŽããŸãããæ°ãæ£ããªãããã«ã次ã®åŒãçšæããŸããã{ãã€ããªãã¡ã€ã«å
ã®ã³ãã³ãã®çµ¶å¯Ÿäœçœ®} ={ã³ãã³ãã¢ãã¬ã¹}-{ããã¹ãã»ã¯ã·ã§ã³ã®éå§ã¢ãã¬ã¹} + {ããã¹ãã»ã¯ã·ã§ã³ã®ã·ãã}ç§ã®å ŽåïŒã³ãã³ãã¢ãã¬ã¹jnb
= 0x18D88ïŒIDAããïŒããã¹ãã»ã¯ã·ã§ã³ã®éå§ã¢ãã¬ã¹= 0x2970ïŒof otool
ïŒããã¹ãã»ã¯ã·ã§ã³ã®ã·ãã= 10鲿°6512ïŒof otool
ïŒèšç®æ©ãååŸããã¡ãã¥ãŒããåãæ¿ããŸãïŒ[衚瀺]> [ããã°ã©ããŒçš ] ïŒ10鲿°ãš16鲿°ãå
¥åãããšãã¯ãç®çã®çªå·ã·ã¹ãã ã«åãæ¿ããããšãå¿ããªãã§ãã ããïŒãç§ãåŸãïŒ
0x18D88-0x2970 + 6512 = 0x17D88æ¡åŒµã¢ãŒã«Advanced Mode» , 0x1000 (0x18D88 â 0x17D88).
èšç®ãæ£ããããšã倿ããå Žåãããã¯jnb
IDA ã§ç¢ºèªããåœä»€ã®ã¢ãã¬ã¹ã«ãªããŸãã Hex Fiendã§ãâLïŒãŸãã¯[ç·šé]> [ãªãã»ãããžãžã£ã³ã ]ã¡ãã¥ãŒïŒãæŒããŠãã¢ãã¬ã¹å
¥åãã£ãŒã«ããéããŸããã¢ãã¬ã¹å€ãå
¥åããŸãïŒ16é²åœ¢åŒã§å
¥åããå Žå0x
ã¯ãæåã«å¿ããªãã§ãã ããïŒãããŒããäœããã®çç±ã§10鲿°ã®è¡çªå·ãããŠãåèšç®ããŠã¿ãŸãããïŒ0x17D88 = 97672ãã€ãŸã97664ã®äœçœ®ãããããã«8ãã€ããå³ã«æ°ããå¿
èŠããããŸãã 8ãã€ã= 16æ¡ã®16鲿°= 2ã€ã®4ãã€ãã¯ãŒããã芧ã®ãšãããHex Fiendã¯åèªã«åŸã£ãŠãã€ããªãããã¹ãããã°ã«ãŒãåããŸãã
æåã®2ã€ã®åèªãã¹ããããã3çªç®ã®åèªã®å
é ã§-ããã«-æäœã³ãŒããæ¿å
¥ããŸã0x7304
ã0x73
-åœä»€ã³ãŒããããã³0x04
-ãªãã»ãããããã»ããµãåæ¹ã«ããžã£ã³ãããããã€ãæ°ãæ£ãã0x73
äž0xEB
ïŒæ
éã«ïŒ1 [Backspace]ãæŒãã¯ããã«1ãã€ã= 2鲿°ã®æåãåé€ããŸãïŒããã¡ã€ã«ãä¿åïŒâSïŒããŠéããŸããã·ãã¥ã¬ãŒã¿ãéããã¡ã¢ãªããã¢ããªã±ãŒã·ã§ã³ãåé€ããŠãå床å®è¡ããŸãïŒIDEããã§ã¯ãªããã·ãã¥ã¬ãŒã¿ããåã³ã³ãã€ã«ããªãããã«ïŒããéããªããªããŸã§ããŒã ãè²·ãã ããéããããé«äŸ¡ãªè£œåã賌å
¥ããããšãããšãã«äœãèµ·ããŸãããïŒã¯ããããŠãŒã¶ãŒã¯ãéãæã£ãŠããŸããïŒããšããæ¡ä»¶ã®ãã§ãã¯ãæ¬åœã«æšãŠãŸããããéããªããŠãããã©ã³ã¶ã¯ã·ã§ã³ã¯å®è¡ãããŸãããããŠå°ããªããŒãã¹ïŒç¬Šå·ãªãã®å€_money
ãã«ãŒããã¯ãã¡ã¢ãªå
ã®æ°å€ã®è¡šçŸã®ç¹æ§ã«ãããè² ã§ã¯ãªã10 32ïŒçŽ40åïŒåŒ±ã«ãªããŸãããªããŒã¹ãšã³ãžãã¢ãªã³ã°ä¿è·
ã©ããã£ãŠèªåãå®ãã®ã§ããïŒèŠããŠãããç§ã¯èšã£ãïŒãäœãå®å
šã§ã¯ãããŸãããããã®ã¹ããŒãã¡ã³ãã¯ããã§ãæ©èœããŸãããªããŒã¹ãšã³ãžãã¢ãªã³ã°ã¯éåžžã«é£ããå ŽåããããŸãããæ»æè
ãæ·±å»ãªå Žåãæ»æè
ãæ¢ããããšã¯ã§ããŸãããããªãã®å¯äžã®æã¿ã¯ãæ»æè
ãããŸãã«ãæ··ä¹±ãããŠããã®ããžãã¹ãæŸæ£ããä»ã®ã¢ããªã±ãŒã·ã§ã³ãç Žå£ããããšã§ãã1ã€ã®æ¹æ³ã¯ãããªããã»ããµãä»ããŠéèŠãªã¯ã©ã¹ãšã¡ãœããã®ååã倿Žããããšã§ããIDEã§ãããžã§ã¯ããéãããã¡ã€ã«ãMeme Collector-Prefix.pchããèŠã€ããŸããè¡ã远å ããŸãã #define MoneyManager DS_UIColor_Theme
ãã®ã³ãŒãã¯ãåºçŸãããã¹ãŠã®ãMoneyManager
ãããã¯ã©ãã«ãŒã«ãšã£ãŠããŸãé¢çœããªãååããã«çœ®ãæããŸãDS_UIColor_Theme
ããã®ã¢ãããŒãã¯ãäœãå£ããªãããã«çްå¿ã®æ³šæãæã£ãŠäœ¿çšããå¿
èŠããããŸããéžæããæ°ããååãã¢ããªã±ãŒã·ã§ã³ã®ã©ãã«ãèŠã€ãããªãããšã100ïŒ
確èªããå¿
èŠããããŸããããããªããšãæ··ä¹±ããŠããŸããã¢ããªã±ãŒã·ã§ã³ã§äžå¯è§£ãªããšãèµ·ããå§ããŸããéåžžãå®è¡å¯èœãã¡ã€ã«ã«ã¯ãã¢ãã¬ã¹ãã颿°ãã¡ãœããã®èªã¿åãå¯èœãªååãžã®ãããã³ã°ãä¿åãããŠããã·ã³ãã«ããŒãã«ããããŸãããããŠä»ãã³ãŒããæ··åããå¥ã®æ¹æ³ã¯ããããžã§ã¯ãããã«ãããåŸã«ãã£ã©ã¯ã¿ãŒããŒãã«ãåé€ããããšã§ãã Objective-Cã¡ãã»ãŒãžã¯åäžã®é¢æ°ã§åŠçããããããããã¯Cããã³C ++颿°ã®é衚瀺ã«é©ããŠããŸãobjc_msgSend()
ãMoneyManager.mãå床éããŸã 次ã®C颿°ãå
é ã«è¿œå ããŸãã BOOL aSecretFunction(void) { return YES; }
次ã«ãã¢ããªã±ãŒã·ã§ã³ãå床ã³ã³ãã€ã«ããŸããã·ã³ãã«ããŒãã«ã§ãã®é¢æ°ã®ååšã確èªããŠãã ãããã¿ãŒããã«ããïŒ nm "Meme Collector" | grep aSecretFunction
ãã®ã³ãã³ãnm
ã¯ãæåã®è¡šã衚瀺ããgrep
颿°åã§ãã£ã«ã¿ãŒããŸããããã«ãããŸãïŒ 00018b8f t _aSecretFunction
iOSã¢ããªã±ãŒã·ã§ã³ããæåããŒãã«ãåé€ããç°¡åãªæ¹æ³ã¯ããããžã§ã¯ãèšå®ã§2ã€ã®ãªãã·ã§ã³ãèŠã€ããããšã§ãïŒDeployment PostprocessingãšStrip Linked Productã
ãããŠYesã«èšå®ïŒæ¬¡ã«ããããžã§ã¯ãããã¯ãªãŒã³ãããå¿
èŠããããŸãïŒXcodeïŒProduct> CleanãŸãã¯AppCodeïŒRun> CleanïŒãããŠåã³ã³ãã€ã«ããŸããæ¬¡ã«ãã¿ãŒããã«ã«ç§»åããŠåãã³ãã³ããå®è¡ããŸãã nm "Meme Collector" | grep aSecretFunction
ãããïŒ
ãåç
§ãããã£ã©ã¯ã¿ãŒãåé€ããŸããaSecretFunction()
ãããã§ãã¯ã©ãã«ãŒã¯ã³ãŒãå
ã®éèŠãªãã€ã³ããèŠã€ããããã«ããå€ãã®æéãè²»ããå¿
èŠããããŸããæ¬¡ã¯ïŒ
æ»æè
ãã§ããããšã確èªããŸããïŒ- Objective-Cã»ã¬ã¯ã¿ãŒã®ååãèŠãããã
- ã¢ããªã±ãŒã·ã§ã³ãã¢ã¯ã»ã¹ãããã¡ã€ã«ãæäœãã
- ãããã¯ãŒã¯ã®çžäºäœçšãååããã³å€æŽããŸãã
- ã©ã³ã¿ã€ã ã管çãã
- ã¢ããªã±ãŒã·ã§ã³ã®å®è¡å¯èœãã¡ã€ã«ã倿ŽããŸãã
ã¢ããªã±ãŒã·ã§ã³ãäœæãããšãããããã®ããšãèŠããŠããããšãéèŠã§ããã¢ããªã±ãŒã·ã§ã³ãããå®å
šã«ããããã«ã©ãã ãã®åŽåãè²»ããããèããŠãã ãããã»ãã¥ãªãã£ãšã¯äœã§ããïŒããã¯åžžã«ããªãœãŒã¹ïŒæéïŒããŠãŒã¶ãŒã®åé¡ã®ã¬ãã«ãããã³ãããã³ã°ã®å¯èœæ§ã®éã®ãã©ã³ã¹ã§ããIOSã¢ããªã®ã»ãã¥ãªãã£ã¯æ·±å»ãªãããã¯ã§ããããªãã¯ãŸã å€ããåŠã¶ããšãã§ããŸãããããŸã§ã®ãšããã衚é¢ã«å°ãã ãå·ãä»ããŸããããããã¬ãŒããã³ãã®ä»ã®åæããŒã«ã®æ©èœã®å
šç¯å²ã¯ãããã«æ·±ããšããã«ãããŸãããã®ãããã¯ã«èå³ãããå Žåã¯ããã¹ãããã€ã¹ã®ãžã§ã€ã«ãã¬ã€ã¯ã«ã€ããŠèããããšããå§ãããŸãããã¡ã€ã«ã·ã¹ãã ã¯ãç ç©¶ã®ããã®è±å¯ãªé£åãæäŸããŸããè±èªã«åé¡ããªãå Žåã¯ãiOSã¢ããªã±ãŒã·ã§ã³ã®ãããã³ã°ãšä¿è·ã確èªããŠãã ãããïŒèè
Jonathan ZdziarskiïŒãããã¯å°ãæä»£é
ãã§ããïŒAppleã¢ããªã±ãŒã·ã§ã³ã®æå·åã¡ã«ããºã ã®å€æŽãã°ãŒã°ã«ã§èª¿ã¹ãå¿
èŠããããŸãïŒããã®èšäºã®èè
ã¯iOSãšã»ãã¥ãªãã£ã«é¢ãã圌ã®ãæ°ã«å
¥ãã®æ¬ã®1ã€ã§ããããã«2åã®æ¬ïŒãããã³ã°ïŒThe Art of Exploitationã2nd Edition by Jon EricksonMac OS X and iOS InternalsïŒTo the Apple's Core by Jonathan Levinãã©ãŒã©ã ïŒ
http://www.woodmann.comhttp://www.reddit.com/r/ReverseEngineeringã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã«é¢ããèšäºïŒhttp : //blog.timac.org/?p=761èè
ã¯ã³ã¡ã³ããããã³ç¿»èš³ã§èšè¿°ã§ããŸããdev @
x128.ruã¡ãŒã«ã«æžã蟌ã¿ãŸãã