반응형

PC리버싱/안티디버깅 11

INT 안티디버깅 정리

사용처 패커등 TLS등 다양한곳에서 사용된다 1. INT 0x3 #include #include #include int main() { while (1) { __try { __asm { int 0x3; } printf("Debugged\n"); } __except (EXCEPTION_EXECUTE_HANDLER) { printf("Not debugged\n"); } } } 첫 번째 케이스는 다음과 같이 구현된다. 일반적으로 int 0x3은 소프트웨어 브레이크 포인트이기 때문에, 정상적으로 실행이 될때는 해당 브레이크 포인트를 만나게 되면 Exception을 던지고 종료하는 구조를 갖게 된다. 하지만 디버거에서 디버깅을 진행할 때는 해당 인스트럭션을 실행해도 익셉션이 발생하지 않는다. 이를 이용해서 현재 ..

GS (Stack Canary/Cookie)우회

https://dhhd-goldmilk777.tistory.com/170 버퍼오버플로우에대해서 예제 #include #include char password[] = "Dhhd"; int check_password() { char buffer[5]; int flag = 0; printf("password:"); gets(buffer); if (strcmp(buffer, password) == 0) flag = 1;.. dhhd-goldmilk777.tistory.com 버퍼오버플로우참고 https://dhhd-goldmilk777.tistory.com/168 옛날 보다 현재가 리버싱이 더어려운이유들 https://dhhd-goldmilk777.tistory.com/149 visual studio 보안해제하..

TLS callback(TLS(Thread Local Storage) 와 isdebuggerpresent)

TLS(Thread Local Storage)는 스레드 별로 고유한 저장공간을 가질 수 있는 방법이다. 악성코드나 패킹에 안티 디버깅 기술로 TLS callback등이있다 디버거가 프로그램을 열면 EP지점에서 멈추는데 TLS callback은 EP전에 실행된다 이걸 이용해 악성코드나 패킹은 디버거 탐지 기술을 넣어둔다 TLS안에 만약 이런한 지식 없다면 안티디버깅하기가 꽤어려울것이다 소스코드 Visual Studio 2019 기준 #define _WIN32_WINNT 0x0500 #include #include #pragma comment(linker, "/INCLUDE:__tls_used") void NTAPI Tls_Callback(PVOID THandle, DWORD Reason, PVOID Res..

간단한 ASLR우회 방법

aslr 이란 ? address space layout randomization 즉, 주소의 공간을 무작위로 배치한다 라는 뜻입니다. 리버싱 방지 기술 중에 하나입니다. 그럼 오늘은 aslr을 제거 하는 방법에 대해서 소개하도록 하겠습니다 aslr은 또한 reloc section이있을시 aslr이라는 힌트도잇다 방법1 CTF exploer님에게 맡기세요 dll can move 체크를뺴면된다 방법2 준비물 : aslr 이 적용된 프로그램 , hexediter , peview, x64dbg peview 프로그램을 사용하여 aslr 이 존재하는지에 대해서 판단합니다. 1. peview 에대 대상 파일을 올립니다.(저는 minesweeper.exe) 여기서 IMAGE_INT_HEADER에 들어갑니다. 위와 같이..

IsDebuggerPresent기법

#define _WIN32_WINNT 0x0500 #include #include int main() { while(1) { Sleep(1000); if(IsDebuggerPresent()) printf("디버거 발견\n"); else printf("정상\n"); } return 0; } 예제 파일 원리 mov eax, dword ptr fs:[0x30] //FS세그먼트 레지스터는 현제 실행중인 스레드를 설명하는 Win32 TIB를 가르킨다 //0x30 에는 PEB가있다 https://ko.wikipedia.org/wiki/Win32_%EC%8A%A4%EB%A0%88%EB%93%9C_%EC%A0%95%EB%B3%B4_%EB%B8%94%EB%A1%9D Win32 스레드 정보 블록 - 위키백과, 우리 모두의..

INT 3 안티디버깅

#define _WIN32_WINNT 0x0501 #include #include void main(int argc, char* argv[]) { __try { __asm { int 3; } } __except (EXCEPTION_EXECUTE_HANDLER) { MessageBox(NULL,"정상","정상",MB_OK); goto ElSE; } MessageBox(NULL,"디버거 발견","디버거 발견",MB_OK); ElSE: return; } 원리 https://ko.wikipedia.org/wiki/INT_(x86_%EB%AA%85%EB%A0%B9%EC%96%B4) INT (x86 명령어) - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 INT는..

반응형