41415C mov eax, [ebp+10h] ; загрузим строку пароля из класса CString 41415F xor esi, esi 414161 cmp [eax-8], edi ; не нулевая ли длина (выше по течению ; была инструкция xor edi, edi по адресу 414121) 414164 jle short loc_414188 ; если длина < 0 - переход на следующую проверку 414166 cmp edi, 14h ; длина > 14 ? 414169 jge short loc_414188 ; тогда на следующую проверку 41416B mov cl, [esi+eax] ; в cl - очередной байт нашего пароля ; помните, что в строках индексация начинается с 0 41416E cmp cl, 20h ; сравним с кодом пробела 414171 jz short loc_414182 ; если оно - перход на следующую итерацию 414173 push ecx ; наш байт положим на стек 414174 call sub_4140ED ; вызов некоей любопытной функции 414179 mov [ebp+edi-20h], al ; и результат (который всегда возвращается ; в регистре eax - ещё куда-то (один байт) 41417D mov eax, [ebp+10h] ; и снова загрузим адрес строки пароля 414180 pop ecx ; очистка стека 414181 inc edi ; накинем счётчики 414182 inc esi 414183 cmp esi, [eax-8] ; счетчик меньше длины строки ? 414186 jl short loc_414166 ; если нет - следующая итерация 414188 cmp edi, 10h ; сравним количество обработанных байт 41418B jnz loc_41423B ; если не равно 0x16 - переход довольно далеко ... 41423B ... ... 414242 call CString::~Cstring(void) ... 41424E call CString::~Cstring(void) ... 41425A call CString::~Cstring(void) 41425F xor eax, eax ; это плохой парень ... retn