OUT-CLUB.RU

OUT-CLUB.RU (https://out-club.ru/board/index.php)
-   Outlander XL 2007 - 2012 г.в. - Электроника, мультимедиа, навигация (https://out-club.ru/board/forumdisplay.php?f=271)
-   -   Исследование механизма работы ПО MMCS (https://out-club.ru/board/showthread.php?t=37735)

Bedolaga 09.06.2011 15:34

Исследование механизма работы программного обеспечения MMCS
 
Согласен с предыдущими ораторами: как минимум тему с хакингом нужно выносить в отдельную. А здесь только уже законченные и проверенные результаты.

BTW, кто-то изучал уже этот кусок из AVUnit.exe?:

Код:


.text:001157B4 mov r13, r9
.text:001157B6 mov #h'4B, r12
.text:001157B8 mov.l r5, @r10
.text:001157BA cmp/eq r13, r5
.text:001157BC bf/s loc_1157E8
.text:001157BE shll2 r12
.text:001157C0 mov.l @(h'FC,pc), r3 ; [001158C0] = sub_26D00
.text:001157C2 jsr @r3 ; sub_26D00
.text:001157C4 mov #0, r5
.text:001157C6 cmp/eq #5, r0
.text:001157C8 bt loc_1157CC
.text:001157CA mov #0, r9
.text:001157CC
.text:001157CC loc_1157CC:
 
.text:001157CC mov.l @(h'F4,pc), r4 ; [001158C4] = " Park-->Run"
.text:001157CE mov.l @(h'F8,pc), r3 ; [001158C8] = sub_74824
.text:001157D0 jsr @r3 ; sub_74824
.text:001157D2 mov r9, r5
.text:001157D4 mov.l @r8, r0
.text:001157D6 mov #1, r6
.text:001157D8 mov.w @(h'DE,pc), r3 ; [001158BA] = h'2E8
.text:001157DA mov #5, r5
.text:001157DC mov r9, r7
.text:001157DE mov.l @(r0,r3), r3
.text:001157E0 jsr @r3
.text:001157E2 mov r8, r4
.text:001157E4 bra loc_115846
.text:001157E6 mov #0, r5
.text:001157E8 ; ---------------------------------------------------------------------------
.text:001157E8
.text:001157E8 loc_1157E8: ; CODE XREF: .text:001157BC j
.text:001157E8 mov r8, r9

коричневый фрагмент кода шлет извещение о начале движения с парковки. Кто-то пробовал его обойти заменой:

Код:

.text:001157BC                bf/s    loc_1157E8
на

Код:

.text:001157BC                bra    loc_1157E8
?

Я понимаю что это ламерство, но а вдруг?

---------- Добавлено в 04:51 ---------- Предыдущее сообщение было написано Вчера в 14:34 ----------

2 Ёжик Пых:

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

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

Найдем способ коммуникации, значит сможет нормальную отладку организовать. Иначе будет все будет наобум через модификацию кода, замену лоадинга, запись на диск, проверка на устройстве и т.д. по циклу.

Надеюсь выхлоп будет стоить потраченных усилий.

heavy 10.06.2011 09:42

Re: Исследование механизма работы ПО MMCS
 
В свое время для отладки (не для производственного тестирования) на платах были спец. контакты или колодки (jtag вроде именовали), как правило не распаянные в производтсвенной модели, может и тут что-то подобное имеется...

Интересно на чем отлаживают код разработчики, имхо не на живой голове, а на железке типа "ренесанса" или софтовом эмуляторе, но у меня в свое время не удалось виртуалку под sh4 запустить нормально =( Но кто-то вроде писал (сейчас не уверен что именно про mmcs, возможно про другую kiwi-систему, что пакет собран для работы с несколькими различными платформами одновременно, может наш тоже?


Но вообще странная штука, что за столько лет так и не утекла из недр восточных разработчиков ни одна версия kiwi редактора... но как-то даже натыкался на резюме одного из разработчиков, кто приводил в пример что разрабатывал эту систему.

Bedolaga 10.06.2011 11:30

Re: Исследование механизма работы ПО MMCS
 
Цитата:

Сообщение от heavy (Сообщение 1033930)
Интересно на чем отлаживают код разработчики, имхо не на живой голове, а на железке типа "ренесанса" или софтовом эмуляторе

ПО MMCS писалось на языке высокого уровня, причем объектно ориентированном (как верный признак, в теле программ щедро накидано операторов "delete" и "new", используемых в ООП для создания и уничтожения экземпляров классов).

У этого факта есть 2 стороны:

1) плюс: много полезной информации компилятор оставляет в теле исполняемого модуля. Там есть потрясающие строки вида " А вот сейчас мы запретим показ DVD в движении". Причем строки хранятся недалеко от кода, как это и положено при компиляции объектов :biggrin: Именно поэтому относительно легко удается грохнуть этот запрет с DVD, особенно не парясь с трассировкой кода.

2) минус: крайне затруднено восстановление программной логики, поскольку очень много вызовов процедур не по прямым адресам, а косвенно через относительные смещения к неивестным из мертвого листинга адресам (которые видимо являются ссылками на объекты исходного текста ООП). И мертвый код анализировать становится трудно. Это плата за удобство концепции ООП для разработчика.

На интелсовместимых платформах, я даже спустя 15 лет перерыва могу по ассемблерному коду легко вернуть все в С. Легко понять вызовы процедур и какие параметры при этом передаются. На SH-4 у меня таких навыков нет, поэтому это все время. Если кто обладает знаниями по стандартной структуре ассемблерного кода SH-4, в который компилируются высокоуровневые вызовы процедур и функций хоть на CPP хоть на C#, буду признателен за краткую информацию.

Что касается отладки: свой небольшой отладчик в MMCS загружен, можно пытаться его слегка переписать, чтобы он выводил на экран устройства или в файл нужную информацию. Но что бы его переписать и отладить нужно большое количество циклов: модификация кода --> модификация loading.kwi --> запись на HDD --> запуск на устройстве ---> анализ результата --> модификация кода --> ... и далее по циклу.

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

Bedolaga 14.06.2011 06:13

Re: Исследование механизма работы ПО MMCS
 
В эту тему буду выкладывать ссылки на полезную информацию, связанную с SH4 архитектурой. Нашел очень важный документ SH-4 Generic and C Specific ABI, маленько раскрывающий особенности вызовов функций и соглашения по передаче параметров при этих вызовах. Собственно нечто подобным я и просил поделиться почтеннейшую публику постом выше.

Alex01 14.06.2011 15:21

Re: Исследование механизма работы ПО MMCS
 
когда будет "Hello World" для тестирования? :)

Bedolaga 14.06.2011 15:31

Re: Исследование механизма работы ПО MMCS
 
Цитата:

Сообщение от Alex01 (Сообщение 1035747)
когда будет "Hello World" для тестирования? :)

Сперва aux в движении добьем. Потом написание отладчика. Без отладчика делать вообще нечего. А после попросим у мицев долю в акционерном капитале.

Ёжик Пых 16.06.2011 00:19

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

Bedolaga 16.06.2011 04:30

Re: Исследование механизма работы ПО MMCS
 
Цитата:

Сообщение от Ёжик Пых (Сообщение 1037142)
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? Закрывает текущий экран, для последующего вывода, типа "Зарещено в движении"?

Ёжик Пых 16.06.2011 23:06

Re: Исследование механизма работы ПО MMCS
 
Похоже на правду. За мануал спасибо, действительно начинаешь думать как компилятор :).

Я попробую вот так, по наглому :

Код:

.text:0010278E loc_10278E:                            ; CODE XREF: .text:00102782
.text:0010278E                rts
.text:00102790                 nop
.text:00102792                mov.l  @r3, r3
.text:00102794                jsr    @r3
.....




---------- Добавлено в 23:11 ---------- Предыдущее сообщение было написано в 23:06 ----------

Цитата:

Сообщение от Bedolaga (Сообщение 1037175)
интересно, что делает функция библиотечная HideScreen? Закрывает текущий экран, для последующего вывода, типа "Зарещено в движении"?

Я думаю, это как раз выключенный экран, который я наблюдал.

Bedolaga 17.06.2011 04:39

Re: Исследование механизма работы ПО MMCS
 
[QUOTE=Ёжик Пых;1037974]
Я попробую вот так, по наглому :

Код:

.text:0010278E loc_10278E:                            ; CODE XREF: .text:00102782
.text:0010278E                rts
.text:00102790               nop

хорошая мысль, которую я стеснялся предложить, ибо понимаю, что это все время и трудозатраты. Таким образом будет окончательно ясно: содержит ли эта процедура что-то более существенное, чем просто вывод на экран сообщения о запрете просмотра в движении, но будет по прежнему не понятно, откуда она вызывается.

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

А я тем временем внимательно посмотрю те процедуры, которые ты заколотил, чтобы лучше понять логику, которая запрещает просмотр.

Ёжик Пых 17.06.2011 10:59

Re: Исследование механизма работы ПО MMCS
 
Цитата:

Сообщение от Bedolaga (Сообщение 1038119)
А я тем временем внимательно посмотрю те процедуры, которые ты заколотил, чтобы лучше понять логику, которая запрещает просмотр.

Насколько помню, там 3 проверки: side_brake, tv_park, car_speed.

А вот ячейки памяти, где всё это живет, если не ошибаюсь (смещения 6B, 6C, 6D от R0 с учетом шифта в лево на 2 - 1AC, 1B0, 1B4) :

Код:

.text:00021EB0                mov    #h'6B, r3      ; Move Immediate Byte Data
.text:00021EB2                mov.l  @(4,r8), r0    ; Move Structure Long Data
.text:00021EB4                shll2  r3              ; Shift Logical Left 2
.text:00021EB6                mov.l  off_2214C, r4 ; aUi_dvdcontr_14 ; "[UI_DVDControl055M] side_brake=%d"
.text:00021EB8                jsr    @r9 ; sub_745B8 ; Jump to Subroutine
.text:00021EBA                mov.l  @(r0,r3), r5    ; Move Long Data
.text:00021EBC                mov    #h'6C, r3      ; Move Immediate Byte Data
.text:00021EBE                mov.l  @(4,r8), r0    ; Move Structure Long Data
.text:00021EC0                shll2  r3              ; Shift Logical Left 2
.text:00021EC2                mov.l  off_22150, r4 ; aUi_dvdcontr_15 ; "[UI_DVDControl055M] tv_park=%d"
.text:00021EC4                jsr    @r9 ; sub_745B8 ; Jump to Subroutine
.text:00021EC6                mov.l  @(r0,r3), r5    ; Move Long Data
.text:00021EC8                mov    #h'6D, r3      ; Move Immediate Byte Data
.text:00021ECA                mov.l  @(4,r8), r0    ; Move Structure Long Data
.text:00021ECC                shll2  r3              ; Shift Logical Left 2
.text:00021ECE                mov.l  off_22154, r4 ; aUi_dvdcontr_16 ; "[UI_DVDControl055M] car_speed=%d"
.text:00021ED0                jsr    @r9 ; sub_745B8 ; Jump to Subroutine


DinP 17.06.2011 20:03

Re: FAQ по штатной MMCS (Все вопросы в одной теме)
 
Цитата:

Сообщение от Ёжик Пых (Сообщение 1032792)
Гы. А если скорость порта поменять ещё интересней будет :). Там запрашивается устройство с адресом А0 на шине в цикле и ждет ACK, которого нет.

Сорри что встреваю,но адрес A0 обычно используется для еепром.Рискну предположить что в ключе обновления стоит что-нибудь типа 24Cxx(тогда нет никакой проблемы склонировать ключ).
Правда есть варианты что еепром будет какой-нибудь чудестный(типа как в катриджах Xerox90 или XC01) со стандартным I2C,но со всякими хитрыми защитами.В таком случае придется писать эмулятор.

Bedolaga 17.06.2011 20:31

Re: Исследование механизма работы ПО MMCS
 
Согласен, судя по строковому шаблону, который используется в заглушенных процедурах:

Код:


.data:001A2558 aDvdprohibitfac:.sdata "DVDProhibitFactorChanged av_prohibit=%d,side_brake=%d,tv_park"

так оно и есть. Интересно, эти параметры и для AUX используются? Если так, можно ненапряжно походить по листингу, поискать все обращения к ним и забить все попытки их как-то изменить. Попробую такой вариант.

---------- Добавлено в 20:15 ---------- Предыдущее сообщение было написано в 19:31 ----------

В дополнение,

я попытался поискать по листингу шаблон возможных обращений к этим адресам, предположительно хранящих эти параметры.

Например для "side_brake":

это может быть строка "mov #h'6B, r3", а далее рядышком должно быть такое:

Код:


shll2  r3

или нечто аналогичное по результату

так вот, после непродолжительных поисков находим аккурат содержимое одной из процедур, которую ты заглушил:

Цитата:

.text:00115972 mov #h'6B, r3
.text:00115974 mov r9, r2
.text:00115976 shll2 r3
.text:00115978 add r3, r2
.text:0011597A mov #1, r3
.text:0011597C mov.l r3, @r2
.text:0011597E mov r8, r3
.text:00115980 add #h'13, r3
.text:00115982 mov.b @r3, r3
.text:00115984 extu.b r3, r3
.text:00115986 tst r3, r3
.text:00115988 bf loc_11598E
.text:0011598A mov #0, r3
.text:0011598C mov.l r3, @r2
.text:0011598E
.text:0011598E loc_11598E: ; CODE XREF: .text:00115988
.text:0011598E mov #h'6C, r3
.text:00115990 mov r9, r2
.text:00115992 shll2 r3
.text:00115994 add r3, r2
.text:00115996 mov #1, r3
.text:00115998 add #h'14, r8
.text:0011599A mov.l r3, @r2
.text:0011599C mov.b @r8, r3
.text:0011599E extu.b r3, r3
.text:001159A0 tst r3, r3
.text:001159A2 bf loc_1159A8
.text:001159A4 mov #0, r3
.text:001159A6 mov.l r3, @r2
т.е. все сходится. Эти те самые параметры, значит надо внимательно пошариться по листину и найти те места, которые ты возможно пропустил. Пошел искать.

---------- Добавлено в 20:23 ---------- Предыдущее сообщение было написано в 19:31 ----------

Оппа!

Вот очень подозрительные манипуляции с этими адресами (sie_brake и tv_park):

Код:


loc_427AE:                              ; CODE XREF: sub_42608+142
.text:000427AE                mov.w  @(h'B2,pc), r3 ; [00042864] = h'11A
.text:000427B0                mov    r8, r10
.text:000427B2                add    r3, r10
.text:000427B4                mov.b  @r10, r3
.text:000427B6                extu.b  r3, r0
.text:000427B8                cmp/eq  #2, r0
.text:000427BA                bf      loc_427D2
.text:000427BC                mov    #h'6B, r3
.text:000427BE                mov    r8, r0
.text:000427C0                shll2  r3
.text:000427C2                mov.l  @(r0,r3), r0
.text:000427C4                cmp/eq  #1, r0
.text:000427C6                bf      loc_427D2
.text:000427C8                mov    #2, r5
.text:000427CA                mov.l  @(h'224,pc), r3 ; [000429F0] = sub_47C4C
.text:000427CC                shll16  r5
.text:000427CE                jsr    @r3 ; sub_47C4C
.text:000427D0                mov    r8, r4
.text:000427D2
.text:000427D2 loc_427D2:                              ; CODE XREF: sub_42608+1B2
.text:000427D2                                        ; sub_42608+1BE
.text:000427D2                mov    #9, r5
.text:000427D4                mov.l  @(h'218,pc), r3 ; [000429F0] = sub_47C4C
.text:000427D6                shll16  r5
.text:000427D8                jsr    @r3 ; sub_47C4C
.text:000427DA                mov    r8, r4
.text:000427DC                mov    #3, r3
.text:000427DE                mov    r8, r0
.text:000427E0                mov.b  r3, @r10
.text:000427E2                mov    #-h'6C, r3
.text:000427E4                extu.b  r3, r3
.text:000427E6                mov.l  @(r0,r3), r0
.text:000427E8                cmp/eq  #1, r0
.text:000427EA                bf      loc_427F2
.text:000427EC                mov.l  @(h'204,pc), r3 ; [000429F4] = sub_4E058
.text:000427EE                jsr    @r3 ; sub_4E058
.text:000427F0                mov    r8, r4
.text:000427F2

в общем наметилась какая-то осмысленная стратегия в работе: анализ всех кусков кода, где манипулируют side_brake и tv_park и далее нужная модификация.

Все, можно идти спать.

Ёжик Пых 23.06.2011 01:03

Re: Исследование механизма работы ПО MMCS
 
Bedolaga, перепробовал кучу вариантов, нашел c твоей подсказкой альтернативный метод DVD in Motion, AUX не сдается :wall:

Все Park->Run относятся только к DVD. Вместо 3х заглушек, ставим одну:

Код:


.text:00115798 ; =============== S U B R O U T I N E =======================================
.text:00115798
.text:00115798
.text:00115798 sub_115798:                            ; DATA XREF: .data:001926C4o
.text:00115798                                        ; .pdata:002A9968o
.text:00115798                rts
.text:0011579A                nop
.text:0011579C                mov.l  r10, @-r15
.text:0011579E                mov.l  r11, @-r15
.text:001157A0                mov.l  r12, @-r15
.text:001157A2                mov.l  r13, @-r15
.text:001157A4                sts.l  pr, @-r15
.text:001157A6                add    #-h'10, r15
.text:001157A8                mov    r4, r8
.text:001157AA                mov    #-h'70, r3
.text:001157AC                mov    r8, r10
.text:001157AE                extu.b  r3, r3

И там рядом куча манипуляций с заветными ячейками, вызванными ниоткуда:

Код:


.text:00115972 loc_115972:                            ; CODE XREF: sub_115950+16j
.text:00115972                mov    #h'6B, r3
.text:00115974                mov    r9, r2
.text:00115976                shll2  r3
.text:00115978                add    r3, r2
.text:0011597A                mov    #1, r3
.text:0011597C                mov.l  r3, @r2
.text:0011597E                mov    r8, r3
.text:00115980                add    #h'13, r3
.text:00115982                mov.b  @r3, r3
.text:00115984                extu.b  r3, r3
.text:00115986                tst    r3, r3
.text:00115988                bf      loc_11598E
.text:0011598A                mov    #0, r3
.text:0011598C                mov.l  r3, @r2
.text:0011598E
.text:0011598E loc_11598E:                            ; CODE XREF: sub_115950+38j
.text:0011598E                mov    #h'6C, r3
.text:00115990                mov    r9, r2
.text:00115992                shll2  r3
.text:00115994                add    r3, r2
.text:00115996                mov    #1, r3
.text:00115998                add    #h'14, r8
.text:0011599A                mov.l  r3, @r2
.text:0011599C                mov.b  @r8, r3
.text:0011599E                extu.b  r3, r3
.text:001159A0                tst    r3, r3
.text:001159A2                bf      loc_1159A8
.text:001159A4                mov    #0, r3
.text:001159A6                mov.l  r3, @r2

Мне непонятно из этого только одно, в 6D (vehicale speed) пишется либо #0, либо #1, т.е. это получается флаг, а не реальная скорость ???

WhiteTiger 23.06.2011 09:56

Re: Исследование механизма работы ПО MMCS
 
Дима, в MMCS в разделе Vehicle Signal Check есть данные от 3 сенсоров: Speed, ILL, Shift R Position. Последнее это понятно задняя передача, ILL - Illumination активируется при включении ближнего света, а этот пресловутый Speed становится On при наборе скорости в 6 км\ч, тогда же блокируются и DVD и AUX. Может это тебе как то поможет.


Текущее время: 14:20. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.10
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
Использование материалов сайта разрешается только при условии размещения активной ссылки на OUT-CLUB.RU
Copyright ©2006 - 2024, WWW.OUT-CLUB.RU