kaka09
code engn basic 16 본문
[사진]1-1
이번 문제도 시리얼을 구하는 문제다. 끝까지 이걸로 우려먹는 건가????... 암튼 이번에도 패킹 여부를 확인하기 위해 먼저 PEID로 확인절차를 가했다.
[사진]1-2
패킹은 되어있지 않지만 C++ 프로그램으로 작성되었다는것을 확인 할 수 있다. C#은 있었어도 C++은 처음이다. 일단 올리 디버거로 실행이 되는지 한번 살펴 보았다.
[사진]1-3
다행히 올리 디버거로 잘 실행이 되는것을 확인할 수 있었다. 또 덤으로 콘솔창이 하나 실행이 됬는데 아무래도 이번 문제는 콘솔기반 프로그램이라서 그런듯.. 아무튼 올리 디버거로 정상적인 디버깅이 가능하니 문자열을 찾아보자
[사진]1-4
콘솔기반이라 그런지 굉장히 문자열이 많이 쓰인다. 성공 메세지 찾느랴 눈 빠질뻔한건 덤 이다.. 위 사진을 참고하면 "Good job"과 "Wrong password" 메세지를 보면 "Good job" 메세지가 name과 password가 일치했을때의 메세지 라고 생각할 수 있다. 그러면 이제 성공 메세지 근처의 어셈코드를 확인하여 분기문을 찾아보자
[사진]1-5
[사진]1-5의 맨 위를 보면 분기문을 확인 할 수 있다. EAX와 [EBP-3C]의 값을 서로 비교해서 일치하면 성공 메세지를 아니면 실패 메세지를 출력하는 구조로 설명할 수 있다. 이제부터 동적 디버깅을 통하여 EAX와 EBP-3C에 어떤 값들이 들어가는지 확인을 해보자
[사진]1-6
name과 password를 위 사진처럼 입력하면 EBP-3C와 EAX에 각각 E4C60D97, 4D2가 들어가는것을 확인할 수 있다. 이를 통해 EBP-3C에는 NAME이 EAX에는 PASSWORD가 저장되는것을 확인할 수 있다. 따라서 조건문을 맞춰주기 위해서 E4C60D97의 10진수 값을 PASSWORD에 집어넣으면 된다.
[사진]1-7
해당 값을 입력하면 성공 메세지가 출력되는 것을 확인 할 수 있다.
'Reversing' 카테고리의 다른 글
code engn basic 18 (0) | 2017.08.03 |
---|---|
code engn basic 17 (0) | 2017.08.02 |
code engn basic 15 (0) | 2017.08.02 |
code engn basic 14 (0) | 2017.08.02 |
code engn basic 13 (0) | 2017.08.02 |