+ Reply to Thread
Results 1 to 3 of 3

Thread: Обход условий в crackme

  1. #1

    Default Обход условий в crackme

    Привет уважаемые форумчане. Недавно начал решать одну crackme. Не могу обойти нижеописанные условия и буду очень благодарен, если вы мне поможите с решением т.к сам уже потратил кучу сил, но успеха до сих пор не имею(((


    1.Выделено крастным, мне надо попасть в функцию showAlmost100, но условие cmp var_index, 0 не дает мне туда попасть т.к немного выше var_index инкреминтируеться( inc ecx , mov var_index, ecx)


    2.Выделено зеленым, в eax загружается значение 41414141, а потом eax сравнивается со значением локальной переменной var_4 ( cmp [ebp+var_4], eax ) , причем var_4 всегда равна 0 т.к вызывается только здесь (см. скрин. ниже)




    Буду Вам крайне признателен за помощь. Сам crackme -exe и файл от IDA , в нем нужную функцию назвал nessesaryFunction

  2. #2

    Default Re: Обход условий в crackme

    Это не крэкми, а задача на эксплуатацию. Название говорит само за себя BOF32 (BOF - Buffer Overflow - переполнение буфера). В данном случае буфера расположенного на стеке.

    Код Вами комментирован неверно.
    Code:
    .text:4141114E                 push    16
    .text:41411150                 push    offset var_xz_nessesary_function
    .text:41411155                 push    edx
    .text:41411156                 call    xFunctionWrap
    Функция xFunctionWrap не просто копирует строку, а парсит ее, преобразовывая строковые представления в числовые по основанию 16.
    Выполнить последнее условие проверки невозможно, как вы заметили, с учетом инкремента ECX. Первые две проверки легко проходятся.
    Стек функции выглядит следующим образом.
    Code:
    -00000024 BUFFER          dd 8 dup(?)
    -00000004 var_4           dd ?
    +00000000  s              db 4 dup(?)
    +00000004  r              db 4 dup(?)
    +00000008 USER_PARAM      dd ?
    Размер буфера 8 двойных слов, а цикл позволяет нам поместить в него 128 значений, если при разборе строка не закончится или при ее разборе не будет ошибок. Что позволяет не только поместить в переменную var_4 необходимое значение (9е помещаемое число), но и перетереть адрес возврата из функции.

    bof32.exe 41414141-1-1-1-1-1-1-1-41414141-1-414111D1 пройдет две проверки и без последней все равно даст сообщение об успехе.

    bof32.exe 1-1-1-1-1-1-1-1-1-1-414111D1 не пройдет проверок (о чем будет сообщение), но сообщение об успехе будет.

    Да, есть защита от отладки

    .text:41411013 call ds:IsDebuggerPresent

    Если будет обнаружен отладчик, то строка параметров заменяется на "lol"
    Code:
    .text:41411044                 push    'l'
    .text:41411046                 pop     ecx
    .text:41411047                 push    'o'
    .text:41411049                 pop     eax
    .text:4141104A                 mov     [edx+2], ax
    .text:4141104E                 xor     eax, eax
    .text:41411050                 mov     [edx], cx
    .text:41411053                 mov     [edx+4], cx
    .text:41411057                 mov     [edx+6], ax
    и понятно, что ничего не обрабатывается.

    ЗЫ: И да, если запустить программу с ключем /extra, то будут обещаны плюшки если после эксплуатации программа не упадет, а выйдет в систему.
    Extra points for not crashing the program after it displays success message (ideally app should return 0)

    bof32.exe 41414141-1-1-1-1-1-1-1-41414141-1-414111E3-1-4141105F

    или так только с первой успешной проверкой и тогда не будет промежуточного сообщения

    bof32.exe 41414141-1-1-1-1-1-1-1-1-1-414111E3-1-4141105F
    Last edited by OKOB; 14-04-2018 at 12:07.

  3. #3

    Default Re: Обход условий в crackme

    Спасибо, о гений, о ангел , о друг...

+ Reply to Thread

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
All times are GMT. The time now is 14:23
vBulletin® Copyright ©2000 - 2018
www.reverse4you.org