Сейчас на форуме: Magister Yoda, vasilevradislav (+3 невидимых)

 eXeL@B —› Крэки, обсуждения —› Извлечь ресурсы из прошивки и запаковать обратно
Посл.ответ Сообщение

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

Создано: 12 мая 2015 00:26 · Поправил: dean999
· Личное сообщение · #1

Добрый день.
Имеется желание модифицировать прошивку от плеера Cowon U5.

Как выглядит в жизни:


Как выглядит у меня:




Использовал инфу:
Code:
  1. Для D2 выпущено несколько маленьких программ для распаковки тем, увеличение читабельности шрифотов, добавление нужных кодировок для тегов и читалки текста а так же скриншотов. Сейчас я кратко расскажу о каждой:
  2. D2toTGA, TGAtoD2 - софт для распаковки тем. Просто складываем файл D2N_rs.bin в ту же папку где лежит D2toTGA и запускает D2toTGA.exe, после чего получаем множество TGA файлов, которые можно редактировать через фотошоп или другой софт, после редактирования, запускаем TGAtoD2.exe и он запаковывает всё обратно. Чтобы посмотреть что вышло (скриншоты) - можно использовать D2Screen.exe, использование аналогично D2toTGA.
  3. Важно: чтобы редактировать темы для D2+, или делать скриншоты нужно переименовать файл D2N_P_RS.bin в D2N_rs.bin, а перед копированием файла не плеер, нужно переименовать файл обратно, в D2N_P_RS.bin

Не подходит

Возможно истина есть в этом исходнике:

Code:
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5.  
  6. const int CSIZE = 6*1024*1024;
  7. unsigned char Data[CSIZE];
  8.  
  9. int main(int argc, char * argv[])
  10. {
  11. int i, j, n, c, size, xres, yres, bpp;
  12. char szImage[] = "img000.tga";
  13. FILE * f1;
  14. FILE * f2;
  15.  
  16. if ((f1 = fopen("D2N_rs.bin", "rb")) != 0) 
  17. {
  18. size = fread(&Data, 1, CSIZE, f1);
  19. fclose(f1);
  20. }
  21. else
  22. {
  23. printf( "ERROR: D2N_rs.bin not found\n" );
  24. return 1;
  25. }
  26.  
  27. = 0;
  28. = 0;
  29.  
  30. while (c+4<size)
  31. {
  32. bpp = 1;
  33. if (Data[c] == 16)
  34. {
  35. bpp = 2;
  36. }
  37. else
  38. if ((Data[c] >= 24) && (Data[c] <= 32))
  39. {
  40. bpp = 4;
  41. }
  42. xres = Data[c+1] + (Data[c+2] << 8 );
  43. yres = Data[c+3] + (Data[c+4] << 8 );
  44.  
  45. if ((bpp == 1) || (xres == 0) || (xres > 160) || (yres == 0) || (yres > 128))
  46. {
  47. c++;
  48. }
  49. else
  50. {
  51. unsigned short TGAheader[9] = {0,2,0,0,0,0,xres,yres,2080};
  52. unsigned int p0, p1, r, g, b, a, col;
  53.  
  54. szImage[3] = '0'+((n/100)%10);
  55. szImage[4] = '0'+((n/10)%10);
  56. szImage[5] = '0'+(n%10);
  57.  
  58. printf( "0x%6X: %s [%dx%d] (%d bit)\n", c, szImage, xres, yres, Data[c] );
  59.  
  60. if ((f2 = fopen(szImage, "wb")) != 0) 
  61. {
  62. fwrite(&TGAheader, sizeof(TGAheader), 1, f2);
  63. if (bpp == 2)
  64. {
  65. for (j=0; j<yres; j++)
  66. for (i=0; i<xres; i++)
  67. {
  68. p0 = Data[c+5+(yres-1-j)*xres*2+i*2];
  69. p1 = Data[c+5+(yres-1-j)*xres*2+i*2+1];
  70.  
  71. = (p1 & 0xF8);
  72. = ((p1 & 0x07) << 5) + ((p0 & 0xE0) >> 3);
  73. = (p0 & 0x1F) << 3;
  74. = 0xFF;
  75. if( g == 0xFC && r==0 && b==0)
  76. = 0;
  77.  
  78. col = (a<<24) + (r<<16) + (g<<8) + b;
  79.  
  80. fwrite(&col, 4, 1, f2);
  81. }
  82. }
  83. else
  84. {
  85. for (j=0; j<yres; j++)
  86. {
  87. fwrite(&Data[c+5+(yres-1-j)*xres*4], xres*4, 1, f2);
  88. }
  89. }
  90. fclose(f2);
  91. }
  92. += xres*yres*bpp+5;
  93. n++;
  94. }
  95. }
  96. printf("\nOK\n");
  97.  
  98. return 0;
  99.  


Из статьи понял "Как достать графику из игры. Игровая палитра", как найди изображения в коде:

08 10 00 10 00 = 16x16 BIT 8

08 39 00 49 00 = 57x73 BIT 8

08 36 00 4d 00 = 54x77 BIT 8

Должно после излечения получится примерно такое (набросок в фотошопе):


На изображение выше, видно что не корректно цвет отображается, возможно есть некие альфа каналы и подобные силы.

Использовал софт:
BinEdit 2011.11.2
TextureFinder.v21.exe
D2toTGA, TGAtoD2


Прошивка:
Прошивка для плеера

Вопрос: Как достать и модифицровать изображение (прошивку)?



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

Создано: 12 мая 2015 03:37 · Поправил: unknownproject
· Личное сообщение · #2

dean999 пишет:
Как достать и модифицровать изображение

Перерисовать и сделать замену, определив границы изображения, т.е. byte-to-byte замена.
Начать нужно с анализа заголовка.Даю подсказку.

Поиск по строкам даст отсылку на указатели и поддерживаемые форматы изображений.Строки все читаются нормально.

-----
TEST YOUR MIGHT





Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 12 мая 2015 10:36 · Поправил: -=AkaBOSS=-
· Личное сообщение · #3

dean999 пишет:
Для D2 выпущено несколько маленьких программ для распаковки тем, увеличение читабельности шрифотов, добавление нужных кодировок для тегов и читалки текста а так же скриншотов.

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

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

А насчёт вопроса о цвете - битовая глубина изображений - 8 бит, тоесть каждый байт представляет собой не цвет, а индекс палитры. Судя по фотографии плеера, палитра там - обычный градиент, который вполне может быть создан программно на основе конкретного цвета.



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

Создано: 12 мая 2015 13:56
· Личное сообщение · #4

касательно палитры я автору топика уже говорил.. а ЛС.. но меня тут смущает код
r = (p1 & 0xF8);
g = ((p1 & 0x07) << 5) + ((p0 & 0xE0) >> 3);
b = (p0 & 0x1F) << 3;
a = 0xFF;

ммм. 8 бит глубина? 5 бит кастрируем? с альфа каналом у нас совсем беда? палитры нет вообще..

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





Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 12 мая 2015 15:47 · Поправил: -=AkaBOSS=-
· Личное сообщение · #5

VodoleY пишет:
но меня тут смущает код

условие этого кода: if (bpp == 2), что соответствует 16 битам, а в файле наблюдаются именно 8 битные изображения (которые, кстати, в приведённом сорце никак не поддерживаются - тоже, видать, не разобрались)

Наваял небольшой скрипт на бмс, вытащил все картинки (см. аттач)
При желании можно глянуть через программы, поддерживающие RAW изображения. Но к пониманию организации данных в прошивке это, к сожалению, не приведёт

формат простой:
bpp db ?
width dw ?
height dw ?
\ дальше пошли данные


19be_12.05.2015_EXELAB.rU.tgz - files.zip

?обавлено спуст¤ 27 минут
хм.. судя по всему, все адреса записаны относительно базового адреса 0х20000000

dean999, предоставленный вами файл - это firmware или непосредственно дамп прошивки из устройства?



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

Создано: 12 мая 2015 16:23 · Поправил: dean999
· Личное сообщение · #6

-=AkaBOSS=-

Это часть прошивки, другая часть шрифты.
Разбиты на 2 части в моем случае.
Посмотрел бегло в фотошопе, вижу чернобелые картинки.

Сорц был представлен для ознакомления от другого плеера.



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

Создано: 19 мая 2015 14:39 · Поправил: dean999
· Личное сообщение · #7

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





Анимированное лого, создал сам.



Создавался в программе JetLogo.
Положил файл в папку system\logo.ilb




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 25 мая 2015 17:03 · Поправил: -=AkaBOSS=-
· Личное сообщение · #8

Базовый адрес прошивки - 0x20000000

Данные по адресу 0x200B44E4 действительно представляют собой массив 16 битных цветов палитры.

Функции sub_2002C018 и sub_2002E1F8 выполняют собственно распаковку изображений в экранный буфер.
Первая работает со всем экраном, а вторая с областью 60x70 пикселей.

Процедура sub_2002B504 инициализирует структуру с настройками экрана. Пара интересных моментов:

Code:
  1.   LDR   R4, =0x201C0BFC
  2.   LDR   R0, unk_200B44E4
  3.   STR   R0, [R4,#0x2C]    // +0x2C - сохраняется адрес палитры
  4.  
  5.   MOV   R0, #0x8A         // индекс прозрачности
  6.   STRB  R0, [R4,#0x2A]    // +0x2A - если попадается в изображении, пиксель в экранный буфер не пишется



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

Накопал пару даташитов на дисплейные контроллеры со схожими характеристиками (128х160, 18bit). Судя по ним, цвет хранится в формате 5-6-5 и при передаче расширяется до 6-6-6.


Но даже теперь не могу понять, что же я упускаю...

Даташит на дисплей из Cowon iAudio U3: --> Link <--



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

Создано: 26 мая 2015 10:57
· Личное сообщение · #9



Cowon iAudio U3: Очень похож!



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

Создано: 28 июня 2015 01:53 · Поправил: dean999
· Личное сообщение · #10

Спасибо -=AkaBOSS=-

Есть результат.








Как было:


Как хочу сделать:



 eXeL@B —› Крэки, обсуждения —› Извлечь ресурсы из прошивки и запаковать обратно
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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