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

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

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

Создано: 02 марта 2007 05:06 · Поправил: Diabolus
· Личное сообщение · #1

Есть экзешник, нужно изменить длину переменной с 2 байт на 4.
Цель - обход ограничения чисел в 65535 (0xffff).
Приветствуются любые идеи, подсказки, мысли по этому поводу.



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 02 марта 2007 07:04 · Поправил: AlexZ
· Личное сообщение · #2

Думаю что вряд ли. Хотя бы потому что компилер сделал где надо movzx eax, word ptr[--------] или mov ax, [--------]. Короче, переменные разных типов могут по разному обрабатываться, даже если это всего лишь shortint (word) вместо integer (dword), а это на стадии компиляции делается.

-----
Я медленно снимаю с неё UPX... *FF_User*




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

Создано: 02 марта 2007 08:46
· Личное сообщение · #3

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




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 02 марта 2007 09:23
· Личное сообщение · #4

0) Поиск всех команд с участием этого адреса
1) mov [mem], reg - просто заменяешь начальный байт на 90h
2) mov [mem], imm16 - здесь надо извратиться и сделать jmpl на наш участок кода, кот. делает нужную операцию и дальше jmp обратно

Вручную может быть нудно, так что пиши скрипт - несложный должен получиться.



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 02 марта 2007 09:59
· Личное сообщение · #5

Diabolus, важно знать какой компиль, что делает эта переменная.
Может быть всего пару байт пропатчить нужно, а может быть весь код перепахать после оптимизации Intel С++ или чего-нибудь подобного.
Конкретизируй задачу.

-----
Всем привет, я вернулся




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

Создано: 04 марта 2007 01:04
· Личное сообщение · #6

Когда-то делал подобное, нужно было переменную типа word поменять на dword. Пришлось править прогу где-то в 30-ти местах, так как были всякие movzx, для многих места не хватало поэтому пришлось растягивать последнюю секцию и туда jmp/call а потом обратно. Запарился короче неслабо. Смотреть надо в скольких местах эта переменная используется.



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

Создано: 04 марта 2007 14:20 · Поправил: Diabolus
· Личное сообщение · #7

Всем спасибо, но похоже в данном случае проще просто забить
Здесь она используется во множестве функций, на это уйдёт уйма времени
Оно того не стоит.
Хотя, как время будет - надо будет поковырять хоть чуток, ради опыта


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


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