![]() |
eXeL@B —› Вопросы новичков —› изменение размера статического массива в exe файле |
Посл.ответ | Сообщение |
|
Создано: 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. это мой первый взлом. я видел запрос на взлом этой программы, но мне бы хотелось сделать это самостоятельно. ![]() |
|
Создано: 18 июля 2009 01:45 · Личное сообщение · #2 в данной ситуации помимо описанного тобой способа, есть другой вариант: создаёшь свою длл, которая: * создаёт свой динамический массив нужного размера * хукает обращение к исходному массиву (лучше всего на начальном этапе) и подменяет его своим как это реализовать технически: * обходишь не сравнение, а само максимальное число соединений * находишь указатель на массив и прописываешь туда адрес своего массива * добавляешь в импорт свою длл * при загрузке твоя длл делает всю работу по патчу и подмене значений ----- EnJoy! ![]() |
|
Создано: 18 июля 2009 01:55 · Поправил: vereteran · Личное сообщение · #3 по дллке мысль была, но нехотелось бы налепливать много чего "сбоку". хочется реализовать именно вышеописанный способ, т.к. это именно модификация исполняемого файла. + к тому в софтине кол-во соединений захардкодено (cmp eax, 9 - как такое обойти?). P.S. если быть честным, то первая причина скорее желание приобщиться к ассемблеру и взлому ![]() ![]() |
|
Создано: 18 июля 2009 02:09 · Личное сообщение · #4 |
|
Создано: 18 июля 2009 02:18 · Личное сообщение · #5 |
|
Создано: 18 июля 2009 09:22 · Личное сообщение · #6 |
|
Создано: 18 июля 2009 14:02 · Личное сообщение · #7 |
|
Создано: 18 июля 2009 17:44 · Личное сообщение · #8 |
|
Создано: 18 июля 2009 18:58 · Поправил: coolangel · Личное сообщение · #9 vereteran пишет: чем и как пропатчить несколько сотен вхождений адреса старого массива на новое значение? Решение "в лоб" - Скриптом в Ольке собираешь лог всех обращений,хорошенько погоняв программу. А далее, либо вручную патчишь, либо пишешь патчер,который на основании лога пропатчит файл так, как тебе надо. ![]() |
|
Создано: 18 июля 2009 19:32 · Личное сообщение · #10 vereteran пишет: в конце концов ни одной умной мысли _как_? а.... вот оно что... т.е. тебе тут тока неумные мысли выдавали... видимо, для тебя умная мысль - это когда всё делают за тебя, а ты НИ ОДНОГО (!!!) предложенного решения не опробовал реализовать САМОСТОЯТЕЛЬНО vereteran пишет: P.S. если быть честным, то первая причина скорее желание приобщиться к ассемблеру и взлому в таком случае ты БЕСТОЛКОВЫЙ ученик, которой ни хрена не делает сам, а только ждёт указки. учись учиться, раз ты такой ----- EnJoy! ![]() |
|
Создано: 18 июля 2009 21:20 · Личное сообщение · #11 Jupiter пишет: а.... вот оно что... т.е. тебе тут тока неумные мысли выдавали... говорить - не мешки ворочать. голая теория бесполезна. Jupiter пишет: видимо, для тебя умная мысль - это когда всё делают за тебя, а ты НИ ОДНОГО (!!!) предложенного решения не опробовал реализовать САМОСТОЯТЕЛЬНО опробовал, свалилось. нашёл почему. исправил, свалилось уже в другом месте, 5-й час страдаю. Jupiter пишет: в таком случае ты БЕСТОЛКОВЫЙ ученик, которой ни хрена не делает сам, а только ждёт указки. учись учиться, раз ты такой какой учитель... ![]() |
|
Создано: 19 июля 2009 00:50 · Личное сообщение · #12 |
|
Создано: 19 июля 2009 01:17 · Личное сообщение · #13 |
|
Создано: 19 июля 2009 10:36 · Личное сообщение · #14 |
![]() |
eXeL@B —› Вопросы новичков —› изменение размера статического массива в exe файле |
Эта тема закрыта. Ответы больше не принимаются. |