Сейчас на форуме: rmn, exp50848 (+9 невидимых)

 eXeL@B —› Основной форум —› Взлом прошивки
Посл.ответ Сообщение


Ранг: 266.8 (наставник), 5thx
Активность: 0.220.03
Статус: Участник
very WELL :)

Создано: 02 июня 2014 02:48
· Личное сообщение · #1

Всем привет. Смотрю на дату регистрации и понимаю, что прошло уже 10 лет с момента переезда с фэстбб на этот форум. Вот время-то летит...

Теперь собственно вопрос по теме
Не совсем от меня, но пишу от первого лица.

По сути там проблема выглядит так: есть екзешник, при нем конфигурационный файл с тем- же именем. И файл акцесс с прошивкой. Пароль на посмотреть - TelePrg. В данном случае в ini файле критична секция, описывающая блок EDC7UC31. Какие либо изменения в секциях [EDC7UC31_AREE_1]
[EDC7UC31_AREE_2]
Даже если не менять ничего в самой прошивке приводят к сбою процесса прошивки. Что касается самого файла с прошивкой: я для удобства ковыряния перегнал его в бинарник. Сравнивая бинарники от совершенно разных прошивок, были найдены внутри места с различной информацией (нужной для корректировки) а также некие 4 байта, по моим подозрениям хранящие контрольную сумму какого то блока этого бинарника. Собственно вопрос в том, как изменив хоть что то по адресам от 1C0000 понять кс какого куска прописана в этих 4 байтах? И что при этом надо прописать в инишнике.

Я нарисовал программульку, которая с побайтным приращением сегмента считала кс. Ничего не совпало. пару сотен тысяч результатов прогнал. Может оно и не контрольная сумма там по этим адресам. У меня есть еще один комплект екзешник- ини и база. Там отличия только на одну вифра в ВИНе и в прочих номерах : номере движка, клапанов... На сравнении видно, что вся эта текстовка лежит начиная от 1С0000 до собственно этого адреса с 4 байтами. Счас по памяти может ошибусь... 1FDFF4

Указатели на этот адрес есть в секции инишки [TRIMM_CHECK] но ремаркирование строк этой секции при прошивке не приводит к сбою. А какие либо изменения в тех, о которых чуть раньше писал - сбой программирования. Причем это при неизмененном датафайле.


Если кто сможет помочь, буду очень благодарен.

Добавлено спустя 1 минуту
Архив с прогой: http://rghost.ru/private/56075421/409e313a05b2a424e8218ff3f26502cd




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 02 июня 2014 08:40
· Личное сообщение · #2

WELL пишет:
Даже если не менять ничего в самой прошивке приводят к сбою процесса прошивки.

че смысл ковырять если изначально оно уже не шьется




Ранг: 266.8 (наставник), 5thx
Активность: 0.220.03
Статус: Участник
very WELL :)

Создано: 02 июня 2014 10:42
· Личное сообщение · #3

Изначально всё шьётся.
Смысл в том, чтобы в прошивке поменять VIN автомобиля.
Если в ней меняешь какие-то поля: ВИН, номер двигателя и т.д., то процесс уже не идёт.

Добавлено спустя 0 минут
То есть где-то контрольная сумма проверяется. Но вот где... не получается найти.

Добавлено спустя 5 минут
Смысл в том, что с некоторой периодичностью выпускаются апгрейды мозгов грузовиков. Но забунорные барыги за каждую требуют денег. А машины одной серии отличаются только номером двигателя, катушек зажигания, вином, ну и всей той текстовкой, что лежит в ini файле. Тоже самое и в прошивке. У меня есть несколько файлов, и даже написана программа онлайн замены любых значений. Кроме этих четырех байт. Есть вообще две идентичные прошивки, в которых ВИН отличается на одну цифру. На основе этого и проведен анализ.

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

А забить на этот апгрейд мозгов нельзя. Просто перестанет заводиться.



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 02 июня 2014 11:45
· Личное сообщение · #4

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

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




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

Создано: 02 июня 2014 13:07 · Поправил: zds
· Личное сообщение · #5

WELL пишет:
А забить на этот апгрейд мозгов нельзя. Просто перестанет заводиться.

если честно бред какой-то... первый раз о таком слышу...хотя не отрицаю, что ошибаюсь. обычно в прошивках исправлют какие-то ошибки, правят топливные карты для более ровной работы - это я об офф.прошивках. а чтобы устанавливать лимит на запуск))) а если ты едешь к диллеру за апдейтом через Сибирь например и сломался где-то по дороге и не успел вовремя...то все чтоли? вызывай эвакуатор т.к. даже устранив поломку машина не заведется?

по теме:
1) самый простой способ отредактировать - WinOls + нужный конфиг файл. открыл твою прошу в нем с нужным конфиг файлом - все карты кроме 2 определись. нашел и вин и SN. единственно у меня winols ломанный - для даннного блока нет модуля подсчета CRC.
как вариант найти человека с лицензионным Winols. если нужно подправить только в этой одной проше - могу попросить своего друга - у него есть. если нужен большой объем и постоянно, то врпинципе можно договориться
2) попробуй посмотреть офф прогу - Iveco Easy. она правда работает вроде со своим адаптером - ECI. но там посмотри в папке \EOL\00000148\ должны быть exe прошивальшика под этот блок. может сможешь его адаптировать под свой адаптер - не знаю чем пользуешься. знаю точно, что этот же файл прошивальщика использует прога CNH EST и там можно прошить либо через DPA5 либо любым k-line адпатером.
3) разрабатывал несколко тулз для редактирования прошивок под такой же блок правда для агротехники Case и NewHolland. остались наброски тулзы для подсчета CRC, правда мне не пригодилось т.к. там оказалось что CRC вообще не проверяется при прошивки - причем используется такой же прошивальщик....вечером попробую изменить для примера VIN и прогнать через свою тулзу - может подойдет для твоей проши.

| Сообщение посчитали полезным: WELL

Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 02 июня 2014 13:51
· Личное сообщение · #6

zds я вот пол года назад.. делал для дальнобойщиков.. из харватии.. там каждые Ннное кол-во км.. блок лочит движок.. и ехать можно 60км в час.. и пиздос... т.е. до ТО ты доедиш.. но работать так.. врядли буш.. я про то.. что винолс хорош.. для анализа.. но ЦРЦ ты не поймаеш.. извтратов хватает

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




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

Создано: 02 июня 2014 15:48
· Личное сообщение · #7

VodoleYя конечно понимаю, что Европе совсем другое отношение к ремонту и вообще к грузоперевозкам - там большая часть обслуживается у дилеров или имеет годовой контракт обслуживания в специализированном сервисе...но я думаю это маразм даже для них. Купив трак за 5млн считаю, что я должен иметь возможность выбора где обслуживаться - у дилера, у друга в сервисе или вообще самому... Хотя возможно такие траки куплены со скидкой по контракту с обязательным условием обслуживания.... Типа как телефоны за 100р у операторов связи с контрактом.

По теме: не знаю что здесь за трак, но у меня друг без проблем редактирует прошивки для траков Ивеко в Винолс



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 02 июня 2014 16:32
· Личное сообщение · #8

zdsну ну .. виносл зантна штутука для анализа. по форме карты. но это лиш помошник.. не более того

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 266.8 (наставник), 5thx
Активность: 0.220.03
Статус: Участник
very WELL :)

Создано: 04 июня 2014 08:50
· Личное сообщение · #9

Вкратце так: машина не не заводится, она не едет, тут ошибка трансляции мысли. Мощность снижается до тележки с водителем. Ни скорость ни груз взять. В общем "не едет". Это что касается актуализации прошивок. Про winOls не слышал, буду искать возможность найти этот софт. Грузовики действительно ивеко, тут верно определили. Ниже ссылка, там ДВЕ прошивки, с разницей в одну цифру в вине. Обе полностью рабочие и шьющиеся. И в сравнении этих двух прошивок можно будет увидеть, что вся различающаяся инфа - это текст в принципе. Его я легко выдергиваю из прошивки, меняю как надо и пишу обратно. Но там есть 4 байта, которые , imho, есть КС какого то куска. Вот границы этого куска я и хотел найти.

Вот ссылка на архив с двумя прошивками
http://yadi.sk/d/cgPBcLHVS92JZ

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



Ранг: 397.0 (мудрец), 179thx
Активность: 0.170.1
Статус: Участник

Создано: 04 июня 2014 11:37 · Поправил: BfoX
· Личное сообщение · #10

я могу ошибаться, но в файле TeleProgrammazioneECS.ini
есть
[TRIMM_CHECK]
'TC#=ADDR_START_M;ADDR_END_M;ADDR_CHECK_M;TRIMM_V;ADDR_START_V;ADDR_END_V;ADDR_CHECK_V
TC1=1C0000;1FDFF3;1FDFF4;1BFF00;1B0000;1BFFFB;1BFFFC
TC2=1A0000;1EDFF3;1EDFF4;1BFF00;1F0000;1FFFFB;1FFFFC

что странно совпадает с Вашим:

"Сравнение файлов res86.bin и RES87.BIN
001FDFF4: D8 D3
001FDFF5: 6F 79
001FDFF6: 54 5D
001FDFF7: 5B 23
"

думается, что искомый кусок это 1C0000...1FDFF3

по поводу кс:

интересно покопать тут, но у меня прога ругается на ActiveX

004473A0: 55 push ebp
004473A1: 8BEC mov ebp,esp
004473A3: 83EC14 sub esp,014

-----
...или ты работаешь хорошо, или ты работаешь много...





Ранг: 266.8 (наставник), 5thx
Активность: 0.220.03
Статус: Участник
very WELL :)

Создано: 05 июня 2014 09:20
· Личное сообщение · #11

Спасибо всем, за ответы.

Насчет 1C0000...1FDFF3.
Этот "искомый кусок" я нашел сразу же. Это не оно. Или оно, но не црц32 , а какой то иной алгоритм. Проверить легко: в винхексе этот кусок проверить. Бинарник же есть. Там засада именно в том, что эти 4 байта не совсем црц32, имхо, а какой то ксор на црц. И чтобы это понять , имхо, надо найти вызов на этот адрес и посмотреть, чего же там сравнивается с этими 4 байтами.

А инишку я прочел, и нашел эти сегменты сразу же может те байты, что после этих адресов стоят и есть искомое слово для ксора? Или может это маска для црц? Непонятно. Понятно, что нестандартный алгоритм проверки контрольной суммы...




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 05 июня 2014 09:47
· Личное сообщение · #12

WELL
А что, отреверсить прогу не получается? А так можно только гадать до пенсии)).

-----
Everything is relative...




Ранг: 397.0 (мудрец), 179thx
Активность: 0.170.1
Статус: Участник

Создано: 05 июня 2014 09:51
· Личное сообщение · #13

ну а кто мешает в crc32 заменить стандартный polynom=0xEDB88320 на кастомный типа 0xCAFEAFFE или 0xFADECAFE?

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

-----
...или ты работаешь хорошо, или ты работаешь много...


| Сообщение посчитали полезным: WELL


Ранг: 266.8 (наставник), 5thx
Активность: 0.220.03
Статус: Участник
very WELL :)

Создано: 05 июня 2014 17:57
· Личное сообщение · #14

То есть в бинарнике меняем константу 0xEDB88320 на свою?



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 05 июня 2014 18:37 · Поправил: Veliant
· Личное сообщение · #15

Сдается мне в самом ехе нет проверяющего кода, он вынесен в COM-объект EcsCentrInterfaccia2380. Советую поискать по диску ECSCENTRINTERFACCIA*.DLL или ECSCENTRINTERFACCIA*.ocx.
Гугл знает про некоторую ECSCENTRINTERFACCIA2_370.DLL, но где скачать не нашел

P.S.
А вообще думаю там банальный xor будет или сложение

P.P.S
Там банальная сумма. Складываем diff байты на позициях mod 0,mod 1,mod 2,mod 3, и получаем что суммы байт отличаются ровно на столько, сколько и байты контрольной суммы на тех же позициях.
Можете сами найти от какого блока и с каким стартовым значением суммируется, а можете на основе имеющейся суммы считать коррекцию для своего патча

Code:
  1. 001C26BC: 31 30-
  2. 001C26BD: 38 31!
  3. 001C26BE: 36 38<
  4. 001C26BF: 37 36
  5. 001C26C0: 35 38-
  6. 001C26C1: 36 38!
  7. 001C26C2: 20 32<
  8. 001C26CA: 4B 49<
  9. 001C26CB: 31 49
  10. 001C26CD: 41 42!
  11. 001C26CE: 50 35
  12. 001C26D2: 4D 4B<
  13. 001C26D3: 41 53
  14. 001C26D6: 50 31<
  15. 001C26D7: 35 36
  16. 001C26DA: 45 4B<
  17. 001C26DB: 41 31
  18. 001C26DE: 32 53<
  19. 001C26DF: 31 49
  20. 001C26E2: 47 48<
  21. 001C26E3: 49 53
  22. 001C26E5: 42 41!
  23. 001C26E6: 4D 41<
  24. 001C26E7: 35 41
  25. 001C26EA: 45 44<
  26. 001C26ED: 42 41!
  27. 001C26EE: 52 47<
  28. 001C26EF: 4E 53
  29. 001C26F2: 44 46<
  30. 001C26F6: 56 4F<
  31. 001C26F7: 49 35
  32. 001C755E: 32 33<
  33. 001C7584: 36 37-
  34. 001C75B8: 31 30-
  35. 001C75B9: 38 31!
  36. 001C75BA: 36 38<
  37. 001C75BB: 37 36
  38. 001C75BC: 35 38-
  39. 001C75BD: 36 38!
  40. 001C75BE: 20 32<
  41. 001CE071: 36 37!
  42. 001E8C9A: 36 37<
  43.  
  44. 001FDFF4: D8 D3-
  45. 001FDFF5: 6F 79!
  46. 001FDFF6: 54 5D<
  47. 001FDFF7: 5B 23
  48.  
  49. - mod 0
  50. 31+35+36+31+35=2
  51. 30+38+37+30+38=7
  52. 7-2=5, D8-D3=5
  53.  
  54. ! mod 1
  55. 38+36+41+42+42+38+36+36=D7
  56. 31+38+42+41+41+31+38+37=CD
  57. CD-D7=F6, 6F-79=F6
  58.  
  59. < mod 2
  60. 36+20+4B+50+4D+50+45+32+47+4D+45+52+44+56+32+36+20+36=88
  61. 38+32+49+35+4B+31+4B+53+48+41+44+47+46+4F+33+38+32+37=7F
  62. 88-7F=09, 5D-54=09



Code:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main(int argc, char** argv)
  6. {
  7.          FILE *= fopen("res86.bin", "rb");
  8.          FILE *f2 = fopen("res87.bin", "rb");
  9.          if (!|| !f2) {
  10.                  puts("fopen");
  11.                  return 0;
  12.          }
  13.          char *mem = malloc(0x3E000);
  14.          fseek(f2, 0x1C0000, SEEK_SET);
  15.          fread(mem, 1, 0x3E000, f2);
  16.          unsigned *memDw = (unsigned *)mem;
  17.          unsigned char rez[4];
  18.          memset(rez, 0, 4);
  19.          
  20.          for(size_t i = 0; i < 0x3E000; i+=4)
  21.          {
  22.                  rez[0] += mem[i];
  23.                  rez[1] += mem[i+1];
  24.                  rez[2] += mem[i+2];
  25.                  rez[3] += mem[i+3];
  26.          }
  27.  
  28.          printf("%02X%02X%02X%02X\n", rez[0], rez[1], rez[2], rez[3]);
  29.  
  30.          free(mem);
  31.          mem = malloc(0x3E000);
  32.          fseek(f, 0x1C0000, SEEK_SET);
  33.          fread(mem, 1, 0x3E000, f);
  34.          memDw = (unsigned *)mem;
  35.          memset(rez, 0, 4);
  36.          
  37.          for(size_t i = 0; i < 0x3E000; i+=4)
  38.          {
  39.                  rez[0] += mem[i];
  40.                  rez[1] += mem[i+1];
  41.                  rez[2] += mem[i+2];
  42.                  rez[3] += mem[i+3];
  43.          }
  44.  
  45.          printf("%02X%02X%02X%02X\n", rez[0], rez[1], rez[2], rez[3]);
  46.  
  47.          fclose(f);
  48.          fclose(f2);
  49.          return 0;
  50. }

Возвращает
Code:
  1. 5ED4C8FF
  2. 5ED4C8FF


Что и требовалось доказать.. тупо сумма

| Сообщение посчитали полезным: zds, WELL


Ранг: 266.8 (наставник), 5thx
Активность: 0.220.03
Статус: Участник
very WELL :)

Создано: 06 июня 2014 13:10
· Личное сообщение · #16

Всем большое спасибо за помощь.
Особенно Veliant



Ранг: 42.3 (посетитель), 19thx
Активность: 0.040
Статус: Участник

Создано: 07 июня 2014 13:29
· Личное сообщение · #17

WELL, Вы сами можете закрыть свою тему, кнопка "Закрыть тему" находится внизу страницы, под кнопкой "Отправить сообщение".




Ранг: 266.8 (наставник), 5thx
Активность: 0.220.03
Статус: Участник
very WELL :)

Создано: 10 июня 2014 04:15
· Личное сообщение · #18

Не закрывал, потому что хотел убедиться, что всё пройдёт как надо
Всё получилось, всем еще раз огромное спасибо!


 eXeL@B —› Основной форум —› Взлом прошивки
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати