달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

해당 문제는 간단한 게임으로 만들어진 리버싱 문제다.


나같은 초보자한텐 문제에 대한 힌트가 없는게 참 난감하다.

일단 게임을 동작시켜 보았다.




리버싱의 시작은 스트링 검색!! ㅋㅋ 일단 승리와 관련된 문자열을 검색해보았다.



게임을 깼을 때 화면에 나오는 텍스트 문자열을 얻으면 그게 답이겠거니 감이 왔다. 

현 시점에서 문자열은 의미없는 문자열이다.




다시 게임으로 돌아와 저 악당들을 모두 해치우면 게임이 끝나고 의미없는 문자열이 답으로 변경되겠지 싶었다. 근데 한놈당 8발씩이나 맞춰야 하고 접근하면 에너지가 달아죽었다. 


그래서 게임을 좀 편리하게 두가지 꼼수를 부렸다. 


첫번째 꼼수는 에너지 검증 로직 우회를 통해 죽지 않는 것..!!



아무리 맞아도 죽지 않게 변경하였다. 짠!



두번째 꼼수는 얘들이 너무 많아서 한마리만 탄생시키는 것이었다. 

혼란의 시작은 여기서부터였지...



일단 한마리만 나왔다. 그래서 요놈만 죽이면 끝날 줄 알았다.

하지만 이놈을 죽여도 끝나지 않았다. 이때부터 머리속이 헝클어지면서 착각했던 내용 떄문에 문제의 논질을 찾지 못하고 한참을 헤맸다.


결국 검색의 도움을 조금 받았다. ㅠㅠㅠㅠ

악당 한놈 죽일때마다 한글자씩 변경된다는 것!!

난 악당이 없을 때 이벤트가 발생하며 글자가 변경될 것이라 착각했다.

미숙한 분석 실력과 추측을 기반으로 하다보니 ㅠㅠㅠ 



진즉에 검증 로직은 확인했었는데 내가 악당을 한놈으로 만들어버리니 그 부분이 호출이 거의 안되 이해하는데 난항을 겪었다. 제길 ㅋㅋㅋ 꼼수가 오히려 분석을 어렵게 만든 꼴이 되었다.


위 사실을 확인하고 검증 로직으로 BP를 걸고 악당을 한마리씩 처치해보았다. 




악당 인스턴스의 특정 위치에 있는 값을 가지고 와서 승리시 발생하는 문자열과 XOR 연산을 진행한다. 악당 인스턴스의 특정 위치에 있는 값은 4의 배수이고 악당 인스턴스 순서에 따라 승리시 발생하는 문자열과 연산을 진행한다. 


그래서 승리시 발생하는 문자열을 4의 배수 값과 XOR 연산을 진행하면 정답이 나온다.

첫번째 글자 = (0*4) ^ 첫번째 글자

두번째 글자 = (1*4) ^ 두번째 글자 

....... 



:
Posted by einai