Сейчас на форуме: asfa, _MBK_ (+8 невидимых)

 eXeL@B —› Вопросы новичков —› изменение размера статического массива в exe файле
Посл.ответ Сообщение

Ранг: 0.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 июля 2009 01:18 · Поправил: vereteran
· Личное сообщение · #1

доброго времени суток.

есть программа Ventrilo (http://www.ventrilo.com/) для голосового общения.
бесплатно распространяется версия с ограничением на 8 человек максимум (т.е. одновременно
могут подключиться к такому серверу не более 8-ми человек).
я пытаюсь это ограничение убрать.
половину дела я сделал, хоть и немного топорно:

убрать ветвление на дисконнект 9-го пользователя с сообщением о забитости сервера (dif file by IDA 5.2):

ventrilo_srv.exe
0000BFB1: 0F E9
0000BFB2: 8E 61
0000BFB3: 60 01
0000BFB4: 01 00
0000BFB6: 00 90

убрать физический лимит сервера на 9 человек (dif file by IDA 5.2):

ventrilo_srv.exe
0001ADCF: 0F E9
0001ADD0: 8C C3
0001ADD1: C2 00
0001ADD4: 00 90
0001AE9A: 72 EB

ventrilo_srv.exe
0001AEEE: 73 90
0001AEEF: 0D 90

сделано слегка топорно, т.к. все вместо каких-то новых значений были заменены инструкции jl/jg/jle/jbe/...
на jmp куда нужно, а там где переход нежелателен - воткнуты nop.

вот теперь начинается самое весёлое: всё бы хорошо, но не тут-то было. после всего этого на 10-м
клиенте софтина валится. ковыряния в IDA показали: существует статический int массив, он не
расширяется при новых соединениях и на 10-м клиенте программа просто вылетает с ошибкой доступа к
памяти на write. насколько я понимаю, единственный способ это исправить - перенести этот массив в
конец секции .data, увеличить, после чего переписать все адреса старого массива на новый. вот только
как это сделать я понятия не имею помогите пожалуйста.

P.S. это мой первый взлом. я видел запрос на взлом этой программы, но мне бы хотелось сделать
это самостоятельно.




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 18 июля 2009 01:45
· Личное сообщение · #2

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

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

-----
EnJoy!




Ранг: 0.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 июля 2009 01:55 · Поправил: vereteran
· Личное сообщение · #3

по дллке мысль была, но нехотелось бы налепливать много чего "сбоку". хочется реализовать
именно вышеописанный способ, т.к. это именно модификация исполняемого файла.
+ к тому в софтине кол-во соединений захардкодено (cmp eax, 9 - как такое обойти?).

P.S. если быть честным, то первая причина скорее желание приобщиться к ассемблеру и взлому




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 18 июля 2009 02:09
· Личное сообщение · #4

vereteran пишет:
cmp eax, 9 - как такое обойти?

можно проверку перенести в другое место, чтоб написать какое хочешь значение, а если не хочешь переносить, то вместо 9 можно написать 7Fh(127), я думаю столько тебе хватит

-----
Лучше быть одиноким, но свободным © $me




Ранг: 0.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 июля 2009 02:18
· Личное сообщение · #5

BoRoV пишет:
можно проверку перенести в другое место, чтоб написать какое хочешь значение, а если не хочешь переносить, то вместо 9 можно написать 7Fh(127), я думаю столько тебе хватит


хмммм.... а FFh не влезет? вроде как 1 байт. максимальное значение - FF



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

Создано: 18 июля 2009 09:22
· Личное сообщение · #6

vereteran
Borov имел ввиду длину инструкции, а не размер байта.



Ранг: 0.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 июля 2009 14:02
· Личное сообщение · #7

так всё-таки это проблему не решает: чем и как пропатчить несколько сотен вхождений адреса старого массива на новое значение?



Ранг: 0.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 июля 2009 17:44
· Личное сообщение · #8

в конце концов ни одной умной мысли _как_? на теории все гаразды, а на практике как сделать никто не сказал.
я не знаю _как_ это сделать, что делать понятно, а вот как и чем - понятия не имею.



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

Создано: 18 июля 2009 18:58 · Поправил: coolangel
· Личное сообщение · #9

vereteran пишет:
чем и как пропатчить несколько сотен вхождений адреса старого массива на новое значение?


Решение "в лоб" - Скриптом в Ольке собираешь лог всех обращений,хорошенько погоняв программу. А далее, либо вручную патчишь, либо пишешь патчер,который на основании лога пропатчит файл так, как тебе надо.




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 18 июля 2009 19:32
· Личное сообщение · #10

vereteran пишет:
в конце концов ни одной умной мысли _как_?


а.... вот оно что...
т.е. тебе тут тока неумные мысли выдавали...

видимо, для тебя умная мысль - это когда всё делают за тебя, а ты НИ ОДНОГО (!!!) предложенного решения не опробовал реализовать САМОСТОЯТЕЛЬНО

vereteran пишет:
P.S. если быть честным, то первая причина скорее желание приобщиться к ассемблеру и взлому


в таком случае ты БЕСТОЛКОВЫЙ ученик, которой ни хрена не делает сам, а только ждёт указки.
учись учиться, раз ты такой

-----
EnJoy!




Ранг: 0.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 июля 2009 21:20
· Личное сообщение · #11

Jupiter пишет:
а.... вот оно что...
т.е. тебе тут тока неумные мысли выдавали...


говорить - не мешки ворочать. голая теория бесполезна.

Jupiter пишет:
видимо, для тебя умная мысль - это когда всё делают за тебя, а ты НИ ОДНОГО (!!!) предложенного решения не опробовал реализовать САМОСТОЯТЕЛЬНО


опробовал, свалилось. нашёл почему. исправил, свалилось уже в другом месте, 5-й час страдаю.

Jupiter пишет:
в таком случае ты БЕСТОЛКОВЫЙ ученик, которой ни хрена не делает сам, а только ждёт указки.
учись учиться, раз ты такой


какой учитель...



Ранг: 0.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 июля 2009 00:50
· Личное сообщение · #12

закройте тему, а лучше удалите.




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 19 июля 2009 01:17
· Личное сообщение · #13

vereteran пишет:
закройте тему, а лучше удалите.


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

запомни: прежде чем переходить к следующему заданию, ученик должен выполнить предыдущее

-----
EnJoy!





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 19 июля 2009 10:36
· Личное сообщение · #14

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


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