Сейчас на форуме: vovanchik-77, uev61, digger70, Ara (+2 невидимых) |
 |
|
| Посл.ответ |
Сообщение |
|
Создано: 10 августа 2006 22:20:27 · Поправил: newborn Личное сообщение #1
Народ, ктонить ломал под Симбиан проги ? Искал в инете, инфы вообще неоказалось, так мелочи которые не помогут при взломе. Интересует вот что:
1) Чем ломать.
2) Какая нибудь инфа.
Всем откликнувшимся спасибо.
----- ~ the Power Of Reversing team ~
|
|
|
Создано: 22 декабря 2008 15:17:17 Личное сообщение #2
так может у тебя проблемы с переходом в ARM/Thumb режимы. Для перехода из arm-mode в thumb нужно прибавить 1 к вызываемому адресу.
вроде как для uiq3 был какой-то пропатченный app trk, который позволял читать данные из rom, через него по идее можно посмотреть в карбиде, правильно ли происходит переключение режимов. Хотя это можно посмотреть и так в IDA - в каком режиме происходит вызов, и в каком режиме код вызываемого метода в rom.
|
|
Создано: 24 декабря 2008 18:09:27 · Поправил: mr_way Личное сообщение #3
Адрес функции, возвращаемый Lookup - "нечетный" (т.е. надо понимать что код в dll выполняется в THUMB режиме).
Проверил вариант с LDR PC, [Rx]. Результат такой-же как и в случае с BLX Rx. На телефоне выпадает диалог "Не поддерживается".
И что-бы это значило?
...................................................................... ........
Засада!!!. Отвечаю сам себе. Взял для примера dll "попроще", а именно Hal.dll (она тоже в XIP формате). "Залукапил" функцию Get - 1й номер. Работает!
Так что проблема не в вызове, а в самой функции.
...................................................................... ..............................................
Ну вот и все...
Проблема была в VendorID. Если в своем примере установить его в 0x7000000F (как в прошивочных файлах), то вызовы из OpaClient.dll "отрабатываются". Дальше правда вылет идет, видимо не до конца в Callback-ах разобрался.
Но похоже даже если удастся "замутить" что-нибуть путное, то поставить его можно будет только на "заломанную" систему.
|
|
Создано: 2 января 2009 17:29:20 · Поправил: TolyaN3z Личное сообщение #4
Ковыряю CorePlayer для UIQ...
Глянул, как уже ломали под другие оси, пытаюсь повторить те же действия.
Перенаправляем импорты с EZLIB (inflate и т.д.) на нашу dll, а в ней выполняем оригинальный вызов + наш код.
Написал dll с 4 экспортируемыми функциями: 3 из EZLIB и 1 из EUSER, пришлось попариться с перенаправлением импорта IMB_Range из EUSER. Подзабылся старый формат E32Image. В общем, dll успешно загрузилась, сделала необходимые вызовы и прога запустилась.
Идём дальше, нужно подменить IMEI. Моё представление этого:
1. Делаем дамп области памяти, на которую грузится распакованый образ
2. Реверсим, смотрим адрес загрузки IMEI
3. Пишем в нашей dll код замены этого значения
Собственно, первый пункт: отлавливаем адрес по которому размещается распакованный бинарь.
В версии для UIQ нет вызова CreateLocalCode (такое возможно? зачем тогда IMB_Range?), поэтому как словить нужный chunk мне не оч понятно.
В функции IMB_Range есть 2 параметра aStart и aEnd, пробую установить thread-local storage по aStart и создать chunk. Создаю указатель на область в памяти используя этот chunk с такими параметрами aBuf = Base+Bottom и aLength = Top - Bottom, на этом dll-ка вываливается KERN-EXEC, 0.
Есть подозрение, что aStart это некорректный, точнее непригодный для моих нужд адрес, поэтому TPtrC инициализируется неверными значениями.
Смутно представляю как иначе (без дампа) получить адрес IMEI. У кого-нибудь есть соображения?
|
|
Создано: 3 января 2009 15:04:30 · Поправил: [wl] Личное сообщение #5
как ломали товарищи из BiNPDA: перехватывали вызов TDes::Copy(), и если некий символ является цифрой, считали, что происходит копирование imei и подсовывали свой. Делают так потому, что им не хочется париться с самой функцией получения imei, которая в 9-ке делается через Active Objects, хотя на самом деле в этом нет никакой сложности. На 7-й симбе все проще - взятие имея берется функцией PlpVariant::GetPhoneID(), её-то и нужно перехватывать. Наибольшая проблема в том, чтобы адрес этой функции узнать. Есть два варианта: либо дамп памяти (хотя я не понимаю, как там узнать адреса функций), либо ручная распаковка бинарника. Под 9-ку бинарник распаковать не сложно - там есть заголовок 0x10 байт, в котором зашифрован размер кодовой секции, точка входа и что-то еще, и дальше идет zlib-поток с шириной окна 0xFFFFFFF1. Распакованный образ нужно также раскриптовать, и затем загрузить в ida. Хотя наверное это и не обязательно - можно по именам библиотек и ординалам найти, куда мапится PlpVariant::GetPhoneID(), и собственно подменять его на свою функцию.
Вот несколько функций, которые помогут:
1) декрипт заголовка и распаковка тела
- int extract()
- {
- z_stream strm
- FILE* f = fopen("CorePlayer_20012FA6.cpb", "rb")
- fseek(f, 0, SEEK_END)
- int size = ftell(f) - 0x10
- fseek(f, 0, SEEK_SET)
- char var_278[0x10]
- fread(var_278, 1, 0x10, f)
- int r0=0xF
- for(
- {
- char r2 = var_278[r0]
- char r1 = var_278[r0-1]
- r2 ^= r0
- r1 ^= r2
- var_278[r0] = r1
- }
- FILE* o = fopen("CorePlayer.cpb", "wb")
- fwrite(var_278, 1, 0x10, o)
-
- char* in = new char[size]
- fread(in, 1, size, f)
- char out[0x2000]
- memset(&strm, 0, sizeof(z_stream))
- strm.next_in = (Bytef*)in
- strm.avail_in = size
- strm.next_out = (Bytef*)out
- strm.avail_out = 0x2000
- if ( inflateInit2_(&strm, 0xFFFFFFF1, ZLIB_VERSION, sizeof(z_stream)) >= 0)
- {
- while ( strm.avail_in )
- {
- inflate(&strm, 0)
- fwrite(out, 1, 0x2000-strm.avail_out, o)
- strm.next_out = (Bytef*)out
- strm.avail_out = 0x2000
- }
- inflateEnd(&strm)
- }
- delete [] in
- fclose(o)
- fclose(f)
- return 0
- }
2) декрипт тела
- procedure TForm2.Button1Click(Sender: TObject)
- var
- fs, fo: TFileStream
- h: array [0..$
- d: array of byte
- r3: byte
- r0, r1, lr, r12, r2: integer
-
- begin
- fs := TFileStream.Create('CorePlayer.cpb', fmOpenRead)
- fs.Read(h, $
- lr := fs.Size - $
- SetLength(d, lr)
- fs.Read(d[0], lr)
- r12 := 0
- r0 := 0
- repeat
- r3 := d[r12]
- r2 := r0 + (r0 shl 8)
- r2 := r0 + (r2 shl 4)
- r3 := r3 xor r0
- r1 := r0 and $
- r2 := r0 + (r2 shl 5)
- r2 := r0 + (r2 shl 8)
- d[r12] := r3
- r12 := r12 + r1
- r12 := r12 + 1
- r2 := r0 + (r2 shl 2)
- r0 := r2 + 1
- until r12 >= lr
-
- fs.Free
- fo := TFileStream.Create('decrypted.bin', fmCreate)
- fo.Write(h, $
- fo.Write(d[0], lr)
- fo.Free
- SetLength(d, 0)
- end
Написано на двух языках (VC++ & Delphi), потому что это я делал в разное время, а потом стало неохота париться и делать одну универсальную программу распаковки бинарника, проще ткнуть по двум программам
|
|
Создано: 3 января 2009 15:16:55 · Поправил: TolyaN3z Личное сообщение #6
[wl]
Я вчера таки сдампил образ с памяти. Ильфаковские IDS для старых осей как всегда подвели, а других не было под рукой. C нормальными IDS нашёлся вызов CreateLocalCode, с него получил chunk и по нему слил бинарь из памяти.
Вот, что у меня было на выходе h__p://rapidshare.com/files/179330767/cp_uiq2.rar.html__
pass: cracklab
Но в этом бинаре все обращения уже идут в память и поэтому, как ты верно заметил, определить, где идёт вызов функции получения imei без полного дампа памяти нереально.
Сейчас буду пробовать твой код.
|
|
Создано: 6 января 2009 14:29:20 · Поправил: TolyaN3z Личное сообщение #7
[wl]
После обработки заголовка и тела твоим кодом на выходе получается такой же бинарь, как я слил с тела, только с двумя отличиями:
1. База адресации 0x00000000, а у того, что в памяти 0xFE000000, до запуска IMB_Range. Не важно.
2. С тела слилось на 2240 байт больше. Видимо, резервация под какие-то данные, либо это максимально возможный размер.
Нашёл имя импортируемой библиотеки PLPVARIANT.dll.
Формат секции импорта какой-то не очень понятный, отличается от того, что в APP. Точнее даже сказать, не вижу там секции импорта. Есть имена библиотек, перед ними идут их UID, а после имени, ВРОДЕ КАК идёт кол-во импортов и дальше ординалы. Вот, даже нарисовал разбивку:
хотелось бы верить, что разбивка правильная, но у функции GetMachineId ординал 6, а там стоит 0007. И импорт всего один. Очевидно, догадка неверная. Кто-нибудь знает как они мапятся, когда всё загружено в память?
Загрузив бинарник в IDA ситуация не сильно прояснилась, как узнать, где идёт вызов импортируемой функции?
Посидел, посмотрел пару часиков на бинарь, отколупал диалог и проверку серийника. Прога запускается, а через несколько секунд валится, видимо где-то проверяется результат этих функций. Примерно представляю, где может вызываться GetMachineId, но муторно мне туда лезть.
Ладно, думаю, попробую поменять имя и UID, перехватить вызов на свою dll, в ней уже есть фейковая функция с нужным ординалом. Не тут-то было, прога запускается, но на нужную функцию не попадает. Пробуем забить эту область (UID и имя DLL) мусором - ни вылета ничего. Из этого делаем вывод, что вызов GetMachineId делается раньше функции IMB_Range. Фиг с ним, патчим прямо после CreateLocalCode - без толку. Но, таки вклинился еще раньше и всё заработало.
|
|
Создано: 6 января 2009 21:49:35 · Поправил: [wl] Личное сообщение #8
ну вот еще код, которым я загружал либы в иду, может поможет. Но вроде как на смарт-се я видел уже взломанный корплейер для юик.
- ea_t import_pos=0
- do {
- netnode n
- n.create(0)
-
- long uid
- lread4bytes(li, &uid, false)
- int i=0
- unsigned char c
- do {
- c = qlgetc(li)
- if (c=='.')
- buf[i++] = 0
- else
- buf[i++] = c
- }while (c != 0 )
- if (qstring(buf) == qstring("e32stub"))
- return
- int off=0
- int x1=0
- while (true) {
- c = qlgetc(li)
- if (x1==0)
- off = c & 0x7F
- else
- off += ((c & 0x7F) << x1)
- if ( (c & 0x80) == 0)
- break
- x1+=7
- }
- import_pos += (off-1)
- int ord
- do {
- ord = 0
- int x=0
- while (true) {
- c = qlgetc(li)
- if (x==0)
- ord = c & 0x7F
- else
- ord += ((c & 0x7F) << x)
- if ( (c & 0x80) == 0)
- break
- x+=7
- }
-
- if ( --ord >= 0) {
- doDwrd(import_pos,4)
- //set temporary name in case of duplicate name or if there's no ids file
- char ordname[0x100]
- qsnprintf(ordname,sizeof(ordname),"%s_%d",buf,ord)
- do_name_anyway(import_pos,ordname)
- netnode(n).altset( ord , import_pos)
- import_pos += 4
- }
- import_module((char*)buf, NULL, n, NULL, "epoc9")
- } while (ord >= 0 )
- } while ( true )
|
|
Создано: 6 января 2009 22:12:36 Личное сообщение #9
[wl]
я уже взломал его, там наверно мой релиз лежит.
TolyaN3z пишет:
патчим прямо после CreateLocalCode - без толку. Но, таки вклинился еще раньше и всё заработало.
В любом случае, спасибо за помощь.
|
|
Создано: 18 января 2009 15:54:55 Личное сообщение #10 |
|
Создано: 18 января 2009 17:55:08 Личное сообщение #11
Здесь не запросы на взлом, а обсуждение, правила читай.
|
|
Создано: 3 марта 2009 11:52:28 Личное сообщение #12
Уважаемые гуру! Есть такой вопрос.
Имеется функция RMobileCall::NotifyCallEvent(TRequestStatus& aReqStatus, TMobileCallEvent& aEvent) из etelmm. Кто нибудь ее пробовал использовать? У меня что-то не выходит. Может у кого нибудь пример есть нормальный или описание как ей "правильно" пользоваться. Поиск по инету не помог. Пытался IDA-ой посмотреть кто ее в прошивке пользует, тоже не нашел.
|
|
Создано: 9 марта 2009 09:13:38 Личное сообщение #13
А где можно взять заголовочные файлы для MetroTRK API? В Carbide C++ нету.
----- Никто не знает столько, сколько не знаю я
|
|
Создано: 30 марта 2009 18:18:23 Личное сообщение #14
Я во взломе софта под symbian вообще дубовый, потому сильно не пинайте... =)
Есть софтина ProfiMail 3.10 hччp://www.lonelycatgames.com
Вобщем сам файл ProfiMail.exe, как я понял, распаковывает/расшифровывает (есть подозрение на ZLIB) файл app.bin, который по ходу дела и яв-ся самой программой.
Вопросы вот в чем:
есть-ли возможность отладки софта в трубе? или нужен эмулятор?
как отловить расшифровку или сделать это ручками? (может существуют какие-нить дамперы и т.п.)
существует ли что-нить типа filemon (или подобное), чтобы хотя бы отловить и убить триал?...
заранее спасиб!
|
|
Создано: 30 марта 2009 21:33:46 · Поправил: [HEX] Личное сообщение #15
alexey_k
Отладчика вроде в свободном доступе нет. Если и есть, то отлаживать можно только свои программы под эмулем.
В свежей IDA вроде как должно что то быть для отладки, но пока на паблике свежей IDA нет.
У ARTeam есть неплохой тутор по реверс симбы в том числе и профика. Primer_on_Reversing_Symbian_S60_Applications
----- Computer Security Laboratory
|
|
Создано: 30 марта 2009 22:04:49 Личное сообщение #16
[HEX] пишет:
У ARTeam есть неплохой тутор по реверс симбы в том числе и профика
да, они закейгенили профимайл, но дело в том, что регистрация проверяется на сервере, и потому, как только софтина вышла в сеть, мы получаем оплеуху
Фишка с файлом hosts уже не прокатывает (по-моему начиная с версии 3.04), а потому нужно патчить эти проверки... вобщем надо еще туторов от arteam покурить, может что и получится...
а так вопрос в догонку - возможен ли инлайн-патч на симбе? кто-нить подобное делал?
|
|
Создано: 30 марта 2009 23:22:10 Личное сообщение #17
alexey_k
А лодырь не проканает? Они как раз в туторе профик дампили с помощью лодыря и сырки там же были.
----- Computer Security Laboratory
|
|
Создано: 31 марта 2009 12:24:24 Личное сообщение #18
alexey_k пишет:
возможен ли инлайн-патч на симбе? кто-нить подобное делал?
возможен, я делал, но на профимыле не сработает, так как они насильно загружают длл с диска z:
|
|
Создано: 2 апреля 2009 15:56:41 Личное сообщение #19
Компиляторов С/С++ для разработки приложений на базе ARM много.
Например в IDE:
- IAR Embedded Workbench;
- Keil Software ARM MDK uVision3 ;
- ARM ADS Metrowerks CodeWarrior;
- ARM RealView;
- Green Hills Multi;
- MetaWare;
- GNU GCC Tools;
- Microsoft Visual Studio;
- Carbide c++ 2.0
- CrossWorks for ARM;
- Borland C++ Builder и т.д.
Вопрос – как по реассемблированному коду определить его родителей?
Известно, что это Symbian 9.2 а подпрограммы оформляются следующим образом
- B668 sub_B668
- B668 000 MOV R12, SP
- B66C 000 STMFD SP!, {R4,R11,R12,LR,PC}
- B670 014 SUB R11, R12, #4
- B674 014 SUB SP, SP, #0x84
- B678 098 STR R0, [R11,#var_18]
- -----
-
- BCA0 098 SUB SP, R11, #0x10
- BCA4 098 LDMFD SP, {R4,R11,SP,PC}
- BCA4
- BCA8 oBCA8 DCD aCSysz
- BCAC oBCAC DCD aCSysS
- BCB0 oBCB0 DCD aCSys
-
Второй пример:
- 80E4 sub_80E4
- 80E4 000 MOV R12, SP
- 80E8 000 STMFD SP!, {R4,R11,R12,LR,PC}
- 80EC 014 SUB R11, R12, #4
- ----
-
- 8240 SUB R0, R11, #0x24
- 8244 LDR R1, [R11,#-0x14]
- 8248 BL _ZN5RFile5WriteERK6TDesC8
-
- 824C SUB R0, R11, #0x24
- 8250 BL _ZN5RFile5CloseEv
-
- 8254 SUB R0, R11, #0x18
- 8258 BL _ZN11RHandleBase5CloseEv
-
- 825C SUB SP, R11, #0xC
- 8260 LDMFD SP, {R11,SP,PC}
-
Меня интересует ТОЛЬКО этот компилятор, а добывать, осваивать и тестировать все по списку тяжело, да и времени в обрез… Искренне считаю, что для Symbian-гуру это задача на пол-банана. Помогите.
|
|
Создано: 20 апреля 2009 21:24:31 · Поправил: Модератор Личное сообщение #20
Побанен на сутки, чтоб читал правила. Запросы лепить в соответствующей теме, а не по всему форуму равномерно разбрасывать
|
|
Создано: 21 апреля 2009 13:00:28 · Поправил: [wl] Личное сообщение #21
abvg пишет:
Вопрос – как по реассемблированному коду определить его родителей?
реально для написания обычных приложений под симбиан используются только 2 - GCCE и ARM RealView, так как они поддерживаются в Carbide.c++.
сказать, какой именно в данном случае не смогу, но скачать оба не составляет труда - один на форуме нокии, второй на торрентс.ру и посмотреть, какой код генерируют.
----
LexS007, раз есть ключ, можно взломать подменой имей, сейчас времени вообще нет, может потом сделаю
|
|
Создано: 9 мая 2009 16:21:00 Личное сообщение #22
Добыл, освоил и тестировал ВСЕ по списку
Не помогло...
Просмотрел несколько десятков sisx - 90% похожи, как две капли...
Не знаю, что и думать (Уже и задачу решил, а все равно - интересно!)
P.S. Может у меня все СЛИШКОМ новое?
|
|
Создано: 10 мая 2009 13:22:01 · Поправил: TolyaN3z Личное сообщение #23
Недавно писал либу для CorePlayer, вот как выглядит одна из её функций:
- 8028 __SomeFunc
- 8028 MOV R12, SP
- 802C STMFD SP!, {R11,R12,LR,PC}
- 8030 SUB R11, R12, #4
- 8034 SUB SP, SP, #8
- 8038 STR R0, [R11,#-0x10]
- 803C LDR R0, [R11,#-0x10]
- 8040 BL sub_865C
- 8044 LDR R3, [R11,#-0x10]
- 8048 ADD R0, R3, #0x6C
- 804C BL sub_865C
- 8050 LDR R3, [R11,#-0x10]
- 8054 ADD R0, R3, #0xD8
- 8058 BL sub_865C
- 805C LDR R3, [R11,#-0x10]
- 8060 MOV R0, R3
- 8064 SUB SP, R11, #0xC
- 8068 LDMFD SP, {R11,SP,PC}
Похоже на то, что у тебя, но не такое же.
Компилил под Carbide C++ 2.0 (GCCE), SDK - UIQ3, CSL ARM Toolchain версии 2005-Q1C.
|
|
Создано: 12 мая 2009 21:16:14 · Поправил: pollllll_n Личное сообщение #24
Народ информация дл размышления, может пригодится, правда от 11.03.2009 года вот источник http://www.securitylab.ru/news/348341.php
Хакеры предлагают новый метод взлома защиты Symbian
Хакеры обнаружили еще один способ взлома защиты Symbian. Ранее дыру в защите нашли с помощью официальной программы для обновления ПО, теперь предлагается использовать профессиональный инструментарий для программирования. Владельцы топовой версии официальной среды разработки Carbide.C++ Pro (цена $1300) могут в процессе отладки программы на смартфоне изменить несколько определенных бит в стэке ядра и полностью отключить все проверки защиты. В итоге Symbian Platform Security выключается для данного аппарата. Это позволяет скачивать защищенный контент, модифицировать и скачивать скрытые системные файлы, устанавливать любое ПО с любыми привилегиями. Теоретически, это позволит хакерам скачивать и модифицировать даже встроенную операционную систему. Что смогут извлечь пытливые умы из данной возможности — покажет будущее.
Недостатки у метода взлома следующие: все права и привилегии восстанавливаются после перезагрузки девайса (если не применять дополнительные меры), взлом действует только на одном единственном устройстве. В данный момент существует подтверждение взлома Nokia N80. Неизвестно, будет ли этот способ работать на девайсах с Feature Pack 1.
|
|
Создано: 13 мая 2009 03:41:09 Личное сообщение #25
Гыг, очнулся  И новость вообще то 8-го года... И нужен не карбид а AppTRK из него. И на новых прошах не работает - ТРК пропатчили и встроили в прошивку (чтоб нельзя было старую версию установить).
|
|
Создано: 13 мая 2009 08:09:46 · Поправил: pollllll_n Личное сообщение #26
Zorn компания видно решила эту новость попредержать до 9-го года  , чтоб не вспугнуть покупателей своей системой защиты
|
|
Создано: 13 мая 2009 09:14:43 Личное сообщение #27
pollllll_n пишет:
компания видно решила эту новость попредержать до 9-го года
Я имел ввиду, что новость на секлабе датирована 11 марта, 2008
|
|
Создано: 13 мая 2009 18:02:49 · Поправил: pollllll_n Личное сообщение #28 |
|
Создано: 13 мая 2009 18:32:32 Личное сообщение #29
баян, давно уже все поломали себе 5800
|
|
Создано: 15 мая 2009 19:09:20 Личное сообщение #30
[wl] пишет:
ea_t import_pos=0;
do {
do {
netnode n;
n.create(0);
long uid;
lread4bytes(li, &uid, false);
int i=0;
unsigned char c;
do {
do {
c = qlgetc(li);
if (c=='.')
buf[i++] = 0;
else
else
buf[i++] = c;
}while (c != 0 );
if (qstring(buf) == qstring("e32stub"))
return;
int off=0;
int x1=0;
while (true) {
{
c = qlgetc(li);
if (x1==0)
off = c & 0x7F;
else
else
off += ((c & 0x7F) << x1);
if ( (c & 0x80) == 0)
break;
x1+=7;
}
}
import_pos += (off-1);
int ord;
do {
do {
ord = 0;
int x=0;
while (true) {
{
c = qlgetc(li);
if (x==0)
ord = c & 0x7F;
else
else
ord += ((c & 0x7F) << x);
if ( (c & 0x80) == 0)
break;
x+=7;
}
}
if ( --ord >= 0) {
{
doDwrd(import_pos,4);
//set temporary name in case of duplicat e name or if there's no ids file
there's no ids file
char ordname[0x100];
qsnprintf(ordname,sizeof(ordname),"%s_%d ",buf,ord);
do_name_anyway(import_pos,ordname);
netnode(n).altset( ord , import_pos);
import_pos += 4;
}
}
import_module((char*)buf, NULL, n, NULL, "epoc9");
} while (ord >= 0 );
} while ( true );
А с помощью какой проги такой код можно посмотреть exe файла
|
|
Создано: 15 мая 2009 21:10:47 Личное сообщение #31
LexS007 пишет:
А с помощью какой проги такой код можно посмотреть exe файла
Нет такой проги, максимум можно с помощью IDA получить листинг на асме (арм).
|
|