BaaaaaaaarkingDog
코딩, 해킹
[Reversing.kr] Replace

숫자만 입력 가능한 것 처럼 보이고 막 입력하고 Check를 누르니 프로그램이 죽습니다.
Ollydbg로 헤집고 다니니 401000에 진입해서 비로소 창이 뜬다는 것을 알 수 있었고, 그 밑에 있는 GetDlgItemInt 함수에 breakpoint를 걸고 각 레지스터의 값을 살펴보니

eax에 내가 입력한 수가 들어가고, 그 값을 4084D0번지에 씁니다. 코드영역인 것 같네요. 이후에 40466F번지의 함수로 이동합니다. 따라가봅시다.(F7)

중간에 뜬금없이 DB 81도 껴있고 코드가 개떡같네요. 일단 천천히 흐름을 따라가보면
4084D0번지에 쓴 값을 2 더해주고(정확히는 INC를 2번 함)

갑자기 40467E번지의 코드가 이렇게 됩니다. 참으로 이해가 안가는 현상이지만 일단 순응하고 코드를 계속 따라가보겠습니다.
쭉 따라가 다시 404684번지에 도달하므로 4084D0번지의 값이 또 2 더해집니다. 그러고나면 40106C번지로 돌아오는데, 그 곳에서는 404690번지로 점프합니다. 점프해서 가보면 4084D0 번지의 값이 괴상하게 변해있습니다.

?????? 하.. 이게 뭔가요.. 거친거라고는 40467E~404683번지의 저 이해할 수 없는 명령밖에 없는데 4084D0번 주소의 값이 이상하게 변해있습니다. 아무리 생각해도 원인은 단 하나, 40 00 EB 60 90 .. 저 기계어와 대응되는 어셈블리 코드를 Ollydbg가 이상하게 알려줬다고밖에 생각할 수가 없습니다. 어쩔 수 없이 404684번지의 값이 2 더해진 이후의 여러 값들을 확인했습니다.


네, 아무런 도움이 되지 않네요.

이것저것 찾아본 결과, 601605C7가 더해진다고는 하는데 도저히 이해가 안갑니다. 나중에 다시 확인을 해봐야할 것 같습니다. 아무튼 계속 진행하겠습니다.

내가 입력한 값 + 2 + 601605C7 + 2 한 주소의 값을 90으로 만듭니다. 그러면 이제 구조 파악은 됐는데, 그래서 문제에서 바라는게 뭔가요..? 라고 생각해본다면 

여기서 ascii "H4`@',0 이라고 된 부분이 사실은 PUSH "00406034"입니다. 406034번지에는 Correct!가 있습니다. 여기서도 Ollydbg가 이상하게 동작하네요. 그러면 Correct! 를 Dialog창에 보이기게끔 해야할텐데, 그러기 위해서는 401071번지의 JMP가 NOP이 되면 되겠습니다.

401071 = INPUT + 601605CB
INPUT = FFFFFFFFA02A0AA6 (=unsigned int 2687109798)

뭐 어찌저찌 맞긴 했다만 이해가 안가는 부분 투성이네요.




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

[Reversing.kr] Direct3D FPS  (0) 2017.12.30
[Reversing.kr] Position  (0) 2017.12.30
[Reversing.kr] ImagePrc  (0) 2017.12.29
[Reversing.kr] Replace  (0) 2017.12.29
[Reversing.kr] Music Player  (0) 2017.12.29
[Reversing.kr] Easy Unpack  (0) 2017.12.29
[Reversing.kr] Easy Keygen  (0) 2017.12.29
  Comments
댓글 쓰기
[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] Music Player  (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
댓글 쓰기
[Reversing.kr] Easy Unpack

OEP를 찾으라네요. packing이 되어있더라도 어쨌거나 프로그램이 실행이 되어야하기 때문에 언젠가는 난독화되어있는 부분의 난독화가 풀리고 OEP를 찾을 수 있을 것입니다. Ollydbg로 까봅시다.

패킹되어있는 이 프로그램의 EP는 40A048번지입니다. 언젠간 난독화가 해제될테니 쭉쭉 진행하다보면..

401150번지로 점프합니다.


이건 대체 뭐하는 곳인가 싶겠지만, 사실 이 곳은


OEP입니다!!(우클릭->Analysis -> Analyse code)

OEP는 401150번지네요.



'워게임 > 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] Music Player  (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
댓글 쓰기