출처 : http://cafe.naver.com/boanproject/23607



IDA Pro를 이해하는데 좋은 콘텐츠네요.


Unpacking Pykspa Malware With Python and IDA Pro - Subscriber Request Part 1


Reverse Engineering Anti-VM Detections in Malware - Subscriber Request Part 2



서준석 부대표의 강의도 있습니다. :)


1. DLL이란?
- Dynamic Linked Library의 약자로써 자주 사용하는 함수들이 있다고 보면 됨

2. DLL을 호출하는 원리
- 프로그램을 실행하고 DLL을 불러오는 LoadLibrary()를 호출한다
- 해당 DLL이 불려진다
- 그 DLL안의 DllMain()이 실행된다.

3. DLL의 기능
- 기능 개선 : 전혀 새로운 기능이 들어가거나 불필요한 부분이 제거될 수 있다.
- 버그 패치 : 문제가 있는 코드와 데이터를 수정할 수 있다.

4. DLL 인젝션이란?
- 다른 프로세스에 특정 DLL파일을 강제로 삽입 시키는 기법


5. DLL 인젝션이 사용되는 이유?
- 삽입된 DLL을 통하여 여러가지 행위가 가능
- 메모리의 접근권한을 자유롭게 얻어 활동 가능한게 DLL이다.
- 뭐든 악의적으로 이용이 가능하다.

6. 실생활에서 쓰이는 곳
- 유해 프로그램, 사이트 차단 프로그램
- 기능 개선 및 패치
- API 후킹

7. 예시 시나리오
- Notepad.exe를 실행하고 여기에 임의의 DLL을 넣고 메시지창을 띄운다.
- 키로거가 대표적
1) cdecl
- 함수 밖에서 함수의 정리
- 항상 call문의 다음 줄을 살펴서 스택을 정리하는 곳을 체크함

2) stdcall
- main 함수 내부에서 스택을 처리하지 않음
- Win32 API는 stdcall을 사용

3) fastcall
- 파라미터가 2개 이하일 때, 인자를 push로 넣지않고 ecx, edx레지스터를 이용
- 실행속도가 빠름

4) thiscall
- C++의 클래스에서 this 포인터로 사용
- 현재 객체의 포인터에 ecx에 전달하는 특징을 가짐
- ecx포인터에 오프셋 번지를 더함


1. 정의
 - PE 파일에서 프로그램의 실제 내용을 담고 있는 블록, PE 파일이 실행되고 가상 주소 공간에서 로드 된 후 섹션 내용이 참고되고 실행되는 구조




2. 내용

파일과 파일이 메모리에 로드될 때 메모리 구조

3. 섹션의 종류
 1) .text
  - 코드 섹션으로써 프로그램을 실행하기 위한 코드를 담는 섹션
 2) .data
  - 데이터 섹션으로써 초기화된 전역 변수들을 담고 있는 읽고 쓰기가 가능한 섹션
  - 64bit에서는 PE 파일에서부터 .bss섹션(초기화 되지 않은 공간)과 .data섹션에 병합됨
 3) .rsrc
  - 리소스 섹션으로써 대화상자, 아이콘 등 윈도우 PE 파일이 담고있는 리소스 관련 데이터를 담은 섹션
 4) .rdata
  - 읽기전용 데이터 섹션으로써 문자열 상수나 C++ 가상 함수 테이블 등을 배치
  - 코드 상에 참조하는 읽기 전용 데이터도 이 섹션에 포함


1. 가상머신

- VMware : 제일 많이 쓰임 ㅇㅇ

- VIrtualbox : 오라클이 제작한 가성머신이지만 VMware에 밀림

- Hyper-V : MS에서 만든 가상머신 역시 VMware에 밀림


2. 바이너리 에디터

- Hxd : 간편함

- FileInSight : 간단한 바이너리 디코드 기능 제공(xor)

- 010 editor : Hxd보다는 조금 강력함.. 상위호환 ㅇㅇ


3. 파일 해쉬 열람

- HashTab : 파일 속성에서 해쉬탭 나타냄

- HashMyFiles : 다량에 파일 해쉬가 필요할 때


4. 디스어셈블러 및 디스컴파일러

- IDA : Hexray와 같이 나오며 말이 필요없다. . 두번쓰자 ㅇㅇ


5. 디버거

- OllyDBG : 흔히 널린 디버거중 하나. 플러그인을 많이 지원하며 그만큼 범용성이 매우 큼! 짱짱맨!

- WinDBG : MS에서 제공하는 디버거, 강력하긴한데 좀 난이도를 올리려면 진입장벽도 올라간다.

- VirtualKD : 위에 두 개랑은 다르게 보조적인 역할을 하고 WinDBG와 VMware를 이어줘서 커널디버깅이 가능하다.

(커널디버깅이 뭔지알아야할듯)




흠.. 일단 여기까지..

출처는 같이 스터디하는 동아리 선배님 ㅎㅎ


+ Recent posts