20230726rev

ZLP042·2023년 7월 28일


먼저 메인 함수를 보니까, Reversing.kr~~ 이런 문자열을 출력하고, 함수를 두개 호출하는데, sub_804851을 호출하고 결과가 1인지 비교하고, jnz 명령으로 점프하는걸 보니까, 뭔가 sub_804851에서 중요한 일이 일어날것만 같다. 일단 확실하지 않으니 확인해보자.


첫번째 함수는 그냥 값을 읽는거였다. scanf 함수를 호출하고 있다.

두번째 함수는 진짜 이상하게 생겼는데

한번 천천히 보자. 일단 모든 분기문을 통과해야하고 저 위에서 아래로 대각선 방향으로 내려와야만 eax에 1이 담겨 return 된다. 문자열은 byte_804A020부터 시작하는데,

첫번째 박스와 두번째 박스에 의해 두번째 문자는 1이고, 5번째 문자는 X인걸 알 수 있다.

일단 함수를 대충 읽어보면 다음과 같이 구성되어 있다
loc_8048469에서 첫번째 문자에 0x34 xor 연산을 하고 loc_80484CC에서 그 결과가 0x78인지 검사한다. loc_8048469에서 세번째 문자에 0x32 xor 연산을 하고 loc_80484BA에서 그 결과가 0x7C인지 검사한다. loc_8048469에서 네번째 문자에 0x0FFFFFF88 xor 연산을 하고 loc_80484DE에서 결과가 0x0DD인지 확인한다.

그러면 결국
첫번째 문자 = 자신 ^ 0x34 = 0x78
두번째 문자 = 1
세번째 문자 = 자신 ^ 0x32 = 0x7C
네번째 문자 = 자신 ^ 0x0FFFFFF88 = 0x0DD
다섯번째 문자 = X

파이썬으로 print(chr(0x34^0x78)+'1'+chr(0x32^0x7C)+chr(0x88^0xDD)+'X') 을 실행하면 결과라는 거고, 그럼 답은 L1NUX다.

1개의 댓글

comment-user-thumbnail
2023년 7월 28일

정리가 잘 된 글이네요. 도움이 됐습니다.

답글 달기