문제사이트 : Codegate
문제이름 : RamG
링크 : X
풀이
↑프로그램을 실행하면 나오는 화면이다. 4를 누르면 히든메뉴가 나타나는데,
두개의 문자열을 입력받고 어떠한 과정을통해 c라는 파일 하나가 생성된다.
↑보다시피 c라는 파일은 뒤죽박죽이다. 일단 프로그램을 분석해보았다.
↑올리디버거를 켜기 전에 BinText로 쭉 훑어보았다.
그 중 상당히 수상해보이는 문자열들이 보였다. 개수도 같고 입력받는 부분 바로전에 쓰여있어
메모장에 적어두었다.
↑문제파일의 기능 중 두 문자열을 XOR해주는 기능이 있었다.
아까 의심스러웠던 문자열을 시험삼아 해보다가 수상한 문자열 하나가 나왔다.
일단 이것도 메모장에 적어두었다.
↑본격적으로 분석하였다. 처음 문자열을 입력받은 후 진행되는 연산이다.
아까 수상하다고생각한 MVYLXYUARJ 와 474591474591을 xor하는 모습이 보였다.
↑그래서 RamG 기능으로 XOR해보았더니 yamyambugs라는 문자열이 나왔다.
이것이 첫번째 시크릿 코드이다.
↑스테이지 2로 넘어가려는 길목에 상당히 견고해보이는 안티디버깅 코드가 보였다.
레지스트리 변조나 점프문을 NOP으로 바꾸면 지나갈 수 있다.
↑두번째 스테이지에서는 cmp구문이 3개가 나온다.
덤프로 들어가서 맞게 변조해주면 지나갈 수 있다.
↑세번째 스테이지 에서는 레지스트리가 있는지와 그 내용을 점검하여 맞다면 hel을 저장한다.
hel을 저장할 수 있게 코드를 잘 수정해주면 된다.
↑4번째 스테이지는 2번째와 동일하게 진행하면 된다.
↑5번째 스테이지로 가는 길목에 안티디버깅이 있는데 전과 동일하게 넘어가면된다.
마지막은 1번째 스테이지 처럼 문자열을 비교하는데, 원리는 같고 예상한대로 의심되었던
hellowfish를 입력해주면 된다.
↑메모는 리버싱문제의 필수인듯 하다.
↑c파일이 생성되고 뒤에 확장자 .png를 붙이게 되면 플래그가 보인다.
이 문제는 유난히 운이 좋게 얻어걸린(?) 부분이 많았던 문제였다.
어렵긴 했지만 푸는과정이 재미있어서 좋은 문제라고 생각된다.
'Reversing > WriteUp' 카테고리의 다른 글
[Plaid CTF] zipper (0) | 2017.04.30 |
---|---|
[Reversing.kr] CSHARP (0) | 2017.02.21 |
[Reversing.kr] Ransomware (0) | 2017.02.21 |
[Reversing.kr] Replace (0) | 2017.02.21 |
[2017codegate] BabyMISC (0) | 2017.02.17 |