OllyDbg
-
[Lenas Reversing for Newbies] 17Wargame/dreamhack.io 2021. 3. 14. 22:10
1. 프로그램 실행 위와 같이 두 개의 에디트 컨트롤이 있고 Check/About 버튼이 존재한다. 임의의 값을 채워 넣고 Check 버튼을 눌러보자. 위와 같이 임의로 maple19out, maple19out을 입력하고 Check 버튼을 누르자 에러를 나타내는 메시지 박스가 출력된다. 바로 디버깅을 진행해보자. 2. Debugging(with OllyDbg) 에디트 컨트롤로 부터 값을 읽어 들이는 API로는 GetDlgItemText가 있다. 해당 API의 원형은 다음과 같다. UINT GetDlgItemTextA( HWND hDlg, int nIDDlgItem, LPSTR lpString, int cchMax ); Ctrl+N을 통해 API 탐색을 해보면 다음과 같이 참조되는 부분을 확인할 수 있다...
-
[reversing.kr] Replace 풀이Wargame/reversing.kr 2021. 3. 9. 15:04
1. 프로그램 분석 우선 PEiD에 집어넣어보자. 위와 같이 단순한 Visual C++로 작성된 프로그램임을 확인할 수 있다. 프로그램을 실행해보자. 위와 같은 윈도우가 나타난다. 아무 값이나 입력해보려고 했지만 숫자가 아닌 값이 input으로 입력으로 들어올 경우 나타나지 않으며, 임의의 숫자를 넣고 Check 버튼을 누르면 프로그램이 비정상적으로 종료된다. 바로 OllyDbg를 통해 분석을 해보자. 2. Debugging(with OllyDbg) 프로그램을 실행하기 전에 Ctrl+N을 이용해 사용되는 API들을 살펴보자. 위와 같이 DialogBox 관련 API들이 있는 것으로 보아, 대화 상자 형태의 윈도우 임을 알 수 있다. Check 버튼을 눌렀을 때 GetDlgItemInt를 통해 입력 값을 ..
-
[Lenas Reversing for Newbies] 15Wargame/Lenas Reversing 2021. 2. 26. 21:41
1. 프로그램 실행 첨부된 프로그램을 실행하면 다음과 같은 창이 나타난다. Windows 10에서는 글자가 잘리는데 XP에서 실행하면 "I'm the starting nag. Remove me"라는 문자열이 보인다. 잠시 기다리면 다음과 같은 창이 나타난다. 이번 문제의 목표가 나타나 있다. Exit 버튼을 눌러보자. 위와 같은 창이 나타난 후 잠시 뒤에 프로그램이 종료된다. 이번 실습의 목표는 메인 창(실행화면 2) 앞 뒤로 나타나는 nag window가 나타나지 않게끔 패치하는 것이다. 2. Debugging(with OllyDbg) 파일을 열고, F9로 실행한 후, 앞의 nag window가 나타나자마자 OllyDbg로 pause를 한 후 call stack을 살펴보자. 파란색 체크 표시한 부분에서..
-
[Lenas Reversing for Newbies] 13Wargame/Lenas Reversing 2021. 2. 20. 21:11
1. 프로그램 실행 첨부된 XoftSpy.exe를 이용해 프로그램을 설치한 후 실행해보자. 좌측 About 항목을 선택해보자. license가 등록되지 않았다고 한다. 이번 실습의 목표는 이전 실습들과 마찬가지로 프로그램 license를 등록된 상태로 크랙 하는 것이다. 2. Debugging(with OllyDbg) OllyDbg로 프로그램을 실행시킨 후, About의 "Enter Registration Code" 버튼을 선택하자. 화살표 표시한 부분에 임의로 입력을 한 후 OK 버튼을 눌러보자. 위와 같이 "Invalid code."라는 문자열을 포함한 메시지 박스가 나타난다. MessageBox() API에 BP를 설정한 후 다시 등록을 시도해보자. 위와 같이 BP에 적중한다. 이 상태에서 F8을 ..
-
[Lenas Reversing for Newbies] 11Wargame/Lenas Reversing 2021. 2. 9. 22:44
1. 프로그램 실행 첨부된 fjprodsetup.exe를 이용해 프로그램을 설치한 후 프로그램을 실행해보자. 사진 파일로 퍼즐을 만들어 주는 프로그램인 듯하다. 메뉴바에서 Desk->Select 항목을 선택하면 다음과 같은 메시지 박스가 나타난다. 이번 문제의 목적은 이전 실습들과 마찬가지로 프로그램을 등록된 상태로 인식하게끔 패치하는 것이다. (Lenas에서는 또한 Unregistered 상태에서의 Window 타이틀바에 (Unregistered) 문구가 나타나는데 왜 안 나타나는지 모르겠다.) 2. Debugging(with OllyDbg) OllyDbg로 프로그램을 연 후, 타이틀바에 Unregistered 문구가 나타나는 것을 이용하여 문자열 탐색을 해보자. 위와 같이 AL 값에 의해 "Flash..
-
[reversing.kr] Music Player 풀이Wargame/reversing.kr 2021. 2. 9. 20:31
1. 프로그램 분석 다음과 같이 3개의 첨부된 파일이 있다. 일단 ReadMe.txt파일을 열어보자. 다 읽어봤으면 Music_Player.exe를 실행시켜 보자. 위와 같은 윈도우가 나타난다. 말 그대로 MP3 Player의 기능을 수행하는 듯하다. Open 버튼을 클릭하면 파일 열기 대화 상자가 나타나는데 임의의 mp3 파일을 선택한 후 재생 버튼을 눌러보자. 위와 같이 1분이 지나면 1분 미리듣기만 가능하다는 메시지 박스가 출력된다. ReadMe.txt 내용을 바탕으로 이번 문제에서는 1분이 지나도 정상적으로 노래가 재생되도록 패치를 해야 한다. 2. Debugging 디버깅을 진행하기에 앞서 PEiD에 해당 프로그램을 넣어보자. 해당 프로그램은 Visual Basic으로 작성된 것을 확인할 수 있..
-
[리버싱 핵심원리 study] 41장 ASLRReverse Engineering 2021. 2. 8. 19:31
ASLR(Address Space Layout Randomization)은 Windows Vista 이후부터 지원되는 기능으로, PE 파일이 메모리에 로딩될 때 로딩 시작 주소를 랜덤 하게 바꿔주는 기능이다. 이로 인해 프로세스의 스택, 힙의 시작 주소도 랜덤 하게 바뀐다. 모든 실행 파일에 적용되는 기술은 아니며, 아래와 같은 두 가지 조건을 만족해야 한다. (1) OS의 Kernel Version이 6이상 (Vista 이상) (2) 개발 도구에서 /DYNAMICBASE 옵션 지원 위 조건 중 (2)는 Visual C++의 경우 프로젝트 속성의 링커-> 고급 메뉴에서 확인해 볼 수 있다. 만약 ASLR 기능을 원하지 않을 경우 옵션에서 /DYNAMICBASE:NO로 설정해주면 된다. 1. ASLR.ex..
-
[리버싱 핵심원리 study] 40장 64비트 디버깅Reverse Engineering 2021. 2. 8. 18:51
이번 장에서는 동일한 소스코드를 x86와 x64 환경으로 컴파일했을 때, 어셈블리 코드가 어떻게 달라지는지 비교해본다. 책이 집필될 당시에는 x64dbg가 없어서 그런지 64bit 프로그램을 디버깅할 때 WinDbg를 이용한다. 단순 실행파일의 디버깅이 목적이라면 x64dbg가 편리할 것 같지만 이후에 커널 디버깅 등을 할 때는 WinDbg를 이용하므로, 익숙해질 겸 이번 포스팅에서도 책에서와 같이 WinDbg를 이용해보겠다. 1. 소스코드(WOW64Test.cpp) #include "stdio.h" #include "windows.h" #include "Shlobj.h" #include "tchar.h" #pragma comment(lib, "Shell32.lib") int _tmain(int argc..