Как можно обойти jnz?

Тема в разделе "WASM.BEGINNERS", создана пользователем 2Hard2Forget, 1 дек 2019.

  1. 2Hard2Forget

    2Hard2Forget Member

    Публикаций:
    0
    Регистрация:
    27 авг 2018
    Сообщения:
    86
    Я пытаюсь обойти проверку собственного пароля. Проверка - простой strcmp. Я не могу понять, на что заменить последнюю проверку ,чтобы программа пошла по ветке, где Correct
    upload_2019-12-1_19-48-55.png

    Код (Text):
    1. .text:00401168 almost_success:                         ; CODE XREF: _main+7C↑j
    2. .text:00401168                                         ; _main+88↑j
    3. .text:00401168                 sbb     eax, eax
    4. .text:0040116A                 or      eax, 1
    5. .text:0040116D
    6. .text:0040116D loc_40116D:                             ; CODE XREF: _main+96↑j
    7. .text:0040116D                 push    909090h
    8. .text:00401172                 push    ecx
    9. .text:00401173                 mov     ecx, dword ptr unk_404FFF+4091h ; _Ostr
    10. .text:00401179                 test    eax, eax
    11. .text:0040117B                 jnz     loc_401446
    12. .text:00401181                 mov     edx, offset aCorrect ; "Correct"
    13. .text:00401186                 call    ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,char const *)
    14. .text:0040118B                 add     esp, 4
    15. .text:0040118E                 mov     ecx, eax
    16.  
    17. Когда я заменяю jnz на nop, ветка с correct исчезает как вариант следования из этого блока:
    18.  
    19.  
    20.  
    21. [ATTACH=full]5764[/ATTACH]
    --- Сообщение объединено, 1 дек 2019 ---
    Заменял на nop, пропадал проход на correct
     
  2. Bedolaga

    Bedolaga Member

    Публикаций:
    0
    Регистрация:
    10 июл 2019
    Сообщения:
    131
    А программа работает как хотелося после этава?
     
  3. 2Hard2Forget

    2Hard2Forget Member

    Публикаций:
    0
    Регистрация:
    27 авг 2018
    Сообщения:
    86
    нет, крашится
     
  4. Bedolaga

    Bedolaga Member

    Публикаций:
    0
    Регистрация:
    10 июл 2019
    Сообщения:
    131
    Так же и должно быть - удалил ветвление - минус один вариант...
     
  5. 2Hard2Forget

    2Hard2Forget Member

    Публикаций:
    0
    Регистрация:
    27 авг 2018
    Сообщения:
    86
    а как сделать так,чтобы ветвления не было и всегда не было прыжка ?
     
  6. Bedolaga

    Bedolaga Member

    Публикаций:
    0
    Регистрация:
    10 июл 2019
    Сообщения:
    131
    А при правильном вводе пароля не крашится, не патченая?
     
  7. 2Hard2Forget

    2Hard2Forget Member

    Публикаций:
    0
    Регистрация:
    27 авг 2018
    Сообщения:
    86
    Да, так всё работает
     
  8. Bedolaga

    Bedolaga Member

    Публикаций:
    0
    Регистрация:
    10 июл 2019
    Сообщения:
    131
    А корректная ветка это та на которую прыгать должно?
     
  9. 2Hard2Forget

    2Hard2Forget Member

    Публикаций:
    0
    Регистрация:
    27 авг 2018
    Сообщения:
    86
    Да
     
  10. Bedolaga

    Bedolaga Member

    Публикаций:
    0
    Регистрация:
    10 июл 2019
    Сообщения:
    131
    Так а вопрос тогда в чем?
     
  11. 2Hard2Forget

    2Hard2Forget Member

    Публикаций:
    0
    Регистрация:
    27 авг 2018
    Сообщения:
    86
    Мне нужно,чтобы без каких либо проверок я мог попасть в correct, прошлые прыжки привели меня к последней проверке, но её изменить у меня не получается
     
  12. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    or r,1 -- test r,r -- jnz :sarcastic:
     
  13. 2Hard2Forget

    2Hard2Forget Member

    Публикаций:
    0
    Регистрация:
    27 авг 2018
    Сообщения:
    86
    решил вроде,всем спасибо
     
  14. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    2Hard2Forget,

    Всегда вначале ищут зависимость по данным, так как не зависимо от ветвлений будет от них зависимость(как у вас прототипы функций - передача значений через регистры), вот как у вас и это приведёт к ошибкам. Две зависимости существуют совместно, cfg & dfg.

    А проверкой пароля это назвать нельзя, утеря данных произойдёт, можно шифтить рандом и всё сработает. Как же можно принимать решение о корректности строки, на основе веса её компонент, при этом есчо и используя конструкции, в которых происходит потеря данных(cmp/sbb.. set/test etc). Не удивительно что не показан сурец для диза.

    Я вот что думаю. Пока такое сложное:

    > ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z

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