Сейчас на форуме: igorcauret (+7 невидимых)

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

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

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

Привет, оставил запрос на взлом программы https://exelab.ru/f/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.1 (постоянный), 83thx
Активность: 0.110
Статус: Участник

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

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

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

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


Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

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

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

-----
[nice coder and reverser]





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

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

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




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

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

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

-----
[nice coder and reverser]





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

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

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



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

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

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

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




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

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

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

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

-----
[nice coder and reverser]


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

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

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

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

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


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


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


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





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

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

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

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

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

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



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

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

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


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



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




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

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

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

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

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

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

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




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

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

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

-----
[nice coder and reverser]




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

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

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




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

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

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



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

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

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

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




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

Создано: 29 декабря 2014 02:20
· Личное сообщение · #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 (гость), 1thx
Активность: 0.010
Статус: Участник

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

reversecode

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

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




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

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

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


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


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