snd-reversingwithlena-tutorial21.tutorial

min_fo·2023년 6월 25일
0

IAT 와 EAT 설명 사이트 : https://jamielim.tistory.com/entry/Reversing-IAT%EC%99%80-EAT-%EB%A1%9C%EB%94%A9-%EA%B3%BC%EC%A0%95

https://idlecomputer.tistory.com/180

DLL이란

Dynamic Link Library, 동적링크로 실행파일에서 해당 라이브러리 기능을 사용시에만 참조해 기능을 호출할 수 있는 방법이다. 여러 프로세스에서 공유하며 쓰는 라이브러리로 멀티태스킹 환경에서 각 프로세스마다 라이브러리를 갖고 그 용량을 차지하는 것보다 메모리에 한 번 로딩시켜 프로세스마다 공유시키면 메모리를 더 효율적을 사용할 수 있다.

실제 DLL 로딩 방식은 2가지 입니다.

프로그램내에서 사용되는 순간에 로딩하고 사용이 끝나면 메모리에서 해제 시키는 방법(Explicit Linking)과
프로그램 시작할 때 같이 로딩되어 프로그램 종료 할 때 메모리에서 해제되는 방법(Implicit Linking)이 있습니다.

라이브러리와 DLL의 차이점

라이브러리는 링크시 필요함
DLL는 프로그램 실행 혹은 함수 실행시 필요함

IAT가 존재하는 이유

호환성 때문이다.

가상메모리와 가상 공간 dll 방식

:https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=yheekeun&logNo=220709173937

INT를 IAT에 입력하는 이유

IID 에 INT에 있는 주소를 IAT에 옮기는 이유가 뭘까라는 의문이 든다
그냥 INT 주소를 옮기면 안되나 라는 생각이 든다. 하지만, DLL이 프로세스에 올라갈때, imagebase는 항상 고정이 아니다. INT 주소는 DLL 내부에 위치이다. IAT는 프로세스의 위치이다.

DLL import 작동 원리

  1. 프로그램 내에 임포트 테이블 존재한다.
  2. 임포트 테이블이란 DLL 헤더를 가지고 있으며, 각각에 필요한 함수가 있다.
  3. 로더가 필요한 DLL을 로딩한다.
  4. DLL에 IID라는 것이 존재한다. IID 내부에 INT와 IAT가 존재한다. INT에는 IMAGE_IMPORT_BY_NAME가 존재한다. IMAGE_IMPORT_BY_NAME에는 name과 hint가 존재한다. 이를 통해서 함수의 주소를 얻는다.
  • 추가적으로 IID-> OriginalFirstThunk를 사용안하고 함수의 주소를 찾기도 한다.
  1. IAT 배열 값에 위에서 구한 함수 주소를 입력합니다. 주소가 들어가기 전에 배열에는 함수의 이름이 존재한다.
  2. 이는 INT가 NULL만나기 전까지 반복한다.

문제풀이 FSG 2.0 UnPackMe

문제가 열리지 않는다...
https://www.virustotal.com/gui/file/d5c694a33baf56816ff3907ac6e1ee56f5fb78f1c06ada04f3b6cb22c3893f21/details

바이러스 토탈을 돌리면 어떤 패커를 사용한지 알수 있다. 구글링을 통해서 FSG는 JMP 구문을 통해서 원본 코드로 갈수 있다 이를 이용하면 OEP를 찾을 수 있다.

문제풀이 UPX

UPX도 마찬가지로 바이러스 토탈에 올리면 어떠한 패커를 사용한지 알수 있고, 이를 기반으로 구글링을 통해서 언패킹 정보를 얻어서 언패킹하면된다. PUSHAD -> popAD -> OEP 진입한다는 루틴을 이용하면 된다고 한다.


UPX의 특징을 잘 이용하여 OEP로 진입한다.

IAT가 문제가 생겨서 트리를 삭제시켰다.

그 후에 삭제된 IAT를 제외하고 나머에 맞게 VA와 SIZE 변경시키고 덤프를 뜬뒤, fix Dump를 하였다.

프로그램이 정상적으로 작동하였다. 하지만 왜 IAT한개 삭제되면 정상적으로 작동이 되지 않을 것 같은데 정상적으로 작동했는지는 의문이다.

문제풀이 UnPackMe_WinUpack0.39

업로드중..
winUpack의 특징도 UPX랑 같이 초반에 스택이 변경된 후 다시 그 위치로 스택이 다시 돌아올때가 OEP이다. 그 특징을 이용하면 언패킹이 가능하다.

profile
포렌식을 공부하는 학생입니다.

0개의 댓글