목록Reversing (20)
kaka09
[사진]1-1 프로그램을 실행시키면 조그만한 박스와 함께 그림을 그릴 수 있다. 아무 그림이나 그린 상태에서 Check 버튼을 클릭하면 오른쪽 사진처럼 Wrong 이라는 메세지 박스가 출력된다. 즉, 그림과 그림을 비교하는것 같은데 값을 어떻게 비교하는지, 어떤 값을 넣어야 되는지 살펴보기 위해 디버깅을 시도해보았다. [사진]1-2 해당 사진은 그림 비교시 틀렸을때 분기하는 구문이다. 일단 좀 더 위에 있는 구문을 살펴보기로 하자(비교문을 알기위해) [사진]1-3 반복문 아래 비교하는 구문이 2개 존재한다. 첫째로 DL,BL 을 비교하여 같지 않을시 [사진]1-2 영역으로 분기하고, 둘째로는 EDI와 15F90을 비교한다. 좀 더 정확한 분석을 위해 아이다로 다시 디버깅을 시도해 보았다. [사진]1-4 ..
[사진]4-1 Replace 란 제목의 실행파일이 주어졌다. 실행하면 무언가 입력값을 받을 수 있는데 오직 숫자만 받을 수 있다. 숫자를 입력하고 Check 버튼을 누르면 위 사진처럼 에러가 발생한다. 처음에는 호환성 문제인줄 알고 다른 컴퓨터에서도 실행해봤지만 똑같이 에러가 발생했다.. 먼가 싶어서 인터넷을 찾아보다 그냥 의도된 에러라고 한다.. 즉 일부러 이렇게 만들었다는 이야기인데.. 왜 그런지 알기 위해 디버깅을 시도했다. [사진]4-2 숫자를 입력하고 check를 클릭했을 때 0040466F의 명령을 실행하는데.. 문제는 EAX에 적재되어 있는 값 즉, 60160646 이라는 주소에 NOP를 덮어 쓴다는거다. 60XXXXX으로 시작하는 주소는 당연히 접근할 수 없다. 접근할 수 없는 영역에 값을..
[사진]3-1 파일을 실행하였더니 흰 바탕만 있는 창이 나타난다. 패킹이 되어서 제대로 실행이 안된건지 아님 원래 이렇게 의도한건지는 디버깅을 통해 분석 해봐야 알 것같다. Readme.txt를 읽어보면 OEP를 찾으라고 되어있다. OEP의 주소가 이번 문제의 정답이라 할 수 있겠다. 일단 해당 파일이 어떠판 패킹이 적용되었는지 파악하기 위해 PEID 라는 프로그램을 이용해 확인하였다. [사진]3-2 PEID로 확인해본 결과 무엇으로 패킹되었는지 찾을 수 없다고 한다. 일단 OEP를 찾는 문제이니 디버깅을 해보도록 하자 [사진]3-3 패킹이 되어있기 때문에 일반적인 어셈블리어와 좀 다르다. 예전 CodeEngn 문제를 풀때 OEP는 하단에 POP AD 밑에 JMP 문을 통해 OEP로 이동하는것을 배웠다...
[사진]2-1 Keygen 이라는 이름의 프로그램을 봐서 이름에 따라 특정한 시리얼 값이 생성되는 프로그램으로 보인다. ReadMe.txt를 읽어보면 시리얼 값이 5B134977135E7D13 일경우 대응되는 Name 을 찾으라는 문제인것 같다. 일단 시리얼 값이 어떻게 생성되는지 디버깅을 통하여 알고리즘을 분석해보자 [사진]2-2 일단 이름에 "1111"을 입력한후 키를 생성하는 코드를 찾아보았다. 키를 생성하는 코드는 사진에서 보이다 싶이 004010C6에 존재한다. REP 반복 명령을 통해 입력한 Name의 한 글자씩 특정한 아스키 코드 값으로 치환한다. 즉, "1111"->"21110121" 이라는 시리얼값이 도출된다.좀더 상세한 분석을 위해 여러가지 값을 넣어보고 일정한 규칙을 발견하였다. [사..
[사진]1-1 정확한 키(시리얼)을 찾아야 하는 문제임을 알 수있다. Ollydbg를 이용하여 해당 파일을 디스어셈블 후 문자열을 찾아보자 [사진]1-2 문자열을 살펴본 결과 Congratulation 과 Incorrect Password가 존재하는것을 알 수 있는데 이는 분기문을 통해 출력될 메세지를 지정하는 구조라고 할 수있다. 일단 Congaratulation이라는 문자열이 PUSH되는 지점으로 가서 코드를 살펴보자 [사진]1-3 사진을 보면 조건문을 통해 00401135로 분기를 할지 말지를 정하는것을 알 수 있다. 정확한 키값을 역추적하기 위해 코드를 살펴본 결과 다음 4개의 조건문과 반복문, 서브루틴에서 키값을 검증하는것을 알아내었다. 1. 004010B0 |. 807C24 05 61 CMP ..
[사진]1-1 저번 문제는 안그러더니 다시 CodeEngn 일때의 키값을 구하라는 문제다. 기존과정이랑 똑같이 PEID를 통해 패킹여부를 확인해 보았다. [사진]1-2 확인결과 EXE SHELD 라는게 적용되어 있는거 같다. 그대로 직역하면 실행방패.. 뭔가 DEP와 연관있는 개념인가?? 검색 해봐도 별다른 정보를 얻을순 없었다. 해당 용어는 차후에 알아 보도록 하고 문제풀이에 들어가 보겠다. 일단 패킹이 된것 같진 않아보여서 올리 디버거로 바로 실행해 보았다. [사진]1-3 다행히 올리 디버거로 정상 실행이 되는것을 확인이 되었다. 그러면 이제 부터 손쉽게 문제풀이가 가능하다. 여기까지 왔으면 이제 name이 주어진 상황에서는 공통요소가 보일것이다..인자입력->키 생성->비교->분기 대충 이러한 과정을..
[사진]1-1 이번에는 연속 우려먹는 문제에서 탈출하였다. 키값이 주어지고 주어진 키값에 맞는 name값을 찾으라는 문제이다. 점점 마지막에 가까워지니 난이도 조절을 하는 것일까?? 아무튼 이번에도 PEID로 먼저 확인절차를 가해보았다. [사진]1-2 확인결과 패킹은 씌워져 있지 않았다. 고로 올리 디버거로 바로 확인해보았다. [사진]1-3 올리 디버거로 실행결과 정상적으로 프로그램이 불러와졌다. 이전 과정과 똑같이 성공메세지 부분을 찾아보자 [사진]1-4 이번 문제는 이전 문제들과 달리 실패 메세지가 존재하지 않은것 같다. Good boy, well done등 메세지가 보이는걸로 봐서 성공 했을경우만 성공 메세지가 출력하는것 같다. 그래서 성공 메세지 영역으로 들어가 어셈코드를 분석해 보았다. [사진]..
[사진]1-1 이번 문제도 시리얼을 구하는 문제다. 끝까지 이걸로 우려먹는 건가????... 암튼 이번에도 패킹 여부를 확인하기 위해 먼저 PEID로 확인절차를 가했다. [사진]1-2 패킹은 되어있지 않지만 C++ 프로그램으로 작성되었다는것을 확인 할 수 있다. C#은 있었어도 C++은 처음이다. 일단 올리 디버거로 실행이 되는지 한번 살펴 보았다. [사진]1-3 다행히 올리 디버거로 잘 실행이 되는것을 확인할 수 있었다. 또 덤으로 콘솔창이 하나 실행이 됬는데 아무래도 이번 문제는 콘솔기반 프로그램이라서 그런듯.. 아무튼 올리 디버거로 정상적인 디버깅이 가능하니 문자열을 찾아보자 [사진]1-4 콘솔기반이라 그런지 굉장히 문자열이 많이 쓰인다. 성공 메세지 찾느랴 눈 빠질뻔한건 덤 이다.. 위 사진을 참..
[사진]1-1 14번 문제처럼 입력값이 CodeEngn일 때의 시리얼을 구하는 문제이다. 패킹 여부를 알기위해 PEID로 검사를 해보았다. [사진]1-2 패킹이 되어있지 않는 프로그램이다. 언패킹 과정 없이 올리 디버거를 이용하여 분석을 시도해 보았다. [사진]1-3 올리 디버거로 열어 봤을때 다음과 같은 어셈코드가 나온다. 이번 문제도 시리얼을 찾는 문제기 때문에 성공메세지 근처에 키값을 비교하는 구문이 존재할 가능성이 높으므로 문자열 검색을 통해 성공 메세지 부분을 찾아 보았다. [사진]1-4 찾아보면 "You cracked~~~"로 시작하는 문자열을 확인할 수 있다. 해당 부분으로 이동하여 분기구문을 살펴보자 [사진]1-5 어셈코드를 살펴보면 EAX와 45B844를 비교하여 값이 일치하면 "You ..
[사진]1-1 이번 문제는 시리얼을 구하는 문제이다. bruteforce 기법을 이용해야 한다는데.. 일단 PEID로 패킹이 되어있는지 부터 검사 하였다. [사진]1-2 UPX로 패킹되어 있는걸 확인할 수 있다. 올리 디버거로 디버깅을 시도해보자 [사진]1-3 OEP로 진입후 다음과 같은 어셈코드를 확인 할 수 있다. 서브함수로 00401025로 진입해서 어떠한 루틴을 처리하는것을 알 수 있다. 일단 시리얼키를 찾기 위해서 스트링 검색을 시도해 보았다. [사진]1-4 스트링을 찾아보면 밑에 Good Job 으로 시작하는 문자열을 확인할 수 있다. 해당 영역으로 이동하여 어셈코드를 살펴보자 [사진]1-5 "Godd job~~" 으로 시작하는 문자열의 영역을 들어가서 확인해보면 위에서 분기문이 존재하는것을 ..