ios定位权限plist_iOS逆向协议

IDA + Charles

235701146af720b329a29b5031ee27fd.png

我们根据抓包得到的签名格式上看,那个 V2.0 + md5,非常显眼。于是 V2.0 就成了我们重点关注对象。ee4a9ffb9abafc1dbde97a07191b0c84.png

在 IDA 中 Shift+F12,打开 Strings,搜索 2.0

ead92350e3d1a11b70375108b2d0d7fc.png

V2.0%@ 明显是 stringWithFormat 的参数,跟进去看一下。发现一个叫做

[BaseEngine RunRequest:path:useSSL:completionHandler:errorHandler:finishHandler:]

引用了他,这个类名看起来非常像我们找的地方。打开这个类,F5 一下。

442bf34d637e4fdb6ebb1153e0e1ebbc.png

可以看到,v95 就是 md5 字符串了。从上文得知 v95 是从 md5DecodingString 这个方法算出来的。于是我们只需要在 md5DecodingString 这里 Hook 一下,就能知道原文是什么了。

这里吐槽一句,为什么是 md5 的方法叫做 Decoding 而不是 Encoding…

在方法列表里搜一下,会发现 md5DecodingString 是 NSString-Extension.h 这个 Category 的一个方法。

于是我们仅需在此处下一个断点,就能得到原文了。

lldb

上面是静态分析,下面讲的就是动态调试了。

Debug Server 配置

debugServer 顾名思义,这个是用来做远程调试服务器的,而这个文件其实大伙儿已经有了。

我们有两个途径拿到他:

  1. 用 scp 从 iDevice /Developer/usr/bin/debugserver 目录下获得

  2. 从 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/ DeviceSupport/7.0.3\ \(11B508\)/DeveloperDiskImage.dmg 获得,中间的那个 DeviceSupport 可以根据具体路径替换。

拿到它之后并不能直接使用,因为默认是没有权限的。

我们要给他 task_for_pid 的权限,书写 entitlements.plist 如下:

         com.apple.springboard.debugapplications         run-unsigned-code         get-task-allow         task_for_pid-allow

签名:codesign -s - --entitlements entitlements.plist -f debugserver

之后,把这个传回 iDevice /usr/bin/debugserver

lldb 挂载

在要挂载的进程存在的时候,我们在 ssh 中执行

debugserver *:8888 -a XApp

这时就会发现 XApp,已经被断点了,一切都静止了。

在本地命令行中执行:

> lldb
> platform select remote-ios
> process connect connect://iOSIP:8888

过一会儿就会看到

* thread #1: tid = 0x17f0, 0x0000000196d95ca0 libsystem_kernel.dylib`mach_msg_trap + 8, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP

表示我们 lldb 已经挂载成功了

Address 断点

正常的 App Store 项目中,是没有符号的。所以我们常用的符号断点是不行的,但是我们可以给函数的内存地址下断点。

21ee777e27539e2df19feeec34ffa3b8.png

Class-dump

我们先要知道目标函数的地址是什么。这个就需要 Class-Dump 了。

Class-Dump XApp -H -A -S -o headers/

这句话翻译一下,把 XApp dump出头文件,并标记 IMP 的地址,方法排序输出到 headers 文件夹。

我们在 headers 中就可以找到刚才说的 NSString-Extension.h。

#import "NSString.h"
@interface NSString (Extension) //节选

- (id)md5DecodingString; // IMP=0x000000010024b99c
- (id)md5StringFor16; // IMP=0x000000010024b9b8
- (id)objectFromJSONString; // IMP=0x000000010024d078

@end

于是 IMP 的地址就是: 0x000000010024b99c

获取 ASLR 偏移量

ASLR(Address space layout randomization)是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。据研究表明ASLR可以有效的降低缓冲区溢出攻击的成功率,如今Linux、FreeBSD、Windows等主流操作系统都已采用了该技术。

我们通过 image 方法获取偏移量

image list -o -f
[  0] 0x00000000000f8000 /var/mobile/Applications/27C2DBB3-34A3-4B71-91F3-EBB81F4E48E8/XApp.app/XApp(0x00000001000f8000)

其中,0x00000000000f8000 就是我们想要的偏移量。

断点

终于跑到了最后一步,根据我们拿到的地址下断点:

br s -a "0x00000000000f8000+0x000000010024b99c"

然后提示:

Breakpoint 1: where = XApp`___lldb_unnamed_function11956$XApp, address = 0x000000010034399c

表示断点下完了,我们执行 c 或 continue 让 app 跑起来,触发一个网络请求,就会发现断点停下来的。

* thread #1: tid = 0x17f0, 0x000000010034399c XApp`___lldb_unnamed_function11956$XApp, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
   frame #0: 0x000000010034399c XApp`___lldb_unnamed_function11956$XApp
XApp`___lldb_unnamed_function11956$XApp:
->  0x10034399c :  mov    x8, x0
   0x1003439a0 :  adrp   x9, 1160
   0x1003439a4 :  ldr    x0, [x9, #3368]
   0x1003439a8 : adrp   x9, 1152

由于 OC 方法 $arg1 就是 self,这里的 self 是 NSString,所以仅需

po $arg1

就得到了 MD5 之前的字符串:

/api/recommended/getapp_id=1002client_info={
 "channel" : "0",
 "os" : "iOS",
 "bssid" : "90:72:40:f:e5:a9",
 "model" : "iPad4,4",
 "ssid" : "TieTie Tech 5GHz",
 "start_time" : "1457361686666",
 "version" : "7.1.2",
 "resume_time" : "1457361686666"
}curidentity=0expectId=1148692page=2pageSize=15req_time=1457362529031sortType=1t=BAWEEFQUzATtTYlE2Cz4BZw07UGVXZwZjXDYNNA..uniqid=22B8980704196B96AB30264A2FE2AA46v=4.2bf646f6f09c07e911a6239780ea1b7df
断点变 Log

Xcode 中的 Action 断点,在命令行下也是可以玩的:

breakpoint command add 1

> po $arg1
> c
> DONE

062483c03ab957a85799a764f9e33922.png

(lldb) x $x0 $x0+600

0x157575c38: 7b 22 64 69 72 65 63 74 69 6f 6e 22 3a 22 64 6f  {"direction":"do

0x157575c48: 77 6e 22 2c 22 68 5f 6d 6f 64 65 6c 22 3a 22 69  wn","h_model":"i

0x157575c58: 50 68 6f 6e 65 20 35 73 20 28 47 6c 6f 62 61 6c  Phone 5s (Global

0x157575c68: 29 22 2c 22 68 5f 63 68 22 3a 22 61 70 70 73 74  )","h_ch":"appst

0x157575c78: 6f 72 65 22 2c 22 68 5f 61 70 70 22 3a 22 7a 75  ore","h_app":"zu

0x157575c88: 69 79 6f 75 22 2c 22 63 5f 74 79 70 65 73 22 3a  iyou","c_types":

0x157575c98: 5b 31 2c 32 2c 33 2c 39 2c 31 30 2c 37 2c 38 5d  [1,2,3,9,10,7,8]

0x157575ca8: 2c 22 68 5f 6e 74 22 3a 31 2c 22 68 5f 61 76 22  ,"h_nt":1,"h_av"

0x157575cb8: 3a 22 34 2e 32 2e 31 22 2c 22 74 6f 6b 65 6e 22  :"4.2.1","token"

0x157575cc8: 3a 22 54 35 4b 61 4e 38 4b 64 4b 69 6f 65 49 64  :"T5KaN8KdKioeId

0x157575cd8: 6d 69 36 58 72 68 39 59 45 79 39 37 4b 30 65 4c  mi6Xrh9YEy97K0eL

0x157575ce8: 51 6d 6e 5f 4e 76 32 62 38 35 5a 78 34 45 74 50  Qmn_Nv2b85Zx4EtP

0x157575cf8: 72 44 69 4f 2d 2d 58 65 75 4d 33 2d 5f 31 6c 5a  rDiO--XeuM3-_1lZ

0x157575d08: 6d 72 7a 30 2d 79 7a 22 2c 22 74 61 62 22 3a 22  mrz0-yz","tab":"

0x157575d18: 72 65 63 22 2c 22 68 5f 64 69 64 22 3a 22 32 32  rec","h_did":"22

0x157575d28: 32 65 62 66 37 65 31 66 39 62 62 35 64 65 39 38  2ebf7e1f9bb5de98

0x157575d38: 35 31 32 39 31 62 33 63 36 37 30 61 34 65 30 66  51291b3c670a4e0f

0x157575d48: 31 61 33 31 63 34 22 2c 22 66 69 6c 74 65 72 22  1a31c4","filter"

0x157575d58: 3a 22 61 6c 6c 22 2c 22 68 5f 6f 73 22 3a 22 38  :"all","h_os":"8

0x157575d68: 2e 31 30 30 30 30 30 22 2c 22 61 75 74 6f 22 3a  .100000","auto":

0x157575d78: 31 2c 22 68 5f 74 73 22 3a 31 35 33 39 37 34 37  1,"h_ts":1539747

0x157575d88: 30 39 35 37 31 32 2c 22 68 5f 6d 22 3a 34 38 38  095712,"h_m":488

0x157575d98: 33 36 37 38 36 2c 22 68 5f 69 64 66 61 22 3a 22  36786,"h_idfa":"

0x157575da8: 41 39 33 42 39 35 41 34 2d 39 30 43 33 2d 34 43  A93B95A4-90C3-4C

0x157575db8: 38 42 2d 39 38 41 38 2d 42 39 46 37 42 34 38 43  8B-98A8-B9F7B48C

0x157575dc8: 35 37 46 31 22 2c 22 68 5f 64 74 22 3a 31 7d 00  57F1","h_dt":1}.

0x157575dd8: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f0  ...............�

0x157575de8: 00 00 00 00 00 00 00 f0 11 00 00 00 00 00 00 00  .......�........

0x157575df8: 13 15 00 00 c0 00 00 00 03 64 00 00 23 a9 00 00  ....�....d..#�..

0x157575e08: 00 00 00 00 00 00 00 10 21 43 50 58 05 00 00 00  ........!CPX....

0x157575e18: 00 f0 00 00 98 00 00 00 02 00 00 00 71 75 65 72  .�..........quer

0x157575e28: 79 00 00 00 00 80 00 00 6c 00 00 00 31 6a 30 0b  y.......l...1j0.

0x157575e38: 0c 06 72 5f 44 61 74 61 01 01 01 30 0c 0c 04 73  ..r_Data...0...s

0x157575e48: 79 6e 63 0c 04 73 79 6e 61 30 0d 0c 05 63 6c 61  ync..syna0...cla

0x157575e58: 73 73 0c 04 67 65 6e 70 30 12 0c 04 61 63 63 74  ss..genp0...acct

0x157575e68: 0c 0a 69 64 66 61 41 63 6f 75 6e 74 30 13 0c 04  ..idfaAcount0...

0x157575e78: 73 76 63 65 0c 0b 69 64 66 61 53 65 72 76 69 63  svce..idfaServic

0x157575e88: 65 30 15 0c 07 6d 5f 4c                          e0...m_L

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值