본문 바로가기

API

제2회 IGRUS 해킹 대회 출제자 보고서(6번) 6번 문제 : dakuo@.exe 를 실행시켜서 답을 구하세요. 문제풀이------------------------------------------------------------------------------------------------ 6번 문제 : 1. 출제의도 : 이문제를 낸 이유는 리버싱을 할때 선행 단계들을 무시한 채 ( 리버싱 수행단계 : http://dakuo.tistory.com/21 ) 무작정 올리디버거에 넣고 보는 사람들에게 경고를 하기 위해서 출제했습니다. (동적분석 없이 바로 정적분석으로 넘어가는) 2. 문제풀이 : 리버싱 수행단계에 의해서 1. 바이너리 분석을 해본다. HexWorkshop과 PEID 로 분석결과 별 특이점을 찾지 못했습니다. 2. 문자열과 API, DLL .. 더보기
타이머(Timer) 타이머 : 한 번 지정해 놓기만 하면 일정한 시간 간격을 두고 연속적으로 게속 발생한다. 주기적으로 같은 동작을 반복해야 한다거나 여러 번 나누어 해야 할 일이 있을 때 이 메시지를 이용한다. 타이머 메시지를 사용한 예제이다. (윈도우 프로그램 기본틀에 수정을 하면 된다 http://dakuo.tistory.com/entry/1) LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; static HANDLE hTimer; SYSTEMTIME st; static char sTime[128]; switch(iMessage) { case WM_CREATE: hTimer =.. 더보기
출력하기 1. DC(Device Context) 윈도우즈는 세 가지 동적 연결 라이브러리(DLL) 로 구성되어 있는데 KERNEL : 메모리를 관리하고 프로그램을 실행시킨다. USER : 유저 인터페이스와 윈도우를 관리한다. GDI : 화면 처리와 그래픽을 담당한다. 윈도우즈 API 함수의 대부분은 이 세 DLL에 의해 제공된다. 특히 화면으로 출력되는 모든 글자와 그림은 GDI 를 통해야 한다. DC(Device Context)란 출력에 필요한 '모든 정보'를 가지는 데이터 구조체이며 GDI 모듈에 의해 관리된다.(ex. 폰트, 선의 색상과 굵기, 허가된 영역에만 출력하게 하기, 출력 방법 등등) 2. 기본 출력 예제 DC를 사용하여 문자열을 출력해보자. 마우스 왼쪽 버튼(WM_LBUTTONDOWN)을 누르면 .. 더보기
윈도우 기초 프로그래밍 #include LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); HINSTANCE g_hInst; LPCTSTR lpszClass=TEXT("Sample"); int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance ,LPSTR lpszCmdParam,int nCmdShow) { HWND hWnd; MSG Message; WNDCLASS WndClass; g_hInst=hInstance; WndClass.cbClsExtra=0; WndClass.cbWndExtra=0; WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); WndClass.hCursor.. 더보기
윈도우즈(Windows) 프로그래밍의 기초 윈도우즈(Windows)의 장점 : 1. 그래픽 기반의 운영체제이다. 2. 멀티 태스킹이 가능하다. 3. 장치에 영향을 받지 않는다. 4. 일관성 개발툴의 선택 : 1. API : API(Application Programming Interface) : 운영체제가 응용 프로그램을 위해 제공하는 함수의 집합 2. SDK : SDK(Software Development Kit) : 윈도우즈를 만든 Microsoft에서 제공하는 윈도우즈용 프로그램 개발 킷이다. API 함수들을 사용하여 프로그램을 작성하며 가장 원론적이고 먼저 발표된 개발방법이다. 섬세하고 막강하며 속도가 빠르고 크기에 유리하나 방대한 API 함수를 알아야 하며 코드가 길어지고 생산성도 낮다. 3. 클래스 라이브러리 API 함수들을 좀 더 쉽.. 더보기
안티 디버깅(Anti-Debugging) 안티 디버깅(Anti-Debugging) : 디버깅을 방지하고 분석을 하지 못하도록 하는 기술. 디버깅을 당한다면 해당 디버거 프로그램을 종료시키거나 에러를 발생시키는 방법등 다양한 방법을 사용하여 분석을 방해한다. (참고 : 디버깅(Debugging) : 프로그램의 특정 부분에 Break Point를 설정한 후 실행을 하면 그 위치에 프로그램이 멈추게 되며 메모리에 값이 제대로 들어가 있는지, 코딩한 흐름대로 프로그램이 진행되는지 단계적으로 실행할 수 있다) 안티 디버깅 기술에는 수많은 방법들이 존재하며 계속 발전하고 있으며 이에 따라 이를 우회하는 기술도 계속적으로 발전하고 있다. CheckRemoteDebuggerPresent() Windows API Detecting Breakpoints by C.. 더보기
아이다(IDA)의 크로스레퍼런스 기능 - 지뢰찾기 맵핵 크로스레퍼런스 : 함수가 사용된 곳을 교차하여 참고할 수 있게 표시를 해주는 것 (참고 : 어떤 함수가 어디에서 또 쓰였는지를 찾기 쉽도록 표시를 해주며 Win32 API에 대해서는 심볼 함수 이름까지도 표현해준다. IDA의 가장 강력한 기능이라고도 할 수 있다) 지뢰찾기(winmine.exe)를 크로스레퍼런스 기능을 이용해 해킹해보도록 하겠다. 'C:\WINDOWS\system32\winmine.exe'를 IDA로 open한다. (참고 : 윈도우 기본 프로그램을 open할 경우 사용할 수 있는 디버거 정보가 담겨있는 심볼 파일을 IDA가 자동으로 연결하여 자세한 정보를 표현해준다. 설정법 : http://dakuo.tistory.com/entry/아이다IDA에-심볼-파일-연결하기) 함수 목록을 살펴본다.. 더보기
OllyDbg Command 명령어 사용 커맨드 명령을 사용하려면 특정 상황별로 유용한 api를 알고 있어야 한다. 파일 생성하거나 열기(Open) 16bit : CreateFile 32bit : CreateFileA wide : CreateFileW 파일 입출력(Read&Write) ReadFile : 읽기 WriteFile : 쓰기 파일 접근(Access) SetFilePointer 시스템 디렉터리를 얻어오는 함수 16bit : GetSystemDirectory 32bit : GetSystemDirectoryA wide : GetSystemDirectoryW .ini 파일과 관련된 함수 : ini 구성 설정에 관련된 함수들 16bit : GetPrivateProfileString, GetPrivateProfileInt, WritePrivat.. 더보기
올리디버거(OllyDBG)를 이용한 CrackMe 문제 풀이 crackme author : abex type : cdrom check level : easy tute author : HaQue Ollydbg.exe 실행해서 abexcm1.exe를 open한다. 프로그램이 어떻게 작동되는지 보기 위해 Run(F9)을 한다. 첫 번째 메시지박스가 나타나고, 확인을 클릭하면 두 번째 메시지박스가 나타난다. 확인을 클릭하고 올리디버거를 보면 프로그램이 종료되었음을 알 수 있다. 첫번째 메시지박스에는 CD-ROM을 체크하는 루틴을 우회하라고 나오고 두번째 메시지박스에는 CD-ROM이 아니라고 하며 프로그램이 종료되었다. 이 문제를 푸는 방법에는 메모리 주소 흐름을 바꾸는 방법과, CD-ROM을 체크하는 함수의 리턴값을 변경해서 푸는 방법 2가지 방법이 있다. 1번 방법 풀.. 더보기