добавление своего кода в прогу в отладчике. вопрос

Тема в разделе "WASM.BEGINNERS", создана пользователем goga2007, 21 апр 2007.

  1. goga2007

    goga2007 New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2007
    Сообщения:
    184
    всем привет. отлаживаю ща одну программку в ОЛЛИ и записал свой код ей в хвост(это пространство, как я выяснил , не используется программой) чтобы она вместо проверки на правильность ключа записывала его в сообщение (бывшее сообщение об ошибке). вместо процедуры проверки я пишу ДЖАМП на мою процедуру, в ней я (ессесно сделав предварительно pushad & pushfd) заставляю программу писать правильный ключ в память на место "Ключ не верный!",затем делаю ПОПФД,ПОПАД и вызываю оригинальную процу проверки(если ее не вызывать, то все работает нормально, но я сразу попадаю на поздравления с регистрацией, т.к. мой код возвращает Z=1 и JNZ прохожу какбудто код правильный. мне же надо попасть на "не правильное" сообщение(и падчить ее не хочу : моя цель - правильная работа моего кода, а не регистрация программы!), да и малоли что полезное делает та проца помимо проверки) и вот во время этой процедуры проверки вся прога виснет(искл. ситуация).
    подскажите пожалуйста мож ПУШАД не все регистры сохраняет и чтото надо самому сохранять, мож со стэком че надо делать...?
     
  2. HoBleen

    HoBleen New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    77
    Что-то напутал. Покажи код.
     
  3. goga2007

    goga2007 New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2007
    Сообщения:
    184
    мой код:
    0 pushad
    1 pushfd
    2 mov esi,dword ptr ss:[ebp-10] ; туда пишется правильный ключ
    3 mov edi,00465EB0 ; по этому адресу лежит "Ключ не верный!"
    4 mov al, byte ptr ss:[esi]
    5 cmp al,0
    6 je 11
    7 mov byte ptr ds:[edi],al
    8 inc esi
    9 inc edi
    10 jmp 4
    11 inc edi
    12 mov byte ptr ds:[edi],0
    13 popfd
    14 popad
    15 call 004043CB ; оригинальная процедура проверки , в ней вся проблема: в какой та момент в ней происходит исключительная ситуация.
    16 retn ; до него дело ваще не доходит, если вызвать эту процедуру.

    писал по памяти ,поэтому адреса могут не совпадать :)
     
  4. axe_roma

    axe_roma New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2004
    Сообщения:
    93
    Адрес:
    Russia
    Честно говоря так вроде все ок. Тебе надо по трасировать оригинал процедуру и самому глянуть где происходить исключение! А так ничего не видно!
     
  5. Perre

    Perre New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2007
    Сообщения:
    100
    может и без твоей проги с оригинальной процедуры проверки не возвращается (все-таки это защита)
     
  6. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    goga2007
    заставляю программу писать правильный ключ
    Afaik inc edi перед mov byte ptr ds:[edi],0 лишний.
    Получается, что завершающий ноль записывается не после последнего символа, а еще через символ.

    Поясни: зачем использовать сегментные регистры, разве не справедливо, что es == ss == ds?
     
  7. axe_roma

    axe_roma New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2004
    Сообщения:
    93
    Адрес:
    Russia
    Да не вроде нормально а про сегментные регистры может с отладчика переписывал
    Код (Text):
    1. 0     pushad
    2.      1         pushfd
    3.      2         mov esi,dword ptr [ebp-10] ; туда пишется правильный ключ
    4.      3         mov edi,00465EB0 ; по этому адресу лежит "Ключ не верный!"
    5.      4         mov al, byte ptr [esi]
    6.      5         cmp al,0
    7.      6         je  11
    8.      7         mov byte ptr [edi],al
    9.      8         inc esi
    10.      9         inc edi
    11.      10       jmp   4
    12.       11      mov byte ptr [edi],al  ; в al все равно уже ноль!
    13.       12      popfd
    14.      13      popad
    15.      14       call     004043CB ; оригинальная процедура проверки , в ней вся проблема: в  какой та момент  в ней происходит исключительная ситуация.
    16.       15      retn  ; до него дело ваще не доходит, если вызвать эту процедуру.
    во как!
     
  8. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Тут поподробнее, пожалуйста. Вместо call 004043CB где-то в коде программы Вы вставили jmp xxx, где xxx - это адрес патча?

    В принципе, тут может быть ошибка. Вы совершенно уверены, что ключ, который проверяет процедура, лежит именно там? Может, он там просто дублируется...
     
  9. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Quantum
    Согласен с Вами
    в этом месте требуется посмотреть код.
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Комментарии от чайника:
    А еще, наверное, процедуру проверки неплохо бы.
    А не может случиться так, что Вы своим циклом, перезаписывая "Ключ неверный!", вылезли по размеру за эту надпись и записали всякую бяку на место данных, используемых процедурой проверки?
     
  11. axe_roma

    axe_roma New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2004
    Сообщения:
    93
    Адрес:
    Russia
    Это блин как годание!:) Надо смотреть в отладчике самому!
     
  12. goga2007

    goga2007 New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2007
    Сообщения:
    184
    дааа, давно меня тут небыло. спасибо всем. проблему я уже решил:
    оказалось, что код не работал потомучто я писал джамп на свою процу, а на выходе из нее писал RET ,а он(как я потом понял(спасибо Юрову и его справочнику)) работает в паре с CALL. и как дело доходило до ret ,у меня,видимо, в стеке находилась всякая лажа, и возврат совершался черт знает куда. после того как я заменил RET to JMP на следующую инструкцию (после прыжка на мою процу) все стало работать,но только в отладчике.
    без отладчика она сообщала мне, что она инфицирована и ща закрывается(я думаю, что это была проверка CRC с файла на диске). для тех ,у кого такая же проблема:
    пишите свой код не в хвост проги( это мои наблюдения, не более того, да и опыта мало), а гденить в серединку, т.к. в этой программе всестало прекрасно работать, после того ,как я переместил свой код в пустое место в середине проги.
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    скорее всего, в проге кривой подсчет целостности