iOS开发之常用技术点反编译

破解《Reveal》

2018-12-29  本文已影响100人  退役程序员Franco

Reveal简介

Reveal能查看iOS App的视图布局,而且能在App运行时进行视图调试。

破解过程

下载下来打开后,出现一个Welcome窗口挡在上面

Welcome
想看看这个Welcome窗口属于哪个类,考虑用Xcode的View UI Hierarchy
打开XcodeFile -> New -> Project...,选择 macOS -> Cocoa Framework
工程创建好后,Debug -> Attach to Process,选择Reveal
Could not attach
Attach失败,应该是开启了反调试。

hopper打开Reveal.app/Contents/MacOS/Reveal,搜索ptrace,找到调用的地方:

0000000100340632         call       imp___stubs__ptrace

Modify -> Assemble Instruction...,输入jmp 100340637

0000000100340632         jmp        EntryPoint+28

修改后重新打开Reveal,报损坏:
(此时Xcode Debug -> Attach to Process 已经能连接上了)

damaged
它验证签名了,hopper打开Reveal.app/Contents/MacOS/Reveal,搜索字符串 sign ,找到 Code Signing Verification Failedx查看引用
00000001001ff970         je         loc_1001ff97a

00000001001ff972         mov        r12, rbx
00000001001ff975         jmp        loc_1001ffa22

                     loc_1001ff97a:
00000001001ff97a         inc        qword [0x100522520]                         ; CODE XREF=sub_1001ff950+32
00000001001ff981         mov        rdi, qword [objc_cls_ref_IBAAnalytics]
00000001001ff988         call       imp___stubs__swift_getInitializedObjCClass
00000001001ff98d         mov        rsi, qword [0x1004fb7f0]                    ; @selector(sharedInstance), argument "selector" for method imp___stubs__objc_msgSend
00000001001ff994         mov        rdi, rax                                    ; argument "instance" for method imp___stubs__objc_msgSend
00000001001ff997         call       imp___stubs__objc_msgSend
00000001001ff99c         mov        rdi, rax                                    ; argument "instance" for method imp___stubs__objc_retainAutoreleasedReturnValue
00000001001ff99f         call       imp___stubs__objc_retainAutoreleasedReturnValue
00000001001ff9a4         mov        r14, rax
00000001001ff9a7         lea        rax, qword [0x1003fb920]                    ; "Code Signing Verification Failed"

loc_1001ff97a就是验证签名失败的逻辑,所以把下面的指令

00000001001ff970         je         loc_1001ff97a

修改为jmp 1001ff972

00000001001ff970         jmp        sub_1001ff950+34

重现打开reveal,又能看到Welcome界面了


DMActivationController

看到类名DMActivationController,在Reveal.app/Contents/Frameworks/DevMateKit.framework/Versions/A/DevMateKit里面找到它的定义。
GitHub搜索DevMateKit,发现是一个第三方库:
https://github.com/DevMate/DevMateKit
(以后看到这种Welcome界面,第一时间要想到是这个第三方库了。)

hopper打开DevMateKit
找到下面的函数,直接ret完事:

                     -[DMActivationController runActivationWindowInMode:initialActivationInfo:withCompletionHandler:]:
000000000002564d         ret

重新打开,破解成功了!

上一篇下一篇

猜你喜欢

热点阅读