도와주세요...
( 입력한 값의 [?]번째 인자 * 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
로 구할 수 있습니다.