본문 바로가기
반응형

Study/Reversing24

[리버싱] 안티 디버깅 안티 디버깅(Anti-Debugging)이란? 디버깅을 방지하고 분석을 하지 못하도록 하는 기술이다. 디버깅을 당한다면 해당 디버거 프로그램을 종료시키거나 에러를 발생시키는 방법 등 다양한 방법을 사용하여 분석을 방해한다. 안티 디버깅 기술에는 수많은 방법들이 존재하며 계속 발전하고 있으며 이에 따라 이를 우회하는 기술도 계속적으로 발전하고 있다. 안티 디버깅을 배워야 하는 이유 - 디버깅을 방지하기 위해 - 각종 안티 디버깅 기법들의 동작 원리를 파악한 후 회피하기 위해 - 안티 디버깅 기법을 공부하는 과정에서 저절로 고급 리버싱을 배울 수 있기 때문에 안티 디버깅 종류 static vs dynamic static 디버깅 시작할 때 한 번만 해체를 해주면 해결되는 기법이다. 주로 디버거를 탐지하여 프로.. 2017. 9. 20.
[리버싱] Stolen Byte Stolen Byte란 패커가 위치를 이동시킨 코드로써 보호된 프로그램의 코드 윗부분이다. 이렇게 옮겨진 코드들은 할당된 메모리 공간에서 실행되며, 이와 같은 이유로 패킹된 프로세스가 덤프될 때Stolen Byte를 복구하지 못하면 프로그램은 정상적으로 동작이 불가능하다. POPAD랑 OEP사이에 있는 연속된 PUSH를 Stolen Byte라고 한다. 2017. 9. 19.
[리버싱] 언패킹 언패킹이란? 패킹했던 파일은 푸는 것이다. 압축된 코드가 메모리에 올라가서 실행을 하게 되면 압축을 해제하는 루틴을 거친 다음 원본 소스를 실행하게 되는데 그때 원본 소스 시작점을 잡아서 해당 부분에서 덤프를 뜨는 것이다. 즉, 압축이 해제된 상태의 코드를 덤프 뜨는 것이다. 하지만 시작점을 찾는 다는 것은 강력한 패커일수록 어렵다. 언패킹 동작과정 언패킹을 했음에도 파일이 제대로 실행되지 않는 이유와 해결법 패커가 패킹과정에서 엔트리 포인트 부분의 코드를 다른 부분으로 옮겨두기 때문에 언패킹 할 때 옮겨진 코드를 복구해야 한다. 2017. 9. 19.
[리버싱] 패킹 패킹이란? 패킹은 실행압축이라는 뜻을 가진다. 일반적으로 ZIP, RAR과 같은 압축은 그 압축을 해제 시켜야 해당 프로그램을 실행시킬 수 있다. 하지만 패킹은 있는 그대로 일반 프로그램처럼 실행 가능하다. 실행(PE) 파일을 대상으로 파일 내부에 압축해제코드를 포함하고 있어서 실행되는 순간에 메모리에서 압축을 해제 시킨 후 실행시키는 기술이다. 다시 말하면 압축을 푸는 과정없이 바로 프로그램을 실행할 수 있는 것을 실행압축이라고 한다. 패킹을 하는 이유 - 데이터 압축(프로그램 크기 줄이기) - 악성코드에서는 작은 용량으로 빠르게 많이 퍼지게 하며, 분석이 불가능하게 하기 위한 목적 - 데이터 보호 : anti-reversing, anti-disassembling, anti-dumping - 취약하게 .. 2017. 9. 18.
[리버싱] IAT&EAT IAT IAT(Import Address Table)란? 프로그램이 어떤 라이브러리에서 어떤 함수를 사용하고 있는지를 기술한 테이블입니다. IMAGE_IMPORT_DESCRIPTOR 구조체 PE파일은 자신이 어떤 라이브러리를 Import하고 있는지 IMAGE_IMPORT_DESCRIPTOR 구조체에 명시하고 있다. 구조체 중요 멤버 OrginalFirstThunk : INT(Import Name Table)의 주소(RVA) Name : Library 이름 문자열의 주소(RVA) FirstThunk : IAT(Import Name Table)의 주소(RVA) EAT EAT(Export Address Table)란? 라이브러리 파일에서 제공하는 함수를 다른 프로그램에서 가져다 사용할 수 있도록 해주는 핵심 .. 2017. 9. 17.
[리버싱] 정적&동적 라이브러리 정적 라이브러리(Static library) 특정 기능의 라이브러리를 static하게 제작한다는 것은 링크단계에서 라이브러리(*.lib 파일)를 실행 바이너리에 포함시킨다는 것이다. 즉, 라이브러리의 동작 코드가 이를 사용하는 실행 바이너리 속에 포함되기 때문에 별도의 추가 작업없이 독립적으로 라이브러리 함수들을 사용할 수 있다. 하지만, 정적 라이브러리를 사용하는 프로그램이 늘어날수록 불필요하게 실행 파일들의 크기가 커지며, 라이브러리가 동시에 여러 실행 바이너리에 포함되는 경우 메인 메모리의 공간 활용 효율이 떨어진다. 동적 라이브러리(Dynamic library) : DLL 동적 라이브러리는 이를 사용하고자 하는 실행 바이너리에서 필요시 사용할 수 있도록 최소한의 정보만 포함하여 링크하거나, 독립적.. 2017. 9. 16.
반응형