No se puede conectar a Mobile Safari en iOS Simulator usando Node

Estoy intentando emular el intercambio de posts entre Safari y Mobile Safari cuando la debugging remota (usando el Nodo).

He sorbido el tráfico entre los dos; Están intercambiando pliegos binarys por TCP. He logrado replicar los packages hasta el punto donde se elige una pestaña en particular para la debugging ("configuration de socket"), pero después de este Mobile Safari ignora mis instrucciones y, en su lugar, devuelve una list.

Aquí está el tcpdump sin formatting del package de configuration de socket que Safari está enviando, y una representación JSON del file que contiene:

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 `....i.@........ 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 ,.Jgt........ 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:' } 

Y lo que estoy enviando con JSON:

 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 `....i.@........ 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 ,.Jgt........ 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:' } 

Aparte de las keys (que, según mis experimentos, no parecen hacer ninguna diferencia, he intentado las keys que Safari usó sin éxito), las dos son idénticas de byte por byte y producen plismos idénticos. Puedo comparar el tráfico entre Safari y Mobile Safari y mi código y Mobile Safari lado a lado, y solo divergen en este punto.

No sé cuál es el problema, pero hay algunas posibilidades por lo que puedo ver:

  • Los packages no son idénticos y he escrito algo mal / atornillado a algo más
  • Las teclas no están bien (quizás la key del remitente deba generarse desde la key de identificación de la connection)
  • Hay datos que se pasan entre los dos en otro lugar

Solo para aclarar algunas vías que he investigado:

  • No es sensible al time (otro proyecto, no el mío, puede conectarse correctamente pero envía todos los packages de connection a la vez)
  • He comprobado si hay datos (tcp) que se pasan por otro puerto; no hay tan lejos como pueda decir

¿Qué podría estar yendo mal? ¿Por qué Mobile Safari rechaza mi connection?

El proyecto está en Github .

El problema es la línea 36:

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

bplistCreator.js trata WIRSocketDataKey como una cadena cuando en realidad es datos en términos bplist.

La línea 36 debe ser:

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

Para que esto funcione, se requiere la versión de bplistCreator.js de GH, ya que la versión con soporte de datos no parece estar disponible a través de npm aún https://github.com/nearinfinity/node-bplist-creator


Hemos mantenido la historia a continuación simplemente como reference:

Hecho un poco más de excavación y viendo el system.log durante la ejecución …

tail -f /var/log/system.log

Y veo lo siguiente cuando el browser falla

 -[__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 

(He eliminado los times y dates de arriba)

EDITAR:

Creo que el problema es que WIRSocketDataKey se envía como una cadena cuando deberían ser datos

No parece que node-bplist-creator admita el tipo de datos en este momento, así que eso es lo primero que necesitamos para corregirlo.

EDIT 2:

La versión GH de node-bplist-creater admite types de datos, pero no parece estar empaquetada (???)

EDIT 3:

¡Lo tengo funcionando te enviará una request de extracción mañana!