2023. 11. 5. 23:03ㆍ리버싱
저 프로그램을 실행하면 다음과 같은 게임화면이 나옵니다.
저도 처음에 어려워서 다른 사람이 어떻게 조금 참고했습니다. 여러분도 어려우시면 제 풀이 보시고 감을 잡으셨으면 좋겠네요..
근데 무작정 디버깅하면 노가다니까 string값들을 봅니다. 근데 하다보니까 고구마가 보여서 고구마를 더블 클릭했습니다.
그랬더니 다음과 같은 루틴이 나오는데 이 루틴을 패스하고 ebx값을 보면 0x32값이 나오는데 이를 10진수로 표현하면 50입니다.
그니고 밑에 보면 floor, wall등 맵에 대한 정보를 불러옵니다.
여기서 재미 삼아서 저거 call 부분 없애면 더 잼이 있습니다.
그리고 스트링 값들 중에서 game clear를 더블 클릭하면 저렇게 나오는데 저기는 text인자 값이 엉망입니다. 아마도 저 텍스트 값이 플래그가 되겠죠... 근데 지금은 누가봐도 아닙니다.그래서 저 값을 하드웨어 브레이크 포인트를 걸어줍니다.
그리고 고구마를 좀 잡으시다가 보시면 멈춤니다. 소스코드를 보면 다음과 같은데 여기에 많은 정보가 있습니다.
밑에 내려가면 add edx,-2가 있는데 이부분을 분석해본 결과 edx는 몬스터의 체력이고 총알 한발 당 -2씩 나갑니다.
근데 조금 구체적으로 점프문에 브레이크포인트 걸고 하시면 edx는 0x64가 나옵니다. 이를 10진수로 100입니다.
그래서 저는 이 부분을 -0x64했습니다. 결과적으로 한 발 쏴면 고구마 한 마리를 잡습니다.
그리고 이 부분을 분석해보면 어떤 값이 들어 있는 cl값을 가지고 옵니다. 그리고 [eax+0fc7028]주소의 값 ^= cl 연산을 합니다. 근데 그 전에 dump부분을 확인해보면 DA, 9F, 45,F0값들이 들어 있습니다. 아까전 GAME CLEAR함수 인자 값에 들어가는 TEXT값들과 같습니다.
그리고 몬스터를 다잡으면 다음과 같은 TEXT가 완성되는데 뒤에 2바이트가 제대로 나오지 않았네요..
그래서 IDA를 통해서 분석해 보았습니다. V2는 ECX값입니다. 그리고 총 카운팅 값을 의미합니다. 따라서 몬스터의 개수도 50이고 처음 게임 클리어 TEXT도 50이니까 이를 이용해서 밑에 있는 코드를 작성합니다.
그러면 이제 플래그가 나오네요..
'리버싱' 카테고리의 다른 글
reversing.kr CSHOP풀이 (1) | 2023.11.13 |
---|---|
Reversing.kr ransomeware (0) | 2023.11.13 |
www.reversing.kr(Replace)풀이 (1) | 2023.10.22 |
Reversing.kr (Easy Keygen) (0) | 2020.04.08 |
keygen1 (0) | 2019.10.09 |