목록분류 전체보기 (347)
Hacking Arts
- PEB란 ? Windows Kernel에서 프로세스에 대한 환경 정보를 담고 있는 구조체이다. 각 프로세스마다 PEB가 있고 각 프로세스 마다 가지고 있는 스레드 마다 TEB(Thread Environment Block)을 가지고 있습니다.PEB,TEB모두 커널모드에서는 존재하지 않습니다. 모두 유저모드 프로세스 하나당, 유저모드 스레드 하나당 존재하게 됩니다.[사진 1]-window xp 기준 PEB구조 nt!_PEB +0x000 InheritedAddressSpace : UChar +0x001 ReadImageFileExecOptions : UChar +0x002 BeingDebugged : UChar +0x003 SpareBool : UChar +0x004 Mutant : Ptr32 Void +..
-Visual studio에서 Complie 모드로는 debug 모드와 Release 모드로 나눌 수 있다. - debug 모드 : 실행 파일에 디버그와 관련된 디버깅 정보를 삽입하여 디버깅을 효율적으로 할 수 있도록 도와준다. 프로젝트 디렉토리 밑에 Debug라는 서브 디렉토리가 생겨 이 디렉토리 내에 디버깅 정보가 들어가게 된다. - Release 모드 : 디버깅 정보를 삽입하지 않기 때문에 코드를 최적화 시키고 파일의 크기를 줄이게 된다. 이를 통해서 실행 속도를 증가 시킬 수 있다. -아래는 http://sossms.tistory.com/entry/Debug%EC%99%80-Release%EB%AA%A8%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4에서 퍼왔습니다. 내용이 좋습..
-사용 Tool : virtualkd , windbg , vmware 일단 VirtualKD를 구글검색해서 사이트에서 받아서 압축을 풀면 아래 사진과 같다. [ 사진 1 ] - 여기서 target이라는 폴더는 vmware의 가상 머신에 넣어준다. 그리고 나머지는 자신이 사용하고있는 host pc에서 사용하게 될 것이다. [ 사진 2 ]-일단 target에 있는 것을 install 해주면 됩니다. [ 사진 3 ] - 그다음 재부팅되면 아래 사진 4를 켜놓고 저런식으로 vitualkd를 선택하면 됩니다. [사진 4] -그 다음 dubugger path는 자신의 windbg가 설치된곳을 선택해주시고 오른쪽 run debugger를 누르면 됩니다. [ 사진 5 ]-그럼 요렇게 windbg를 이용해서 간단하게 k..
- APIENTRY : APIENTRY 정의를 찾아가면 WINAPI가 나오고 WINAPI를 찾아가면 __stdcall이다. - CALLBACK : CALLBACK 정의를 찾아가면 __stdcall이 나온다. - 왜 둘다 __stdcall인데 나누었을까? API의 경우 수많은 함수들과 해당 함수들이 해야 할 역할이 명백히 나누어진다. 그래서 나누어지는 이유는 프로그래머들의 가독성을 높이기 위한 이유 이다. - CALLBACK이 붙었기 때문에 OS에서 CALLBACK 함수를 호출하는 것이아니다. - WinMain 함수 안에 WNDCLASS를 RegisterClass()함수를 통해 등록한다. OS가 이벤트 발생에 의해 OS가 호출해 주는 함수를 callback이라고 한다. 그러기 위해서는 OS는 함수포인터를 ..
-함수 호출 규약 : 함수를 호출할 때 파라미터를 어떤 식으로 전달하는가?에 대한 약속이다. 함수 호출전에 파라미터를 스택을 통해서 전달된다. 그리고 함수 호출 후에 ESP를 어떻게 정리하는지 에 대한 약속이 바로 함수 호출 규약이다. - Caller 와 Callee : Caller는 함수 호출한 쪽이고 Callee는 함수 호출을 받는 쪽이다. 설명하자면 main함수에서 scanf나 printf함수를 호출하는 경우 Caller는 main함수가 될테고 scanf나 printf는 Callee가 된다. - cdecl : C언어에서 주로 사용되며 Caller에서 스택을 정리하는 특징을 가진다. 그리고 가장 주요 특징은 C언어의 printf같이 가변 길이의 파라미터를 전달할 수 있다는 점이다. C언어에서는 기본적..
-LoadLibrary() [그림 1 함수의 구조] -프로세스에서 사용되는 api나 함수들은 라이브러리라는 dll 실행파일에 구현되어있고 프로세스는 구현되어있는 dll의 함수를 가져와서 사용하게 됩니다. 그때 프로세스에서 dll을 로드 하는데 사용되는 함수가 LoadLibrary입니다. -인자값으로는 간단하게 dll파일의 위치만 알려주면 됩니다. -GetProcAddress() [그림 2 함수의 구조] -GetProcAddress함수는 HMODULE은 모듈핸들로 DLL의 핸들값을 받아온다. 그다음 lpProcName은 모듈안에 찾고자하는 함수의 이름을 넣으면 주소값을 받아온다. -FARPROC -dll을 로드시키는 프로그램 소스코드 #include #include #include typedef int (..
1.프로세스(Process)-프로세스란 실행 중인 프로그램을 뜻한다.-디스크에 존재하는 프로그램이 메모리에 올라가게 되면 프로세스라고 불리어진다.-프로세스는 메모리에서 고유의 공간을 할당받아 cpu에서 명령어가 한줄씩 실행되게 된다.-프로세스는 태스크(Task)라고도 부른다.-Window같이 멀티태스킹 지원하는 운영체제에서는 동시에 실행되고 있는 여러개의 프로세스에 대하여 cpu와 메모리 자원을 안정되게 분배해 주어야 한다. (1)자원 소유의 단위 : 각각의 프로세스는 자신의 실행 이미지 로드와 실행에 필요한 추가적인 메모리 공간을 가지고 있어야 할 것이며, 이들 각 프로세스 마다 자신의 영역을 보호하고 다른 영역의 프로세스가 자신의 자원을 수정 읽기 삭제가 불가능 하게 되어야한다. 그리고 각 프로세스마..
- 키보드 메시지 후킹 실습 [그림 1 키보드 후킹 원리 그림] KeyboardProc.dll 파일은 훅 프로시저 KeyboardProc가 존재하는 DLL파일입니다. HookMain.exe는 KeyHook.dll을 최초로 로딩하여 키보드 훅을 설치하는 프로그램 입니다.HookMain.exe에서 KeyHook.dll 파일을 로딩한 후 SetWindowHookEx()을 이용하여 키보드 훅을 설치합니다. 다른 프로세스에서 키 입력 이벤트가 발생하면 OS에서 해당 프로세스의 메모리 공간에 KeyHook.dll을 강제로 로딩하고 KeyboardProc()함수가 호출되는 형태입니다. 중요한 점은 키 입력 이벤트가 발생하면 강제로 로딩 시켜준다는 점입니다. 즉 메시지 후킹 기법은 DLL인젝션 기법의 하나로 사용됩니다..