Skype

Материал из Toshiba AC100 wiki
Перейти к навигации Перейти к поиску

Из операторской webos-прошивки какого-то HTC-девайса получилось достать SkypeKit под arm!

SkypeKit - это не сам скайп, а только SDK, к которому еще нужно прикрутить какую-то оболочку.

user@user-laptop:~/Downloads$ ./linux-armv7-skypekit-voicepcm-videortp
SkypeRuntime Copyright (C) 2003-2011 Skype Technologies S.A.
SkypeRuntime Version: 3.4.1/linux-armv7-skypekit-voicepcm-videortp_3.4.1.620_359974
Proprietary and confidential, do not share this application.
user@user-laptop:~/Downloads$ ./linux-armv7-skypekit-voicepcm-videortp --help
./linux-armv7-skypekit-voicepcm-videortp: usage: ./linux-armv7-skypekit-voicepcm-videortp [options]
./linux-armv7-skypekit-voicepcm-videortp:   [-d path]         file where to write debug log
./linux-armv7-skypekit-voicepcm-videortp:   [-p port]         port for TCP local only communication
./linux-armv7-skypekit-voicepcm-videortp:   [-P port]         port for TCP global communication
./linux-armv7-skypekit-voicepcm-videortp:   [-l name]         local communication channel (abstract socket on Linux)
./linux-armv7-skypekit-voicepcm-videortp:   [-r logname]      record transport streams in <logname>_log_in.1/_log_out.1
./linux-armv7-skypekit-voicepcm-videortp:   [-f dbpath]       Skype data path (if dbpath = 'nodb' saves nothing in .Skype directory
./linux-armv7-skypekit-voicepcm-videortp:   [-F dbpath]       Skype data path with in memory transactional log
./linux-armv7-skypekit-voicepcm-videortp:                     if dbpath = 'nodb' saves nothing in .Skype directory
./linux-armv7-skypekit-voicepcm-videortp:   [-v]              print legal notice
./linux-armv7-skypekit-voicepcm-videortp:   [-x]              do not start netlogging
./linux-armv7-skypekit-voicepcm-videortp:   [-b]              run crypto benchmark before starting up
./linux-armv7-skypekit-voicepcm-videortp:   [-s]              set filename prefix for audio & video IPC keys (default /tmp/)
./linux-armv7-skypekit-voicepcm-videortp:   [-sa]             set filename prefix for audio IPC keys (default /tmp/)
./linux-armv7-skypekit-voicepcm-videortp:   [-sv]             set filename prefix for video IPC keys (default /tmp/)
./linux-armv7-skypekit-voicepcm-videortp:   [-T maxthreads]   0 (default) <= maxthreads <= 32
./linux-armv7-skypekit-voicepcm-videortp:   [-t numthread]    1 (default) <= numthreadpersession <= 3
./linux-armv7-skypekit-voicepcm-videortp:   [-m]              enable multiple sessions
./linux-armv7-skypekit-voicepcm-videortp:   [-N numparallel]  1 (default:ie main) <= num parallel session <= 32, if > 1 => -m
user@user-laptop:~/Downloads$

http://ompldr.org/vYzd5eg

Про ключи и обфускацию

Сам рантайм, теоретически, можно скачать с developer.skype.com. Там он есть в том числе и для ARMv7. Отличаться от рантайма, выложенного выше, он будет только вшитым ID компании. Сложность использования текущей версии рантайма (судя по всему, от оператора verizon) состоит в необходимости наличия файла ключа keypair.pem, который позволяет собирать приложения-обертки для рантайма. Каждый файл ключа привязан к рантайму. Сам скайп рекомендует:

WARNING! This method of including key pairs for applications (in separate plain text files) is
NOT something that you should ever do in your own applications. You do not want third parties 
getting access to your key pairs. For this reason, you shouuld use obfuscation techniques 
to hide the keys in your application. 

Возможно, ключ получится достать из той же WebOS. Если нет, останется вариант зарегистрироваться на developer.skype.com и запросить ключ там, но для этого придется подписать очень-очень ограничивающие соглашения. Подробнее http://habrahabr.ru/blogs/skype/124321/

upd: Полученный рантайм отождествлен с вашей зарегистрированной организацией. И во время разработки возможно залогинивание только тех аккаунтов, которые состоят в вашей организации. (цитата с хабра)

Так что вариант с получением ключа на skype.com отпадает. Стоимость production keypair составляет около $4000)

В webos ключ, скорее всего, зашит в один из двух бинарников. Собственно, на этом, скорее всего, все и закончится, поскольку достать его оттуда вряд ли получится. Сами бинарники требуют окружение webos, в ней они работают как интерфейс для javascript-html приложений. skype-validator — судя по описанию из ipkg, валидатор аккаунтов, через него проходит авторизация.

Однако, желающие могут попытаться что-то извлечь вот из этих функций:

0001a484 <_Z10getKeyPairv>:
   1a484:	e3a00001 	mov	r0, #1
   1a488:	e12fff1e 	bx	lr

0001a48c <_Z14releaseKeyPairv>:
   1a48c:	e12fff1e 	bx	lr

0001a490 <_GLOBAL__I_keyBuf>:
   1a490:	e30a1688 	movw	r1, #42632	; 0xa688
   1a494:	e3401008 	movt	r1, #8
   1a498:	e92d4010 	push	{r4, lr}
   1a49c:	e5910000 	ldr	r0, [r1]
   1a4a0:	ebffce5b 	bl	de14 <_init+0x8e4>
   1a4a4:	e30d3e2c 	movw	r3, #56876	; 0xde2c
   1a4a8:	e3403008 	movt	r3, #8
   1a4ac:	e3a02000 	mov	r2, #0
   1a4b0:	e1a04003 	mov	r4, r3
   1a4b4:	e5a42004 	str	r2, [r4, #4]!
   1a4b8:	e5830000 	str	r0, [r3]
   1a4bc:	e2840004 	add	r0, r4, #4
   1a4c0:	eb009021 	bl	3e54c <_ZN11SEMutexImplC2Ev>
   1a4c4:	e1a00004 	mov	r0, r4
   1a4c8:	e30c1750 	movw	r1, #51024	; 0xc750
   1a4cc:	e3401006 	movt	r1, #6
   1a4d0:	eb009789 	bl	402fc <_ZN8SEStringaSEPKc>
   1a4d4:	e1a00004 	mov	r0, r4
   1a4d8:	e30c14c8 	movw	r1, #50376	; 0xc4c8
   1a4dc:	e30a260c 	movw	r2, #42508	; 0xa60c
   1a4e0:	e3401001 	movt	r1, #1
   1a4e4:	e3402008 	movt	r2, #8
   1a4e8:	e8bd4010 	pop	{r4, lr}
   1a4ec:	eaffcc44 	b	d604 <_init+0xd4>

000402fc <_ZN8SEStringaSEPKc>:
   402fc:	e92d41f0 	push	{r4, r5, r6, r7, r8, lr}
   40300:	e1a07001 	mov	r7, r1
   40304:	e1a06000 	mov	r6, r0
   40308:	ebffffd5 	bl	40264 <_ZN8SEString7d_unrefEv>
   4030c:	e3570000 	cmp	r7, #0
   40310:	0a00001b 	beq	40384 <_ZN8SEStringaSEPKc+0x88>
   40314:	e3a00028 	mov	r0, #40	; 0x28
   40318:	ebff366f 	bl	dcdc <_init+0x7ac>
   4031c:	e1a05000 	mov	r5, r0
   40320:	e2800010 	add	r0, r0, #16
   40324:	ebfff888 	bl	3e54c <_ZN11SEMutexImplC2Ev>
   40328:	e3a0e001 	mov	lr, #1
   4032c:	e5865000 	str	r5, [r6]
   40330:	e1a00007 	mov	r0, r7
   40334:	e585e000 	str	lr, [r5]
   40338:	ebff36b5 	bl	de14 <_init+0x8e4>
   4033c:	e5961000 	ldr	r1, [r6]
   40340:	e2802001 	add	r2, r0, #1
   40344:	e3c2400f 	bic	r4, r2, #15
   40348:	e2840010 	add	r0, r4, #16
   4034c:	e5810008 	str	r0, [r1, #8]
   40350:	e5964000 	ldr	r4, [r6]
   40354:	e5940008 	ldr	r0, [r4, #8]
   40358:	ebff36aa 	bl	de08 <_init+0x8d8>
   4035c:	e1a01007 	mov	r1, r7
   40360:	e5840004 	str	r0, [r4, #4]
   40364:	e596c000 	ldr	ip, [r6]
   40368:	e59c0004 	ldr	r0, [ip, #4]
   4036c:	ebff35f4 	bl	db44 <_init+0x614>
   40370:	e5962000 	ldr	r2, [r6]
   40374:	e3a03000 	mov	r3, #0
   40378:	e1a00006 	mov	r0, r6
   4037c:	e5c2300c 	strb	r3, [r2, #12]
   40380:	e8bd81f0 	pop	{r4, r5, r6, r7, r8, pc}
   40384:	e5867000 	str	r7, [r6]
   40388:	e1a00006 	mov	r0, r6
   4038c:	e8bd81f0 	pop	{r4, r5, r6, r7, r8, pc}
   40390:	e1a06000 	mov	r6, r0
   40394:	e1a00005 	mov	r0, r5
   40398:	ebff35f2 	bl	db68 <_init+0x638>
   4039c:	e1a00006 	mov	r0, r6
   403a0:	ebff3626 	bl	dc40 <_init+0x710>

…и так далее. Это фрагменты файла skypem, прошедшего через дизассемблер

Дополнительно

SDK (возможно, слегка устаревшее): https://docs.google.com/leaf?id=0B-tYGGx-gUMFMWJlOWJhYTUtNmYyYi00NTkyLWI1MTEtMmQ5NzlkZWNjYTgx&hl=ru

Пример консольной скайп-звонилки: http://developer.skype.com/skypekit/reference/cpp/examples.html