Check Encode Status

Embed Size (px)

DESCRIPTION

Check Encode Status

Citation preview

ULONG CheckEncodedStatus(UCHAR AdjustedReqCode, UCHAR SetupKeysResult, UCHAR *BufPtr) { ULONG loopCnt; __asm { push ebx push edx push ecx push esi cmp [AdjustedReqCode], 0 jz loc_12D33 cmp [SetupKeysResult], 2 jb loc_12D33 mov esi, [BufPtr] mov cl, [esi] cmp cl, 1Fh jbe loc_12D06 xor eax, eax jmp loc_CheckEncodedStatus_exitloc_12D06: mov byte ptr [loopCnt], 0Fh lea eax, [loopCnt] push eax push ecx call sub_12D50 lea eax, [loopCnt] mov cl, [esi+1] push eax push ecx call sub_12D50 mov al, byte ptr [loopCnt] and al, 0Fh cmp al, 1 sbb eax, eax neg eax jmp loc_CheckEncodedStatus_exitloc_12D33: mov al, 0Fh mov esi, [BufPtr] cmp al, [esi] sbb eax, eax inc eax jmp loc_CheckEncodedStatus_exitsub_12D50: push ebp mov ecx, 7 mov ebp, esp push ebx push esi mov al, [ebp+8] mov esi, [ebp+0Ch]loc_12D60: mov dl, al mov bl, [esi] shr dl, cl and dl, 1 add bl, bl or dl, bl test dl, 10h mov [esi], dl jz loc_12D79 xor dl, 0Dh mov [esi], dlloc_12D79: and byte ptr [esi], 0Fh dec ecx jns loc_12D60 pop esi pop ebx pop ebp retn 8loc_CheckEncodedStatus_exit: pop esi pop ecx pop edx pop ebx }}static sub_12D50(UCHAR ValidateByte, UCHAR *loopCnt){ int i; for (i= 7; i >= 0; i--) { if ( (*loopCnt= (*loopCnti)&0x01))&0x10 ) *loopCnt^= 0x0D; *loopCnt&= 0x0F; }}ULONG CheckEncodedStatus(UCHAR AdjustedReqCode, UCHAR SetupKeysResult, UCHAR *BufPtr) { UCHAR loopCnt= 0x0F; if ( ( !AdjustedReqCode ) || ( SetupKeysResult < 2 ) ) return( (*BufPtr 0x1F ) return(0); sub_12D50(*BufPtr, &loopCnt); sub_12D50(*(BufPtr+1), &loopCnt); return( ( loopCnt > 0 ) ? 0 : 1 );}