Показать сообщение отдельно
Старый 16.06.2011, 04:30   #53
Bedolaga
Бывалый
 
Имя: Алексей
Авто: Pajero Sport 2010 3.0
Сообщений: 29
По умолчанию Re: Исследование механизма работы ПО MMCS

Цитата:
Сообщение от Ёжик Пых Посмотреть сообщение
Bedolaga, по поводу Вашей идеи с DVD, не сказать чтобы ничего не получилось, получилось несколько не то .
Пересобрал Loading и опробовал. Если раньше при начале движения выскакивала надпись "Не отображается при движении" на синем фоне, то теперь при начале движения экран становится полностью черным и восстанавливается при остановке.
Оценил деликатность фразы "несколько не то"

такие результаты это скорее норма при взломе вслепую. Буду много думать. Напишу соображения чуть позже. Спасибо Дмитрий что нашел время на эксперимент.

---------- Добавлено в 13:41 ---------- Предыдущее сообщение было написано в 03:30 ----------

Буду делиться своими соображения порционно, по мере появления, если не против.

Получается пропатченый нами условный переход обходит фрагмент, который просто выводит на экран устройства надпись о запрете показа при движении, но сам запрет очевидно происходит где-то раньше. Это не ахти какой результат, но он хотя указывает на один из параметров, которые отвечают за этот запрет. Вывод надписи, получается, происходит если r5 == 1.
Причем, выше в процедуре loc_115798 значение регистра r5 нигде не устанавливается, т.е. оно фактически передается при вызове. Значит нужно искать место, откуда вызывается эта процедура. Возможно там содержится код, устанавливающий этот признак r5==1.

И вот тут возникает основная проблема: как узнать адрес кода, вызывающего процедуру loc_115798? С отладчиком это было бы тривиальной задачей: посмотрел бы в стек или содержимое регистра PR (Return address). Но с мертвым листингом это недоступно. И как теперь? IDA выдает единственную ссылку на loc_115798:

DATA XREF: .data:001926C4

т.е. это место в какой-то таблице, в которой и хранится адрес нашей процедуры. Значит ее вызов осуществляется где-то косвенным путем, через смещение data:001926C4 от начала этой загадочной таблицы.

В мануале, ссылку на который я приводил, описывается техника вызова функций через смещения в Глобальной Таблице Смещений (GOT). Видимо и здесь также. Нужно только подходящую таблицу найти. У меня вот кандидатура:

Код:
 
.data:00192218 aUi_dvdcontrold:.sdata "<<----------UI_DVDControlDepend End!!"
.data:00192218                                         ; DATA XREF: .text:off_DB65Co
в ней смещение для нашей процедуры: h'4AC

теперь можно тупо поискать по листингу обращения к функциям с использованием смещения h'4AC.

Их там порядком будет, но поппадаются и очень похожие на то, что нужно:

Код:
 
.text:0010278E loc_10278E:                             ; CODE XREF: .text:00102782
.text:0010278E                 mov.l   @(h'1F4,pc), r3 ; [00102984 HideScreen@HMB_AbstractControl@@IAAXH@Z
.text:00102790                 mov     #h'25, r5
.text:00102792                 mov.l   @r3, r3
.text:00102794                 jsr     @r3
.text:00102796                 mov     r8, r4
.text:00102798                 mov.w   @(h'70,pc), r3 ; [0010280C] = h'250
.text:0010279A                 mov     r8, r2
.text:0010279C                 add     r3, r2
.text:0010279E                 mov.l   @r2, r0
.text:001027A0                 cmp/eq  #1, r0
.text:001027A2                 bf      loc_1027A8      ; Неужто?
.text:001027A4                 mov     #2, r3
.text:001027A6                 mov.l   r3, @r2
.text:001027A8
.text:001027A8 loc_1027A8:                             ; CODE XREF: .text:001027A2j
.text:001027A8                 mov.l   @r8, r0         ; Неужто?
.text:001027AA                 mov.w   @(h'56,pc), r3 ; [00102804] = h'4AC
.text:001027AC                 mov.l   @(r0,r3), r3
.text:001027AE                 jsr     @r3
.text:001027B0                 mov     r8, r4
интересно, что делает функция библиотечная HideScreen? Закрывает текущий экран, для последующего вывода, типа "Зарещено в движении"?
Bedolaga вне форума   Вверх Ответить с цитированием
Пользователь сказал cпасибо: