逆向4(Reveal ,LLDB & debug server,Hopper Disassembler)

Reveal
  • 简介
  1. Xcode6开始苹果已经将Reveal查看自己开发程序界面信息的功能集成到了Xcode中, 程序运行起来之后点击Debug View hierarch按钮即可,但是会有部分信息不显示,布局显示不精确。
  2. 相比xcode自带的视图调试(只能看),reveal强大的不是一丁点,可以修改视图的属性,并实时在模拟器(真机)上显示变化。(当然只是临时修改的属性,不会修改工程的实际代码,如果真实修改,还是需要修改的工程源代码的)。
  3. reveal最强大的一点是可以通过它查看和分析其他App视图元素构成和布局。
  • 下载地址:http://revealapp.com/
    是一个收费软件,可以免费试用30天。
  • 准备工作
以下都是在cydia下载
1. OpenSSH
一个允许其他终端远程访问当前设备的插件
2. Apple File Conduit 2
一个确保越狱插件正常运行的补丁
3. Cycript 
Cycript是一款由saurik推出的脚本语言,可以帮助我们测试App
4. Reveal Loader
RevealLoader帮助我们通过Reveal来偷窥别人的应用
  • 越狱使用方式(Reveal软件所在的mac设备与越狱后的iOS设备置于同一个局域网内)
    (1). cydia搜索Reveal Loader安装
    (2). ssh连接iphone
    ssh root@192.168.0.101
    (3). 安装后去到 /Library路径下是看是否有RHRevealLoader目录
    cd /Library/
    (4). 如果没有自己新建一个,然后将Reveal中的iOS动态库libReveal.dylib复制到此目录下
cd /Library
mkdir RHRevealLoader
cd RHRevealLoader
scp zl@192.168.0.102:/Users/zl/Desktop/iOSRE/libReveal.dylib .

(5).上面的都做好以后,ihpone里找到 设置->Reveal->Enable Applications,然后打开你需要看的app,再在mac上打开Reveal,连接到你的iphone,就可以使用了。(注意要让app处于前台)

注:如何找到Reveal软件的动态库所在目录
Mac上的Reveal自带了两个库,一个是libReveal.dylib,一个是Reveal.framework。在未越狱的设备上使用库是后者。

<1> 在mac上安装好Reveal后打开,Help->Show Reveal Library In Finder->iOS Library,就可以看到libReveal.dylib,这是越狱环境下要用的。
<2> 重新打开一个Terminal,使用如下命令:

//找到目录
cd /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries
//打开文件夹
open .

<3>安装iExplorer。iExplorer可以查看你的Mac上所有iOS设备的备份文件,当然也包括非越狱设备的备份文件

LLDB & debug server

LLDB & debug server可以帮助我们调试应用。debug server在我们的设备连接Xcode调试时已经被安装在设备的/Developer/usr/bin中,但由于权限问题只能调试我们自己的App,还需要做一下配置。

(1) ssh连接iPhone,从设备中拷贝debugserver到本地

cd /Developer/usr/bin
scp debugserver zl@192.168.0.102:/Users/zl/Desktop

(2) 给debugserver瘦身和重新签名,并放入/usr/bin/目录下方便随时调用(mac终端)
lipo -thin arm64 ./debugserver -output ./debugserver-arm64
(3) 配置task_for_id权限(mac终端)
下载http://iosre.com/ent.xml到debugserver所在目录(确保已经安装了ldid)
ldid -Sent.xml debugserver-arm64
(4) 将处理过的debugserver放回iPhone,并配置x权限

scp debugserver-arm64 root@192.168.0.101:/usr/bin/debugserver
ssh root@192.168.0.101
chmod +x /usr/bin/debugserver

(5) 使用方式

  • 方式一: Wi-Fi连接(速度较慢)
    ssh root@192.168.0.101
    debugserver *:1234 -a "WeChat"
    表示依附在微信上监听来自任意ip:1234的lldb请求
ssh root@192.168.0.101 
iPhone:~ root# debugserver *:1234 -a "WeChat"
debugserver-@(#)PROGRAM:debugserver  PROJECT:debugserver-340.3.51.1
 for arm64.
Attaching to process WeChat...
Listening to port 1234 for a connection from *...

process connect connect://192.168.0.101:1234

lldb                                                                     
(lldb) process connect connect://192.168.0.101:1234
Process 826 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
    frame #0: 0x0000000196da9be8 libobjc.A.dylib`objc_msgSend + 40
libobjc.A.dylib`objc_msgSend:
->  0x196da9be8 <+40>: br     x17
    0x196da9bec <+44>: cbz    x16, 0x196da9d80          ; _objc_msgSend_uncached_impcache
    0x196da9bf0 <+48>: cmp    x12, x10
    0x196da9bf4 <+52>: b.eq   0x196da9c00               ; <+64>
(lldb) 

连接到设备上的debugserver,出现上面结果就是连接成功了。

  • 方式二: 使用usbmuxd工具通过USB口转发ssh和调式信息

下载地址:
http://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.gz

使用配置:下载完成后保存在桌面

cd /Users/zl/Desktop/usbmuxd-1.0.8/python-client
//添加执行权限
chmod +x tcprelay.py
./tcprelay.py -t 22:2222

使用方式:

完全脱离WiFi,使用USB连接到iOS,用lldb调试WeChat。
i) 把本地2222(这个端口监听ssh)端口转发到iOS的22端口(终端处于监听状态)
cd /Users/zl/Desktop/usbmuxd-1.0.8/python-client
./tcprelay.py -t 22:2222
ii) ssh过去并用debugserver attach到WeChat(新开一个终端)
ssh root@localhost -p 2222
debugserver *:6789 -a "WeChat"
iii) 把本地6789端口转发到iOS的6789端口(再开一个终端)
cd /Users/zl/Desktop/usbmuxd-1.0.8/python-client
./tcprelay.py -t 6789:6789
iv) 用lldb开始调试(再开一个终端)
lldb
process connect connect://localhost:1234
  • LLDB常用的命令
A. 显示当前所有进程信息
(lldb) image list -o -f
回车后, 即可看到以下信息

[  0] 0x00035000 /System/Library/CoreServices/SpringBoard.app/SpringBoard(0x0000000000036000)
[  1] 0x00019000 /Users/mac/Library/Developer/Xcode/iOS DeviceSupport/7.1.2 (11D257)/Symbols/usr/lib/dyld
[  2] 0x00453000 /Library/MobileSubstrate/MobileSubstrate.dylib(0x0000000000453000)
[  3] 0x0182f000 /Users/mac/Library/Developer/Xcode/iOS DeviceSupport/7.1.2 (11D257)/Symbols/System/Library/PrivateFrameworks/StoreServices.framework/StoreServices
...
上面的信息中, 左边方括号的数字代表模块的序号, 第二列如0x00035000代表ASLR偏移, 简单理解为位移即可, 第三列代表模块的全路径, 括号后代表位移之后的起始地址. 我们关注的主要是第二列的位移.
B. 断点设置
(lldb) br s -a address
如在某个地址前面打一个断点, address代表十六进制的地址, 如下:
(lldb) br s -a 0x00234a
我们可以通过IDA反编译二进制文件, 然后定位目标函数的位置, 找到偏移前的基地址, 然后通过LLDB查看ASLR偏移, 两者相加, 即可找到目标函数的在运行时的真实地址, 通过上面的断点设置, 直接在该目标函数下断点. 来验证我们的一些推理, 用以进一步的查找以及逆向.
C.断点相关设置
当进程停止, 可输入"c"让进程继续:
(lldb) c
"c"即continue.
禁用所有断点:
(lldb) br dis
"dis"即disable, "br"即breakpoint.
禁用某个断点:
(lldb) br dis 6
6代表第几个断点.
启动所有断点:
(lldb) br en
启动某个断点:
(lldb) br en 5
删除所有断点:
(lldb) br del
删除某个断点:
(lldb) br del 5
在执行某个指令之前, 预先设置一些指令:
(lldb) br del 8
打印寄存器的值:
(lldb) p $r6
执行下一条指令, 并且进入函数体:
(lldb) ni
执行下一条指令, 并且不进入函数体:
(lldb) si
给指定的寄存器赋值, 用以验证分支:
(lldb) register write r5 0
上述命令作用为修改r5寄存器的值为0.

参考博客 http://www.cnblogs.com/ludashi/p/5730338.html

Hopper Disassembler
  • 简介
    是一款是32位和64位的二进制反汇编工具,反编译和调试。基本上满足了工作上的反汇编的需要,包括伪代码以及控制流图(Control Flow Graph),支持ARM指令集并针对Objective-C的做了优化。
  • 下载链接
    www.sdifen.com/hopperdisassembler408.html
    链接里面安装破解版非常详细
  • 官网
    https://www.hopperapp.com/
    与 IDA 相同,官网也提供了 Demo 的试用版。试用版也可以进行反汇编,但是不能保存 *.hop 文件。所以,用于学习的话 Hopper 的 Demo 版就足够了。
  • 使用Hopper
    与 IDA 不同, Hopper 不能直接将 Mach-O 文件导入工作区,需要下载应用的 *.ipa 文件,并将文件后缀改为 *.zip,解压该 zip 文件后就可看到 Payload 文件目录,在该目录下就存有对应应用的 package 包文件(. app 文件),将.app文件拖入Hopper分析。


    01.png
02.png

当 Hopper 分析完全部二进制后,按住 Option + Enter 键,就可看到 Hopper 反编译后的伪代码.
与 IDA 相比, Hopper 反编译后的伪代码的逻辑与 IDA 反编译得到的伪代码逻辑类似,但多了 r0~r8 等寄存器,阅读性相较而言差一些,但是,仍然可以根据伪代码还原出源代码.
Hopper 除了可以查看汇编代码以外,还可以直接对 Mach-O 文件进行修改,然后重新生成二进制文件(Demo 版没有这个功能)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容