[Reversing.kr] Music Player

정말 흥미로운 문제네요. 1분 이상 들을 수 있게끔 프로그램을 수정하라고 합니다. 대략적인 공격 흐름은
1. 1분 체크하는 비교 루틴을 잘 통과하던가
2. 보여지는 키를 프로그램 내에서 잘 이끌어내는 방식이겠네요. 일단 Ollydbg로 올려보기 전에 실행을 해보고 싶었는데

좀 이상하네요. 이걸 해결하라는 문제는 아닌 것 같은데.. 찾아보니까 잘은 모르지만 dll과 관련된 오류인 것 같습니다. 다른 형식의 확장자(wav)파일을 재생하니 다행히 재생이 잘 됐습니다.

이런 식이네요. 일단 코드를 한번 봐야겠습니다.

시작하자마자 dll 파일로 들어가고, 들어가고 나면 프로그램이 실행됩니다. 무려 1354KB짜리 dll파일 코드를 분석할 용기는 없어서 어떻게 해야하나 고민하다가

1분을 들으면 새로운 메시지창이 생긴다는 점에서 착안, 일단 rtcMsgBox 함수를 call하는 모든 명령어에 breakpoint를 걸었습니다. (Search For -> All intermodular calls) 그리고 음악을 틀고 차분하게 기다리자..

잡아냈습니다! 이 주변을 조금 살펴보면..

느낌상 4044C0번지부터 시작된 함수인 것 같네요. 이 함수는 1분이 넘었을 경우 실행되는 함수이거나, 함수 안에서 1분을 넘겼는지 체크하는 루틴이 있던가 할 것입니다. 일단 이 함수 내에 1분을 넘겼는지 체크하는 부분이 있는지 확인하고, 없는 것 같으면 이 함수를 call한 함수로 넘어가서 확인해야겠네요. 이걸 확인하는 방법은 간단합니다. 4044C0에 break를 걸어두고 언제마다 도달하는지 보면 됩니다. 확인해보면 1분 이후에 break가 걸리는게 아니라 체감상 매 초마다? 매 순간마다? 계속 break가 걸립니다. 이 함수 내에서 1분을 체크하나보네요. 그러면 이제 함수 내에서 CMP 문들을 체크해보면

이 부분이 느낌이 좀 있습니다. CMP EAX, 0EA60이고 0xEA60 = 60000입니다. 60s = 60000ms니까 1분을 체크하기 딱 좋네요. 값을 적당히 키워주면 인증을 회피할 수 있을 것 같습니다. 그럴 줄 알았는데, 소리는 잘 재생되지만 이상한 오류가 뜹니다.

이 오류 또한 MsgBox이니 breakpoint에 걸릴 것이라고 추측했지만 걸리지 않았습니다. 생각해보니 dll에서 띄운 오류이면 breakpoint에 걸려있지 않겠네요. 일단 오류가 떴을 때 call stack을 확인해봅시다.

느낌상 다음번에 실행할 4046BF 주소를 stack에 push한 채로 돌아오지 못한 것 같으니 4046BF 바로 앞의 코드를 봐야겠습니다.


vbaHresultCheckObj 함수를 call하네요. dll 내의 저 함수 안을 헤집는 것보다 차라리 아예 저 함수 안으로 들어가지 못하도록 하는 것이 쉽겠습니다. 4046AB의 조건문이 참이면 실행을 안하게 되므로 eax의 값이 0이 될 수 있도록 TEST eax, eax 대신 SUB eax, eax로 변경하겠습니다.


제목에 패스워드가 떴습니다..감동..ㅠㅠ 좀 더 자세히 알아보고 싶으면 제목을 바꾸는 함수를 찾아서 또 break를 걸고 이것저것 뒤져보면 되겠지만 피곤한 관계로 다음에..



'워게임 > Reversing.kr' 카테고리의 다른 글

[Reversing.kr] Position  (0) 2017.12.30
[Reversing.kr] ImagePrc  (0) 2017.12.29
[Reversing.kr] Replace  (0) 2017.12.29
[Reversing.kr] Easy Unpack  (0) 2017.12.29
[Reversing.kr] Easy Keygen  (0) 2017.12.29
[Reversing.kr] Easy Crack  (0) 2017.12.29
  Comments