Это не крэкми, а задача на эксплуатацию. Название говорит само за себя 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