изменение размера статического массива в программе

Тема в разделе "WASM.RESEARCH", создана пользователем naquad, 17 июл 2009.

  1. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    доброго времени суток.

    я не специалист в области низкоуровневых языков программирования, дизассемблирования и reverse engineering'a, так что заранее извиняюсь, если вопрос неграмотный или глупый.
    итак, ситуация: сейчас пытаюсь расширить функционал программы для голосового общения, у неё установлен лимит на 5 человек, а я пытаюсь это обойти.
    сами проверки я убрал (cmp eax, 5 ; jle loc_407EB6 -> cmp eax, 5; jmp loc_407EB6 - пусть и не очень грамотно, но работает), но вот массив, в котором программа держит
    соккеты соединений (4 байта на элемент, 5 элементов) является статическим и я не знаю как в IDA 5.2 расширить его (или какой-нибудь другой программе).
    это последняя проблема во всём процессе.
    подскажите пожалуйста, как я могу это сделать?
     
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    перенеси массив в другое место и пропатчи все указатели на него
     
  3. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    эммм а чем и как это делать? (как говорилось ранее, у меня очень мало познаний в данной области)
     
  4. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    и можно ли ссылку на какой-нибудь документацию, чтобы вопросами не докучать?
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    В конец секции переместить массив.
     
  6. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    Многоуважаемые, меня интересуют 2 вопроса:
    1. какой программой это можно сделать? не переписывать же 400+ адресов руками. да и IDA умеет в Patch program только изменять байты, word'ы и заменять assembler'ные инструкции.
    2. как в этой программе произвести вышеуказанные манипуляции? (опционально, если скажете как зовётся такое чудо, то я уж как-нибудь с ним подружусь)
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Ставится бряк в Оле на доступ к памяти, дебажется, узнаётся откуда происходит доступ и патчится.
     
  8. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    hiew либо любой хекс редактор
     
  9. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    откуда вызывается я вижу по статическому анализу, с этим всё гут. вот момент "патчиться" неясен с технической точки зрения: как?

    спасибо, пойду попробую. авось чего и получиться :)
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ну можно и винхексом и например тойже олей пропатчить. Только есчо релоки настроить нужно, иначе есть вероятность что будет рушиться, если в памяти модуль окажется перемещённым. Либо для освобождения места где выполняется патч переместить в конец секции, а туда записать пикод/ветвление на него, тогда релоки не понадобятся.
     
  11. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Clerk, термин "пикод" (position-independent code) гуглом не гуглится, а если и гуглится, то как "p-code" (pseudocode)
    какбэ если не знать, хрен поймеш о чем ты
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    GoldFinch
    Однажды это обсуждалось, пришли к выводу что использовать термин "шеллкод" не имеет смысла, ибо он у большинства вызывает ассоциации со сплоитами. А "p-code" понятно что тут никакого отношения не имеет, этоже не виртуальная машина.
    Не гуглится - не проблема, добавим в вики.
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Его интересует не как вручную патчить, а как автоматически пропатчить все ссылки на массив.
     
  14. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    ...или если так уж много ф программе XREF (ссылков) на этот массив - поискать нельзя ли убрать то, что ПОСЛЕ массива. Не знаю, поддерживает ли винда отсутствие атрибута READ для секции данных (EXECUTE? вряд ли / Секцию выгрузить?) можно поставить свой SEH или Unhandled Exception Filter и в нем распределять адреса ... тормозить будет...

    Ф любом случае хорошая мысль родиццо гляда в *.idb :derisive:
     
  15. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    точно, а то вручную я вымру....
     
  16. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    hiew имеет assember встроенный - пару инструкций забить - самое то.

    Про 400 адресов... готовых решений нет. Слей все адреса в файл и напиши скрипт к IDA или мелкую прогу. Ессно упрёшься в то что не все инструкции одинаковые, разные регистры и т.д.
     
  17. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    мде, как всё тяжко. я думал, что автоматизация дальше пошла :) ну что ж, спасибо за информацию, пойду пробовать.

    P.S. Может кто подскажет где взять hiew с лекарством, а то по трекеррам как-то нету :dntknw:
     
  18. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    итог: ничего не вышло. _как_ добавить новый массив в exe файл в конце секции data - неизвестно, _как_ переписать все старые адреса на новые - неизвестно. вывод: поговорили и забыли. всем спасибо.
     
  19. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Да вроде ответили уже, ну ок, можно по второму кругу:

    _как_ добавить новый массив в exe файл в конце секции data - использовать hiew (он умеет работать с блоками данных)
    _как_ переписать все старые адреса на новые - использовать hiew (поиск по шаблону в дизасме, и замена)
     
  20. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    naquad

    Если ты непременно хочешь менять секцию (неужели там aligment 1 byte??), то тебе нужно найти описатель секции и сначала посмотреть сколько места между физическим концом .data и началом следующей секции. Скорее всего там должно быть ~0x100 байт...

    Можно добавить НОВУЮ секцию в конец файла - потому как за .data скорее всего идет .rsrc. Так проще с точки зрения числа необходимых модификаций.

    Вроде бы можно (сам не пробовал) ассемблерный листинг IDA просто пересобрать назад в .EXE. Возможно будет не 100% точность, но если соберетсо - работать скорее всего все будет. В данном случае задача сводицца к редактированию текстового файла.

    Посмотри еще раз мой совет вверху.

    Множественное редактирование лично я обычно делаю небольшой asm (наверное можно и C) программкой.