2013-01-02 28 views
24

Tôi đang cố gắng mô phỏng trao đổi tin nhắn giữa Safari & Mobile Safari khi gỡ lỗi từ xa (sử dụng Nút).Không thể kết nối với Mobile Safari trong Trình mô phỏng iOS bằng cách sử dụng Node

Tôi đã đánh cắp lưu lượng truy cập giữa hai loại; họ đang trao đổi plists nhị phân trên TCP. Tôi đã quản lý để nhân rộng các gói lên đến điểm mà một tab cụ thể được chọn để gỡ lỗi ("thiết lập socket"), nhưng sau khi Mobile Safari này bỏ qua các hướng dẫn plist của tôi và thay vào đó gửi lại một danh sách.

Đây là tcpdump liệu của gói cài đặt ổ cắm Safari được gửi, và một đại diện JSON của plist nó chứa:

10:36:42.318662 IP6 localhost.58028 > localhost.27753: Flags [P.], seq 1601:1930, ack 803, win 9125, options [nop,nop,TS val 69074378 ecr 69074378], length 329 
0x0000: 6000 0000 0169 0640 0000 0000 0000 0000 `[email protected] 
0x0010: 0000 0000 0000 0001 0000 0000 0000 0000 ................ 
0x0020: 0000 0000 0000 0001 e2ac 6c69 344e 2443 ..........li4N$C 
0x0030: 4e32 497b 8018 23a5 0171 0000 0101 080a N2I{..#..q...... 
0x0040: 041d fdca 041d fdca 6270 6c69 7374 3030 ........bplist00 
0x0050: d201 0203 0c5a 5f5f 6172 6775 6d65 6e74 .....Z__argument 
0x0060: 5a5f 5f73 656c 6563 746f 72d4 0405 0607 Z__selector..... 
0x0070: 0809 0a0b 5f10 1b57 4952 4170 706c 6963 ...._..WIRApplic 
0x0080: 6174 696f 6e49 6465 6e74 6966 6965 724b ationIdentifierK 
0x0090: 6579 5f10 1a57 4952 436f 6e6e 6563 7469 ey_..WIRConnecti 
0x00a0: 6f6e 4964 656e 7469 6669 6572 4b65 795c onIdentifierKey\ 
0x00b0: 5749 5253 656e 6465 724b 6579 5f10 1457 WIRSenderKey_..W 
0x00c0: 4952 5061 6765 4964 656e 7469 6669 6572 IRPageIdentifier 
0x00d0: 4b65 795f 1016 636f 6d2e 6170 706c 652e Key_..com.apple. 
0x00e0: 6d6f 6269 6c65 7361 6661 7269 5f10 2441 mobilesafari_.$A 
0x00f0: 3535 3134 3645 372d 3244 4544 2d34 3832 55146E7-2DED-482 
0x0100: 412d 3839 3133 2d31 3033 3337 4537 4634 A-8913-10337E7F4 
0x0110: 3330 465f 1024 3230 3041 3935 3146 2d30 30F_.$200A951F-0 
0x0120: 3839 432d 3445 3741 2d41 3642 322d 3331 89C-4E7A-A6B2-31 
0x0130: 4235 4432 3737 4341 3635 1001 5f10 185f B5D277CA65.._.._ 
0x0140: 7270 635f 666f 7277 6172 6453 6f63 6b65 rpc_forwardSocke 
0x0150: 7453 6574 7570 3a00 0800 0d00 1800 2300 tSetup:.......#. 
0x0160: 2c00 4a00 6700 7400 8b00 a400 cb00 f200 ,.J.g.t......... 
0x0170: f400 0000 0000 0002 0100 0000 0000 0000 ................ 
0x0180: 0d00 0000 0000 0000 0000 0000 0000 0001 ................ 
0x0190: 0f          . 

{ __argument: 
    { WIRApplicationIdentifierKey: 'com.apple.mobilesafari', 
    WIRConnectionIdentifierKey: 'A55146E7-2DED-482A-8913-10337E7F430F', 
    WIRSenderKey: '200A951F-089C-4E7A-A6B2-31B5D277CA65', 
    WIRPageIdentifierKey: 1 }, 
    __selector: '_rpc_forwardSocketSetup:' } 

Và những gì tôi đang gửi với JSON plist:

16:39:18.669088 IP6 localhost.63836 > localhost.27753: Flags [P.], seq 413:742, ack 1, win 9175, options [nop,nop,TS val 89654016 ecr 89654016], length 329 
0x0000: 6000 0000 0169 0640 0000 0000 0000 0000 `[email protected] 
0x0010: 0000 0000 0000 0001 0000 0000 0000 0000 ................ 
0x0020: 0000 0000 0000 0001 f95c 6c69 0226 fab5 .........\li.&.. 
0x0030: 6fff d8d3 8018 23d7 0171 0000 0101 080a o.....#..q...... 
0x0040: 0558 0300 0558 0300 6270 6c69 7374 3030 .X...X..bplist00 
0x0050: d201 0203 0c5a 5f5f 6172 6775 6d65 6e74 .....Z__argument 
0x0060: 5a5f 5f73 656c 6563 746f 72d4 0405 0607 Z__selector..... 
0x0070: 0809 0a0b 5f10 1b57 4952 4170 706c 6963 ...._..WIRApplic 
0x0080: 6174 696f 6e49 6465 6e74 6966 6965 724b ationIdentifierK 
0x0090: 6579 5f10 1a57 4952 436f 6e6e 6563 7469 ey_..WIRConnecti 
0x00a0: 6f6e 4964 656e 7469 6669 6572 4b65 795c onIdentifierKey\ 
0x00b0: 5749 5253 656e 6465 724b 6579 5f10 1457 WIRSenderKey_..W 
0x00c0: 4952 5061 6765 4964 656e 7469 6669 6572 IRPageIdentifier 
0x00d0: 4b65 795f 1016 636f 6d2e 6170 706c 652e Key_..com.apple. 
0x00e0: 6d6f 6269 6c65 7361 6661 7269 5f10 2465 mobilesafari_.$E 
0x00f0: 3962 6431 6564 312d 6164 3161 2d34 6266 9BD1ED1-AD1A-4BF 
0x0100: 302d 6238 3066 2d61 3331 3136 3962 6434 0-B80F-A31169BD4 
0x0110: 3431 315f 1024 6630 3538 6663 3761 2d63 411_.$F058FC7A-C 
0x0120: 6232 332d 3465 3339 2d61 6535 312d 3734 B23-4E39-AE51-74 
0x0130: 6363 3730 6333 6262 3033 1001 5f10 185f CC70C3BB03.._.._ 
0x0140: 7270 635f 666f 7277 6172 6453 6f63 6b65 rpc_forwardSocke 
0x0150: 7453 6574 7570 3a00 0800 0d00 1800 2300 tSetup:.......#. 
0x0160: 2c00 4a00 6700 7400 8b00 a400 cb00 f200 ,.J.g.t......... 
0x0170: f400 0000 0000 0002 0100 0000 0000 0000 ................ 
0x0180: 0d00 0000 0000 0000 0000 0000 0000 0001 ................ 
0x0190: 0f          . 

{ __argument: 
    { WIRApplicationIdentifierKey: 'com.apple.mobilesafari', 
    WIRConnectionIdentifierKey: 'E9BD1ED1-AD1A-4BF0-B80F-A31169BD4411', 
    WIRSenderKey: 'F058FC7A-CB23-4E39-AE51-74CC70C3BB03', 
    WIRPageIdentifierKey: 1 }, 
    __selector: '_rpc_forwardSocketSetup:' } 

Ngoài các phím (trong đó, từ các thí nghiệm của tôi, dường như không tạo ra bất kỳ sự khác biệt nào - tôi đã thử các phím mà Safari không sử dụng), cả hai đều giống hệt byte-byte và tạo ra các dấu xoắn giống hệt nhau. Tôi có thể so sánh lưu lượng truy cập giữa Safari & Mobile Safari và mã của tôi & Mobile Safari cạnh nhau và chúng chỉ phân kỳ vào thời điểm này.

Tôi không biết vấn đề là gì, nhưng có một vài những khả năng như xa như tôi có thể thấy:

  • Các gói là không giống nhau và tôi đã đánh vần sai điều gì/vặn cái gì khác lên
  • các phím là không được phép (có lẽ là người gửi chính cần phải được tạo ra từ Connection ID Key)
  • dữ liệu có nhân được thông qua giữa hai nơi khác

Chỉ cần để làm sáng tỏ một số con đường mà tôi đã điều tra:

  • Đó không phải là thời điểm nhạy cảm (một dự án khác - không phải của tôi - có thể kết nối thành công nhưng sẽ gửi tất cả các gói kết nối cùng một lúc)
  • Tôi đã kiểm tra để xem nếu có (tcp) dữ liệu là đã vượt qua một cảng khác - không xa như tôi có thể nói

Điều gì có thể xảy ra? Tại sao Mobile Safari từ chối kết nối của tôi?

Dự án là on Github.

+0

Bạn có liên kết đến dự án khác mà bạn đề cập không? –

+0

@AndyDavies Chắc chắn, ici: https://github.com/freynaud/ios-driver –

+0

Dữ liệu nào được gửi trong các gói trước? Và, các yếu tố nào (khóa, định danh kết nối) được thay đổi trong mỗi kết nối? –

Trả lời

1

Issue là dòng 36:

data.__argument.WIRSocketDataKey = JSON.stringify(data.__argument.WIRSocketDataKey); 

bplistCreator.js xử lý WIRSocketDataKey như là một chuỗi khi nó thực sự dữ liệu về bplist.

dòng 36 nên là:

data.__argument.WIRSocketDataKey = new Buffer(JSON.stringify(data.__argument.WIRSocketDataKey)); 

Đối với điều này để làm việc phiên bản của bplistCreator.js từ GH được yêu cầu như các phiên bản với sự hỗ trợ dữ liệu không xuất hiện để được cung cấp thông qua NPM chưa https://github.com/nearinfinity/node-bplist-creator


Đã lưu giữ lịch sử bên dưới chỉ để tham khảo:

Thực hiện thêm một chút tìm hiểu và xem system.log trong khi thực thi ...

tail -f /var/log/system.log

Và tôi nhìn thấy sau khi trình duyệt bị treo

-[__NSCFString bytes]: unrecognized selector sent to instance 0xa947af0 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString bytes]: unrecognized selector sent to instance 0xa947af0' 
*** First throw call stack: 
(0x48b012 0x1578e7e 0x5164bd 0x47abbc 0x47a94e 0x413390 0x43b763 0xb55415 0x44bf0f5 0x45080d8 0x45085f1 0x3557548 0x40ef3f 0x40e96f 0x431734 0x430f44 0x430e1b 0x3556c50 0x9026e557 0x90258cee) 
com.apple.launchd.peruser.501[237] (UIKitApplication:com.apple.mobilesafari[0x10ee][59604]):  Job appears to have crashed: Abort trap: 6 
backboardd[54902]: Application 'UIKitApplication:com.apple.mobilesafari[0x10ee]' exited  abnormally with signal 6: Abort trap: 6 
ReportCrash[59611]: Saved crash report for MobileSafari[59604] version 1659.13 to /Users/xx/Library/Logs/DiagnosticReports/MobileSafari_2013-01-29-212042_Andy-Daviess-MacBook-Pro.crash 

(Tôi đã gỡ bỏ thời gian và ngày từ trên cao)

EDIT:

Tôi nghĩ vấn đề WIRSocketDataKey đang được gửi dưới dạng chuỗi khi dữ liệu phải là dữ liệu

Không giống như nút-bplist-creator hỗ trợ kiểu dữ liệu vào lúc này vì vậy đó là điều đầu tiên chúng ta cần sửa chữa.

EDIT 2:

GH phiên bản của nút-bplist-creater không hỗ trợ kiểu dữ liệu, nhưng không xuất hiện để được đóng gói (???)

EDIT 3:

Got it làm việc sẽ gửi cho bạn một yêu cầu kéo vào ngày mai!

Các vấn đề liên quan