도와주세요...

( 입력한 값의 [?]번째 인자 * 0xFB ) & 0xFF == 비교할 단어
이렇게 어떤 과정인지는 알겠는데 이걸 도대체 어떻게해야 될지 모르겠습니다

문자니까 입력한 값의 범위는 0xFF를 넘지는 않을거같은데 그러면
( 입력한 값의 [?]번째 인자 * 0xFB ) 이 값이 0xFA05를 넘지는 않으니까
16진수로 4자리 중에 위의 2자리를 없애서 2자리로 만든 값이 (비교할 단어)가 되는거같은데

0xFF and연산을 사용해서 날려버린 2자리를 찾아서 0xFB를 나눠야 될거같은데

계속 생각해봐도 모르겠습니다ㅠㅠ

#reversing
작성자 정보
답변 1
2dedce
워게임 고인물

( 입력한 값의 [?]번째 인자 * 0xFB & 0xFF) == 비교할 단어

0xFF = 256, 0xFB = 251

* 0xFB 는 251로 곱하는 것입니다. & 0xFF 는 256으로 나눴을 때 나머지와 같습니다. 즉 & 0xFF% 256과 같습니다.
어떤 b에 대하여 합동식 251x ≡ b (mod 256)(C언어의 표현으로는 251*x%256 == b%256)가 되도록 하는 0~255 사이 정수 x를 찾는 것인데 합동식에는 양쪽에 같은 수를 곱해도 되므로 양변에 51을 곱하면 51*251*x ≡ b*51 (mod 256)이 됩니다. 51을 곱한 이유는 51*251을 256으로 나눈 나머지가 1이 되기 때문입니다. 즉 방금 식은 x ≡ b*51 (mod 256)이 됩니다. 즉 x = b*51%256로 구할 수 있습니다.

2020.10.10. 13:17
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기