Сейчас на форуме: Magister Yoda, site-pro, Rio (+6 невидимых)

 eXeL@B —› Крэки, обсуждения —› Анализ ARM кода при взломе программ на PocketPC
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >>
Посл.ответ Сообщение


Ранг: 209.5 (наставник), 42thx
Активность: 0.10
Статус: Участник
WinCE ARM M@sTeR

Создано: 01 августа 2005 13:27
· Личное сообщение · #1

Средства отладки в Microsoft eMbedded Visual C++ 4.0 "чуток" уступают ollydbg, поэтому хотел бы спросить - как с сплошном коде выловить требуемую функцию. Останов делается только на бряке, а куда ставить эти бряки в сплошном коде очень даже неясно.
Если нажимать паузу (Break Execution) во время работы проги, выдается мессага: "All threads are in system calls. It is not possible to break into the debuggee at this time".
Хорошо бы также знать соответствие адресов функций их названиям, может есть у кого соответствующий мануал?
Да и вообще хотелось бы пообщаться с людьми которые занимаются исследованием прог под покет, ибо инет на такой матерьял очень скуп. Хорошо хоть что WASM.RU есть c замечательными статьями от Broken Sword.

-----
Get busy living or get busy dying ©




Ранг: 2.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 августа 2009 09:21
· Личное сообщение · #2

Помогите начинающему, плз.
Есть такой кусок кода:
...
присвоение исходных данных (8 операторов)
...
BL DeviceIOControl
...
анализ полученных результатов
...

Мне надо немного подправить результат работы DeviceIOControl (необходимо дополнительно добавить 4 оператора)
Вопросы:
1. Где искать свободное место для моего кода?
2. Как правильно выполнить переход туда и возврат в программу (насколько я понимаю, короткого перехода будет недостаточно)?
Спасибо




Ранг: 209.5 (наставник), 42thx
Активность: 0.10
Статус: Участник
WinCE ARM M@sTeR

Создано: 21 августа 2009 10:12
· Личное сообщение · #3

Ищешь место в конце секции кода,

BL DeviceIOControl меняешь на свою BL ProxyFunc которую размещаешь в конце секции кода
Сама ProxyFunc выглядит так:
Code:
  1. prolog
  2. BL DeviceIOControl
  3. [правка результата]
  4. epilog


-----
Get busy living or get busy dying ©




Ранг: 2.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 августа 2009 11:15 · Поправил: vovichek62
· Личное сообщение · #4

Getorix пишет:
BL DeviceIOControl меняешь на свою BL ProxyFunc


Да, это понятно. А как прописать адрес моей ProxyFunc (я не компилирую ассемблеровский файл, а правлю код в WinHex, поэтому вызов ProxyFunc я должен прописать вручную). Насколько я понимаю, HEX-код оператора BL ... (4 байта) не вместит в себя полный адрес функции, там, видимо, должно стоять смещение - но до самой функции или до какой-то ссылки на нее? И какова максимальная величина такого смещения? А в теле ProxyFunc при вызове DeviceIOControl тоже надо будет изменить смещение?

А такой вариант не прокатит (все это пишу на месте загрузки параметров вызова DeviceIOControl)?

LDR R0, loc_1
ADD R1, PC, #0C
MOV PC, R0
loc_1 DCD <полный адрес ProxyFunc>

Возврат делаем по такой же схеме по адресу из R1



Ранг: 78.7 (постоянный), 43thx
Активность: 0.070
Статус: Участник

Создано: 21 августа 2009 12:01
· Личное сообщение · #5

Используй OffsetCalc ! Или Считай вручную ! Все Должно Поместиться !




Ранг: 209.5 (наставник), 42thx
Активность: 0.10
Статус: Участник
WinCE ARM M@sTeR

Создано: 21 августа 2009 12:40
· Личное сообщение · #6

vovichek62
BL содержит относительное смещение. То есть адрес до ProxyFunc должен туда влезть. Просто подменяешь 4 байта BL DeviceIOControl на свои 4 байта. Соответственно внутри своей функи пересчитываешь BL DeviceIOControl до импорта DeviceIOControl (куда она раньше ссылалась).
Кстати пролог и эпилог ProxyFunc естесственно не должен косячить параметры DeviceIOControl.

vovichek62 пишет:
А такой вариант не прокатит

И придется заботиться о заполнении параметров заново, да еще и куча места понадобится под ProxyFunc

Tyra пишет:
Используй OffsetCalc

Гы, моя утилита для этой цели точно также называется

-----
Get busy living or get busy dying ©




Ранг: 2.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 августа 2009 12:47
· Личное сообщение · #7

Getorix пишет:
Гы, моя утилита для этой цели точно также называется


А можно где-нибудь скачать? А то еще накосячу с адресами!

Большое спасибо за помощь и терпение.




Ранг: 209.5 (наставник), 42thx
Активность: 0.10
Статус: Участник
WinCE ARM M@sTeR

Создано: 21 августа 2009 13:12
· Личное сообщение · #8

vovichek62 пишет:
А можно где-нибудь скачать


Вот наверное то что Tyra пользует:
rapidshare.com/files/64610490/OffsetCalc11.rar

В это я для себя делал года 3-4 назад (гы, оказывается впервые на паблик пошло):
rapidshare.com/files/269786715/offset_calc.zip.html

-----
Get busy living or get busy dying ©




Ранг: 2.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 августа 2009 13:13 · Поправил: vovichek62
· Личное сообщение · #9

Getorix

Нашел кое-что Ваше на 4pda (от 2007 года).

Правильно ли я понял из примера, что смещение рассчитывается по формуле:

(adr_destination - adr_source) / 4 - 2,

где
adr_destination - полный адрес моей функции
adr_source - адрес команды BL ..., где она вызывается




Ранг: 209.5 (наставник), 42thx
Активность: 0.10
Статус: Участник
WinCE ARM M@sTeR

Создано: 21 августа 2009 13:18 · Поправил: Getorix
· Личное сообщение · #10

vovichek62 пишет:
Нашел кое-что Ваше на 4pda (от 2007 года).

А ну да, в DisARM эта утилита расчета бренчей встроена.

vovichek62 пишет:
(adr_destination - adr_source) / 4 - 2

Да, именно так.

-----
Get busy living or get busy dying ©




Ранг: 78.7 (постоянный), 43thx
Активность: 0.070
Статус: Участник

Создано: 21 августа 2009 14:39
· Личное сообщение · #11

Getorix
Именно Её, но в Основно для Расчета Бранча назад, а вперед Обычным Калком !

Как Твой DisARM ? Помер ?



Ранг: 2.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 августа 2009 15:27 · Поправил: vovichek62
· Личное сообщение · #12

Getorix,

посмотрел Ваш offset_calc, и родился у меня сумасшедший наглый вопрос:
а не делали ли Вы случайно подобную программку для других опкодов, не связанных с переходами (очень уж удобно было бы получать сразу HEX-код для любой команды). Или может быть знаете что-то в этом роде (ну, кроме, конечно, стандартного компилятора)?




Ранг: 209.5 (наставник), 42thx
Активность: 0.10
Статус: Участник
WinCE ARM M@sTeR

Создано: 21 августа 2009 16:07 · Поправил: Getorix
· Личное сообщение · #13

vovichek62 пишет:
а не делали ли Вы случайно подобную программку для других опкодов

Делал, это был конструктор опкодов с возможностью ассемблирования из строки для патчинга в DisARM, но только в виде кода поскольку времени для тестирования не стало, а уж для интерфейса (хотябы типа как в офсет калке) и подавно
Так что ручками, ручками...

-----
Get busy living or get busy dying ©





Ранг: 260.3 (наставник), 2thx
Активность: 0.120
Статус: Участник
PPC-PROTECT author

Создано: 22 августа 2009 15:25
· Личное сообщение · #14

Getorix выложил бы тогда сорцы, уже не первый человек просит про тулзу... ктонить бы взял и довел до ума.

-----
Пиво, сиськи, транс




Ранг: 2.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 27 августа 2009 11:42 · Поправил: vovichek62
· Личное сообщение · #15

Подскажите, кто знает, плз, какая программа является вызывающей для Setup.dll при установке каба на девайс.

Хочу посмотреть процесс выполнения Setup.dll в дебаггере IDA, но IDA требует указать вызывающее приложение. Насколько я понимаю, это какой-то из системных процессов, но какой? Или может быть есть другой способ?



Ранг: 78.7 (постоянный), 43thx
Активность: 0.070
Статус: Участник

Создано: 27 августа 2009 17:09
· Личное сообщение · #16

Прогу Засвети, Может Дело не в Этой ДЛЛ !



Ранг: 2.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 27 августа 2009 22:40
· Личное сообщение · #17

Да прогу-то я сломал, правда не очень красиво - это Yota Contacts - адресная книга и звонилка от HTC MAX 4G. Вот теперь хочу понять, как сделать изящно. Ну и на будущее надо знать...
Кстати, вызывающий процесс для Setup.dll из каба - wceload.exe. Только не могу понять, как к нему подключиться для дебага Setup.dll - он запускается только после запуска каба на установку, и сразу первым делом грузит Setup.dll. И где в Setup.dll бряк ставить?
Пробовал поймать это дело в момент, когда каб спрашивает, куда ставиться - в девайс или на карту памяти. К wceload.exe IDA подключается нормально, бряк ставил на входе во все пять export-функций Setup.dll, но ни один не сработал до окончания установки каба.



Ранг: 6.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 27 августа 2009 23:56 · Поправил: Kalmar
· Личное сообщение · #18

vovichek62
wceload.exe для выполнения setup.dll запускает tmarshaller.exe, только сначала вытаскивает её (setup.dll) из каба, потом копирует её под случайным именем в \windows\AppMgr\<имя_программы> и только затем её загружает.



Ранг: 2.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 28 августа 2009 02:16
· Личное сообщение · #19

Kalmar,

так есть какой-нибудь вариант пройти дебаггером по Setup.dll?



Ранг: 6.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 28 августа 2009 19:03 · Поправил: Kalmar
· Личное сообщение · #20

ИМХО, самое простое - это наваять загрузчик к ней и его дебажить с заходом в install_init, install_exit, uninstall_init и uninstall_exit библиотеки. Всё описано (но мутно) в мсдн. Начать можно отсюда



Ранг: 78.7 (постоянный), 43thx
Активность: 0.070
Статус: Участник

Создано: 01 сентября 2009 13:22
· Личное сообщение · #21

vovichek62
А что По Вашему является Красотой ?! КГ или Что ?!
Почему Претензии именно к Этой ДЛЛ ?



Ранг: 2.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 01 сентября 2009 16:59 · Поправил: vovichek62
· Личное сообщение · #22

КГ там нет в принципе.
Там читается ModelName через SystemParametersInfoW и OEMInfo (для MOVINand) через DeviceIOControl. Потом эта информация как-то очень криво и длинно обрабатывается (я в этом и запутался), по результатам этой обработки либо продолжается установка программы, либо пишет "Данная программа не предназначена для данного девайса. Установка прервана".
Причем просто обойти эту проверку не получается, т.к. в ее процессе в разных местах в память пишется куча полезной на будущее информации.
Сейчас я просто дописал на свободное место две коротенькие функции, которые вызываются вместо SystemParametersInfoW и DeviceIOControl. Они подменяют информацию, считанную с моего телефона, "правильной". Установка в итоге работает нормально, но в результате этой подмены мой телефон называется не HTC Touch Diamond2, а HTC Max 4G, что меня ужасно раздражает.
Вот и хочу разобраться...



Ранг: 46.1 (посетитель), 1thx
Активность: 0.02=0.02
Статус: Участник

Создано: 13 октября 2009 13:51
· Личное сообщение · #23

подскажите чайниковский вопрос,
у меня мои комманды не помещаеются на место старой старого текста,
можно ли как-то оптимизировать на одну комманду ? спасиба.
Code:
  1. SUB     SP, SP, #8
  2. LDR     R2, =sub_5A6D0
  3. MOV     R3, #0
  4. MOV     R1, #0
  5. MOV     R0, #0
  6. STR     R3, [SP,#0x14+var_10]
  7. STR     R3, [SP,#0x14+var_14]
  8. BL      CreateThread
  9. BL      CloseHandle
  10. ADD     SP, SP, #8
  11. B       loc_2FF30




Ранг: 26.1 (посетитель), 10thx
Активность: 0.01=0.01
Статус: Участник

Создано: 13 октября 2009 16:38
· Личное сообщение · #24

можно постараться сэкономить в этом участке
Code:
  1. MOV     R3, #0
  2. MOV     R1, #0
  3. MOV     R0, #0


если отыскать место с ноликами, тогда код можно переписать как
Code:
  1. ADR        R0, zero_addr   ; add r0,pc,#offset
  2. LDMIA    R0!,{R0,R1,R3}


можно повозиться со стековым регистром, но все зависит от режима тумб/арм и от адресов размещения команд



Ранг: 78.7 (постоянный), 43thx
Активность: 0.070
Статус: Участник

Создано: 15 октября 2009 17:56
· Личное сообщение · #25

Найди Пустое Место, Впиши свой код и Замути Бранч на Него ! И Получится, что в том Месте, Где Вы Пытались Прописаться Нужно будет Вставить Свой Бранч, а остальное за NOP-ить.



Ранг: 46.1 (посетитель), 1thx
Активность: 0.02=0.02
Статус: Участник

Создано: 20 ноября 2009 21:54
· Личное сообщение · #26

подскажите о DeviceIOControl IOCTL_HAL_GET_DEVICEID

проблема простая, мой девайс (oem навигатор от mio) не выдает DeviceID. просто "пустая" структура.

протрейсить nk.exe/coredll в ida не выходит, а с jtag - не умею переводить проц(SirfTitan) в jtag mode.

смотрел по коду, в nk.exe на 0x1010054 есть строки DSK1 (раздел на флешке),
и UUID, %06d-%08d %02X%02X%02X%02X%02X%02X%02X%02X. (у меня навигатор, имеи тут нет, думаю тут id+серийник)

пытался прописывать/менять известные поля в таблице разделов, и tfaf32, но не помогло.

в принципе, можно изменить сам WinCE/nk.exe и залить обратно, но хотелось бы догадатся,
где этот uuid может быть прописан, и просто его вписать. что-бы не заморачиватся с каждой версией.

заранее благодарен.



Ранг: 46.1 (посетитель), 1thx
Активность: 0.02=0.02
Статус: Участник

Создано: 23 ноября 2009 18:35
· Личное сообщение · #27

в ida разобрался что DeviceIOControl IOCTL_HAL_GET_DEVICEID уходит в nk.exe, а оттуда в DSK_IoControl (0x221F78),
видно что читается сектор c серийником и прочими настройками железки,
но пока без отладчика тяжело осилить, почему на выходе функции пустота.
ну и нагуглить смысл DSK_IoControl (0x221F78) пока не удалось.




Ранг: 209.5 (наставник), 42thx
Активность: 0.10
Статус: Участник
WinCE ARM M@sTeR

Создано: 24 ноября 2009 03:12
· Личное сообщение · #28

Гм, ваще-то IOCTL_HAL_GET_DEVICEID относится к KernelIoControl() а не к DeviceIOControl().
А дальше OEMщик должен в OEMIoControl написать получение хвида.

-----
Get busy living or get busy dying ©




Ранг: -0.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 09 декабря 2009 14:38
· Личное сообщение · #29

Всем здрасти!
Я недавно занялся исследованием ARM процессоров, ну в общем КПКашками.

Стал исследовать одну игрушку Zuma v 1.03 for PocketPC. На сайтах смотрел, там есть пропатченные версии но у меня чегото не вышло зарегестрировать её на КПК.
Но суть не в этом интерес посмотреть недра и метод обхода регистрации. Может кто подкинет пример исследования ? Весьма буду благодарен.



Ранг: 123.0 (ветеран), 10thx
Активность: 0.060
Статус: Участник

Создано: 09 декабря 2009 22:17 · Поправил: Ultras
· Личное сообщение · #30

AxEExE, для начала вот RU_PPCRE's ARM Manual. Правда не законченная она.

Тутор по Pocket Money (англ)

#2

19f7_09.12.2009_CRACKLAB.rU.tgz - RU_PPCRE's ARM Manual.pdf

Возможно у TSRH есть подобные туторы на русском. Progopis тогда поможет.
Если общие навыкие реверса есть, то КПК-реверс осваивается быстро.

-----
.[ rE! p0w4 ].




Ранг: -0.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 декабря 2009 09:17
· Личное сообщение · #31

Спасибо Ultras, буду читать и то что на англ. не особо большая проблема.
Просто люблю когда примеров много - учиться легче и быстрей

За ссылочки в двойне спас.

Ultras пишет:
Возможно у TSRH есть подобные туторы на русском. Progopis тогда поможет.
Друзья TSRH, Progopis не подкините инфы ? За рание спас.


<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >>
 eXeL@B —› Крэки, обсуждения —› Анализ ARM кода при взломе программ на PocketPC
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати