DLL ? Windows에서 사용하는 동적 라이브러리파일이다. ( Linux계열에서 so파일정도..? ) 일단 한번 로드된 DLL의 코드 및 리소스는 Memory Mapping기술로 여러 Process에서 다같이 쓰자 ! 1. 프로그램이 사용되는 순간 Loading, 사용이 끝나면 UnLoading - Explict Linking 2. 프로그램이 실행되는 순간 Loading, 프로그램이 종료되면 UnLoading - Implict Linking ( 이제 나올 IAT는 2번 항목에 해당하는 매커니즘을 제공한다. ) IAT & EAT ( Import Address Table, Export Address Table ) 한다리 건너서 호출된다. 예를 들어 "Call [0x101104]"을 하게되면 0x7C010..
PE 파일을 메모리에 로딩할 때 각 섹션에서 메모리주소(RVA)와 File Offset을 매핑하는 과정이다. 왜냐하면 FileAlignment, SectionAlignment가 서로 다르기 때문에 Memory상에서의 Section의 크기와, File상에서의 Section의 크기가 서로 다르다. (남는 부분은 Null Padding값으로 채워진다.) 1. 내가 찾으려는 RVA 주소가 포함된 Section을 찾는다. 2. 계산을 통해 File Offset을 찾는다. ( 생각보다 간단하다... ) Memory쪽 섹션시작 Base를 빼고, File쪽 시작 Base를 더한다. 다음에 못하면 비융신 ~~~ 결국 이게 필요한 순간은 OllyDBG등의 디버거상에서 내가 찾으려는 주소를 발견했을 때, 그 주소를 File..
PE32, PE+, PE32+ 라고 불리는 PE File Format은 실행파일형식이다. Linux의 ELF File Format과 같다. 이 파일형식을 가지는 확장자는 EXE, DLL, OCX, SYS 등등이 있다. DOS Header DOS Stub --- 여기까지는 DOS와의 호환성을 위해 존재하는 Header이다. NT Header Section Header (.text) Section Header (.data) Section Header (.rsrc) --- 여기까지가 PE Header이다. Section (.text) Section (.data) Section (.rsrc) PE File Format은 대표적으로 위와같은 구성을 가진다. 여기서 당연하게도 Section은 늘어날수도 줄어들수도 ..
이번 포스팅에서는 Visual Basic이라는 언어를 사용해 만들어진 프로그램들을 리버싱을 통해 분석할 때 주의해야할 점과 차이점에 대해서 설명한다. - VB 전용엔진을 사용한다. (MSUBUM60.dll 파일) 결과적으로 MSUBUM60.dll의 API를 우리가 호출하게되면 내부적으로 그 API에서 필요로하는 Windows API들을 다시한번 호출해주는 과정을 거친다. JAVA의 JVM과 비스무리한 느낌이기는 하다..? - N code, P code가 존재한다. N code는 Nature Code의 약자로 우리가 평상시에 사용하던 VC++에서 사용하던 코드이다. 반면에 P code는 VB 전용엔진에서만 해석이 가능한 코드를 말한다. (이식성이 증가한다.) - Event Handler 사용. Window..
여기서 소개하는 Register와 Stack은 모두 32bit 운영체제의 CPU를 기준으로 작성된다. General Purpose Register (범용 레지스터) EAX : Accumulator for operands and Result data. EBX : Pointer to data in the DS Segment. ECX : Counter for string and loop operations. EDX : I/O Pointer. EBP : Pointer to data on the Stack. ( SS Segment ) - 이게 맞나..? ( Stack Base Pointer 아닌가..? ) ESI : Source pointer for string operations. EDI : Destinatio..
정적분석 - 파일의 겉모습을 관찰하여 분석. - File Type, File Size, Header, API, String, 압축여부 등등의 정보를 획득한다. 동적분석 - 파일을 직접 실행시키고 그 행위를 분석. - 디버깅을 통해 코드 흐름 및 메모리 상태등을 살펴보는 방법. - 각종 이벤트 등을 적절하게 발생시켜 그에 대응하는 동작들을 확인한다. 정적분석을 통해 동적분석을 위한 아이디어를 얻을 수 있다. 지금까지 하던 '디버깅'은 리버싱 기술중 한 가지에 불과하다.