본문 바로가기
반응형

분류 전체보기798

예외처리/GetExceptionCode() #include #include int n = 0; void main() { int s; __try {/* s = 10 /n; printf("결과 : %d\n",s); */ char *p = 0; *p = 'a';//access violation(잘못된 메모리 참조) 결국 0xc00000005번 예외 } __except(1) { printf("예외발생 : 0x%0x\n",GetExceptionCode()); //에러 코드를 알고자 할때 GetExceptinCode(); } printf("프로그램 계속 실행\n"); } /*위 코드는 죽는다. 왜 죽을까?? 10을 0으로 나누는 명령은 DIV 10,0이다. CPU는 0으로 나눌수 없다는 것을 알고 트랩을 발생한다. ※트랩 : 인터럽트와 비슷하나 CPU가 발.. 2007. 1. 22.
API후킹 함수로 하기 #include #include // PE화일의 내용을 검색하려면 DbgHelp.dll 이 필요하다. #include "Dbghelp.h" #pragma comment(lib, "Dbghelp.lib") void Replace( HMODULE hModule, // .idata를 가진 모듈의 주소 PCSTR dllname, // Hooking 할 함수를 가진 DLL이름 PROC oldfunc, // 훅킹할 API 함수. PROC newfunc) // 바꿀 함수 { // 1. module 에서 .idata section 의주소를 찾는다. ULONG sz = 0; PIMAGE_IMPORT_DESCRIPTOR pImage = (PIMAGE_IMPORT_DESCRIPTOR) ImageDirectoryEntryTo.. 2007. 1. 22.
API HOOKING 4~4기가의 가상주소 공간에섯 실행파일의 주소는 400000번지 이하에 있고 User32.dll의 주소는 77D304EA에 있다. 프로세서는 MessageBoxA를 호출하기 위해 77D304EA를 호출할것이다. 하지만 다른 dll이 먼저 올라와 있다면 다른곳으로 운영체제는 올려준다. 그러면 프로세스는 호출하는데 다른것을 호출할 것이다. 이것을 막기 위해 운영체제가 호출 주소를 바꿔준다. 하지만 운영체제또한 이것을 갯수에 따라 다 바꿔줄 수는 없다. .idata에는 Dll의 주소를 가지고 있다. 420000번지의 주소에 다른 함수의 주소를 가지고 있기때문에 운영체제는 420000번지의 .idata의 값을 바꿔주기만 하면 되는것이다. 이것을 이용해 API 후킹을 하는것. Ex>1번파일 .idata는 구조체이.. 2007. 1. 22.
메시지 훅 키보드 입력 -> 디바이스 드라이버 ->SHICH->RIT->스레드 메시지 큐 ->GetMessage()-> 이 과정에서 중간에 화살표 방향을 한번더 다른곳으로 거치게 할수 있다. 메시지 빼는 방법에 따라 15가지 방법이있다. 1.Global후킹-시스템 전체에 건다 2.Thread후킹-하나한테 건다. 훅 필터 함수 : 후킹하는 함수 훅 체인 : 후킹하는 함수들이 여러개가 있을경우 하나의 훅의 끝을 다음 후킹 하는 함수로 연결시켜줘야 한다. #include #include LRESULT CALLBACK WndProc(HWND hwnd,UINT iMessage,WPARAM wParam,LPARAM lParam); typedef (*F1)(DWORD); typedef (*F2)(); TCHAR lpszClas.. 2007. 1. 22.
반응형