eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› MediaCoder 0.8.33.5680 - размер массива задан жёстко, как увеличить? работа с сегментами
Посл.ответ Сообщение

Ранг: 1.5 (гость)
Статус: Участник

Создано: 28 декабря 2014 14:38 · Поправил: Telo New!
Цитата · Личное сообщение · #1

Привет, оставил запрос на взлом программы https://exelab.ru/f/index.php?action=vthread&forum=2&topic=23172&page=5#18

Тем временем пытаюсь взломать сам.

1. MediaCoder 0.8.33.5680
2. известный кодировщик/перекодировщик видео/аудио
3.
x86 http://www.mediacoderhq.com/mirrors.html?file=MediaCoder-0.8.33.5680.exe
x64 http://www.mediacoderhq.com/mirrors.html?file=MediaCoder-x64-0.8.33.5680.exe
только исполняемый файл x86 http://rghost.ru/60018831
4. ~70mb
5.

6. Не получается добавить в очередь больше 60 файлов, предлагает купить полную версию. Для тестов просто дрэг энд дропайте видео-файлы на окно программы. Когда будет больше 60 вылетит наг.


У меня нет опыта, но установил IDA Pro и начал копать x86 версию, т.к. HexRays не работает под x64, хотя она предпочтительнее.

1. Табличка MediaCoder is a freeware...нельзя добавить больше 60 файлов. Появляется по адресу 00421918


2. По адресам 00421810 и 00451DF2 нашёл сравнение cmp eax, 3Ch - это как раз проверка на >60 файлов. Замена 3C на большее значение (7D) помогает добавить в список немного больше файлов! но, увы, автор сделал ограничение ещё в другом месте, которое я не могу поправить.

3. Другое место, это адрес 004522F2 в котором, похоже, ищется свободное место в ListView. Посмотрите скрин

Максимальная длина 6820h а размер одного элемента 188h. Если поделить, то получим 68 элементов - это как раз то число, больше которого файлы не добавляются, не смотря на исправления, сделанные в пункте 2.

Я пытаюсь поправить 6820h на бОльшее значение, добавляется еще 1-2 файла, но потом, похоже, происходит переполнение массива и программа крэшится.

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

адрес массива этот


в сегменте .data есть запись про этот массив, но не указана длина. Как добавить другой массив в сегмент и указать его длину?


работаю в IDA Pro там есть работа с сегментами


жму Create segment, в окне необходимо внести начало и конец создаваемого сегмента, но как мне найти дырку нужной длины, чтобы ничем другим не была занята? размер приличный нужен на 1000 элементов по 188h каждый это нужно 392000 байт

Ранг: 92.3 (постоянный)
Статус: Участник

Создано: 28 декабря 2014 19:41 New!
Цитата · Личное сообщение · #2

Telo пишет:
жму Create segment, в окне необходимо внести начало и конец создаваемого сегмента, но как мне найти дырку нужной длины, чтобы ничем другим не была занята? размер приличный нужен на 1000 элементов по 188h каждый это нужно

Скачай PeTools и создай новую секцию, хоть на гигабайт и используй её как "дырку".

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



Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

Создано: 28 декабря 2014 19:54 New!
Цитата · Личное сообщение · #3

правильно, нужно создать новую секцию размера ~0x5FB40h а лучше min 0x60000h и поправить указатель на массив в коде, на новый адрес, созданной секции.


Ранг: 1003.6 (!!!!)
Статус: Участник

Создано: 28 декабря 2014 19:54 New!
Цитата · Личное сообщение · #4

а толку, релоков там явно не один


Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

Создано: 28 декабря 2014 19:56 New!
Цитата · Личное сообщение · #5

reversecode релоки можно и убить ну или запатчить красиво. пусть пробует, потом поможем по ходу дела.


Ранг: 1003.6 (!!!!)
Статус: Участник

Создано: 28 декабря 2014 19:59 New!
Цитата · Личное сообщение · #6

релоков (рефов) на этот массив, там не один, нужно разбирать прогу и искать все референсы

Ранг: 1.5 (гость)
Статус: Участник

Создано: 28 декабря 2014 20:01 New!
Цитата · Личное сообщение · #7

спасибо за советы, я сейчас буду пробовать

reversecode, Hellspawn а что такое "релоки"? имеется ввиду, что в программе ограничения существуют не только в этих, но и других местах?


Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

Создано: 28 декабря 2014 20:01 New!
Цитата · Личное сообщение · #8

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

reversecode ну поправит по хрефам адреса

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


Ранг: 1.5 (гость)
Статус: Участник

Создано: 28 декабря 2014 20:05 · Поправил: Telo New!
Цитата · Личное сообщение · #9

reversecode пишет:
релоков (рефов) на этот массив, там не один, нужно разбирать прогу и искать все референсы

в IDA Pro я посмотрел xrefs на этот массив - только один.. в указанном на скринах месте. больше нигде ссылок на этот массив нет.


Добавлено спустя 2 минуты
проверял x-refы в IDA таким образом


Добавлено спустя 11 минут
создаю секцию размером 392000 байт, это 1000 элементов длиной 188h


характеристики созданной секции


Ранг: 1003.6 (!!!!)
Статус: Участник

Создано: 28 декабря 2014 20:27 New!
Цитата · Личное сообщение · #10

Hellspawn пишет:
ну поправит по хрефам адреса

не поправит, там стат масив и он зацеплен за другие структуры которые тянуться намного раньше

Telo пишет:
в IDA Pro я посмотрел xrefs на этот массив - только один.. в указанном на скринах месте. больше нигде ссылок на этот массив нет.

да да вот дураки программисты оставили вам один static FILES array[60];
что бы вы перебили один релок и было счастье ну ну, а не будет

Ранг: 1.5 (гость)
Статус: Участник

Создано: 28 декабря 2014 20:49 · Поправил: Telo New!
Цитата · Личное сообщение · #11

новый сегмент виден из под IDA. Начальный адрес сегмента 00592000


меняю адрес массива с 5309С0 на адрес нового сегмента 00592000



Добавлено спустя 5 минут
результат. адрес массива исправлен, длина массива исправлена.

Ранг: 45.4 (посетитель)
Статус: Участник

Создано: 28 декабря 2014 20:58 · Поправил: Alf New!
Цитата · Личное сообщение · #12

взломано уже каг бы

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


Ранг: 1.5 (гость)
Статус: Участник

Создано: 28 декабря 2014 21:00 New!
Цитата · Личное сообщение · #13

Alf ну вот, приехали))) блин а я искал в варезнике на рубоарде, поиск ничего не давал :'(


Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

Создано: 28 декабря 2014 21:06 New!
Цитата · Личное сообщение · #14

Telo после манипуляций завелось али нет? ))) самому же интереснее.

Ранг: 1.5 (гость)
Статус: Участник

Создано: 28 декабря 2014 21:07 · Поправил: Telo New!
Цитата · Личное сообщение · #15

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


Ранг: 1003.6 (!!!!)
Статус: Участник

Создано: 28 декабря 2014 21:08 · Поправил: reversecode New!
Цитата · Личное сообщение · #16

очевидно что нет)) массив не может заполняться через проверку test [eax], 0x80000... )))

Ранг: 1.5 (гость)
Статус: Участник

Создано: 28 декабря 2014 21:10 New!
Цитата · Личное сообщение · #17

reversecode
ну мне тоже было интересно что это за странная проверка. Но просто по логике там было так, что при добавлении файла прога заходит в это место, которое я пытался фиксить и если выходит за 68й элемент (это как раз размер массива, что я пытался увеличить), то эта subroutine возвращает eax равный 0 и файлы не добавляются. А если еще нет 68 элементов, то EAX возвращался явно похожим на адрес для нового элемента как раз в пределах того массива, что я пытался переделать.

ну что это за проверка test [eax], 0x80000 я тоже не понял


Ранг: 1003.6 (!!!!)
Статус: Участник

Создано: 29 декабря 2014 02:20 New!
Цитата · Личное сообщение · #18

потому что
Code:
  1. char *__cdecl get_new_sub_4522D0(int a1)
  2. {
  3.   int pos_v1; // esi@1
  4.   unsigned int idx_v2; // eax@1
  5.   char *result; // eax@4
  6.   int *obj_v4; // esi@5
  7.  
  8.   pos_v1 = 0;
  9.   idx_v2 = 0;
  10.   while ( array_dword_5309C0[idx_v2] & 0x80000000 )
  11.   {
  12.     idx_v2 += 98;
  13.     ++pos_v1;
  14.     if ( idx_v2 >= 6664 )
  15.       return 0;
  16.   }
  17.   obj_v4 = &array_unk_5309A0[98 * pos_v1];
  18.   if ( obj_v4 )
  19.   {
  20.     memset(obj_v4, 0, 0x188u);
  21.     obj_v4[8] |= 0x80000400;
  22.     if ( a1 )
  23.       obj_v4[2] = (int)sub_4C3B3A((const char *)a1);
  24.     obj_v4[11] = (int)sub_44FEB0(a1);
  25.     obj_v4[34] = 0x3F800000;
  26.     ++count_dword_530998;
  27.     result = (char *)obj_v4;
  28.   }
  29.   else
  30.   {
  31.     result = 0;
  32.   }
  33.   return result;
  34. }

Ранг: 1.5 (гость)
Статус: Участник

Создано: 29 декабря 2014 21:09 New!
Цитата · Личное сообщение · #19

reversecode

блиин так надо было фиксить другой массив) array_unk_5309A0

а у меня hexrays отказывался псевдокод создавать почему-то поэтому и протупил похоже. использовал Ida PRO 6.5 + hexrays 1.5


Ранг: 1003.6 (!!!!)
Статус: Участник

Создано: 29 декабря 2014 21:10 New!
Цитата · Личное сообщение · #20

это один и тот же массив, но лучше конечно уметь пользоваться гуглом и рубордом
 eXeL@B —› Вопросы новичков —› MediaCoder 0.8.33.5680 - размер массива задан жёстко, как увеличить? работа с сегментами

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS