"Correct"를 떠야 하니 sub_7 FF793501000를 보자.
반복문으로 28번 반복하여 byte_7FF793503000[i] 에 들어있는 배열값들이랑 일치하는지를 확인한다.
먼저 배열안에 들어있는 것들을 확인하도록 하자.
32개가 있지만 00을 제외하면(의미 없으니) 27개만 해당된다.
다시 돌아가 식을 보자
for ( i = 0; (unsigned __int64)i < 0x1C; ++i )
{
if ( ((unsigned __int8)(16 * *(_BYTE *)(a1 + i)) | ((int)*(unsigned __int8 *)(a1 + i) >> 4)) != byte_7FF793503000[i] )
return 0LL;
}
return 1LL;
if 문에 대한 식을 정리하면
(16 *(a1+i)) | ((a1+i) >> 4)
형 변환에 대한 생략
unsigned __int8 -> uint8_t
__int64 -> long long int
_BYTE -> signed char , unsigned char
(16 *(byte_7 FF793503000 [i]) | (( byte_7FF793503000[i] >> 4)
a1 은 input 값 즉 byte 배열값과 비교를 하기 때문에 byte 값을 넣어야 한다.
(4 << (byte_7 FF793503000 [i]) | (( byte_7FF793503000[i] >> 4)
[16 *] 16의 곱은 [4 <<]로 나타낼 수 있음
ex(24 -> 이진법)
0001 1000
ex(24*16 = 384)
0001 1000 0000
4 << (왼쪽 4비트 이동)
그렇다면 식은
(16 * byte_7 FF793503000 [i]) | (byte_7 FF793503000 [i] >> 4)
이 된다.
※ 여기서 식을 계산할 때는 '& 0xF0' 값을 추가하시는 분들도 계신다.
이미 '4 <<' 한 상태에서 '& 0xF0'을 하는 것을 큰 의미가 있는지 궁금하다 하위 비트 4는 이미 0인상태에서
상위 4비트만 가져오는 게 무슨 의미인지..
python cp949 오류 났을 때는 추가해 주자.
'DreamHack > Reverising' 카테고리의 다른 글
rev-basic-5 (0) | 2024.10.17 |
---|---|
rev-basic-6 (1) | 2024.10.17 |
patch (1) | 2024.10.08 |
rev-basic-2 (1) | 2024.09.26 |
rev-basic-3 (0) | 2024.09.11 |