//Восстановление изначального кода: вызов функции, вычисляющей адрес конструкций для атакованного на определённой позиции (запись в EAX). MOV EAX, $4E7230 CALL EAX JMP @@Exit
//Модифицирование кода: проверка, надо ли атаковать текущий стек и запись адреса его конструкций или 0 в EAX. @@Modify: //Проверяем, какой стороне принадлежит проверяемый стек. CMP EBX, 21 JAE @@Def_st
//Если стек принадлежит атакующей стороне, помещаем в EAX соответствующий стеку бит из v9501. MOV EAX, DWORD PTR DS:[$890AD8] MOV CL, BL SHR EAX, CL JMP @@All_st
//Если стек принадлежит защищающейся стороне, помещаем в EAX соответствующий стеку бит из v9502. @@Def_st: MOV EAX, DWORD PTR DS:[$890ADC] SUB EBX, 21 MOV CL, BL SHR EAX, CL ADD EBX, 21
//Оставляем в EAX 0 или помещаем в него адрес конструкций стека (в зависимости от начального значкния EAX, т. е. бита v-переменной). @@All_st: AND EAX, 1 JZ @@Exit //EAX = $699420 + 1352*EBX + 21708. LEA ECX, DS:0[EBX*8] SUB ECX, EBX LEA EDX, [ECX+ECX*2] MOV ECX, DWORD PTR DS:[$699420] LEA EAX, [EBX+EDX*8] LEA EAX, [ECX+EAX*8+21708]
@@Exit: PUSH $44009A
END;
Затирается вызов процедуры. Если переходим по JNZ @@Modify то там черт ногу сломит. Однозначно могу сказать только одно: если что-то не работает после твоего вмешательства, значит сам виноват. Проверяй код отладчиком.