본문 바로가기

리버스-엔지니어링

Lab05-01 - IDA 정적 분석

반응형

ி 정적 분석


악성코드 실행 없이 코드 내부 구조와 흐름을 파악한다.
도구는 IDA와 Ghidra가 있다.


ி IDA 주요 기능


sub : 함수를 시작하는 주소
loc : 목적지로 점프하는 주소
Offset : 메모리 주소가 가리키는 곳의 메시지를 가져온다
xref(cross ref) : 특정 함수가 호출하는 또는 호출되는 부분을 표시
Space : Graph 모드 <-> Text View 모드



ி IDA 샘플 분석


Lab05-01.dll - IDA의 기능을 숙달하는 것이 목적이므로 기초 분석만 진행하겠다.



DllMain의 주소는 무엇인가?

DLLMain : DLL이 loading될 때 가장 먼저 실행되는 함수이다.
function 탭에서 DllMain을 클릭한다.
그래프 모드인 DllMain에서 스페이스바를 누르면 전체 코드가 나온다.


1000D02E

Imports 탭에서 gethostbyname이 import 되는 위치를 찾아라.


imports 탭에서 gethostbyname을 입력한다.
100163CC



gethostbyname을 호출하는 함수는 몇개 인가?



XREF에서 우측키를 누르고 jump to cross reference를 클릭하거나 Ctrl + X를 누른다.
9개



0x10001757에 위치한 gethostbyname 호출을 확인하여 어떤 DNS 요청인지 분석하라
- gethostbyname : 서버의 IP 주소 확인
- 어셈블리코드에서 G를 누르면 원하는 주소로 이동한다.



10019040의 데이터를 가져와서 0D를 더해서 eax에 저장한다.
해당 위치로 찾아간 뒤 HEX-View로 변경하면 아래와 같이 나온다.



little endian으로 정리하면 10019194로 이동하여,
이동한 값의 D byte 만큼 뒷부분의 문자를 가져오는 것이다.



따라서 gethostbyname 함수 바로 위에 name이 DNS 요청임을 확인하였다.
pics.practicalmalwareanalysis.com



0x10001656의 함수는 지역변수와 파라미터를 몇개 가지고 있는가?



지역변수는 -
파라미터는 +로 표시되므로 각각 20개, 1개이다.



검색창을 통해 \cmd.exe /c를 찾아서 무슨 루틴인지 분석하라



Text 창 옆에 문제 키워드를 입력한다.
그리고 메모리 주소에서 space를 누르고 IDA-view로 이동한다.



시스템 디렉토리(GetSystemDirectory)를 가져와서
그 값에 따라 cmd 혹은 command를 실행하는 분기점을 생성한다.
원격으로 어떤 명령을 수행하려는 것으로 추측된다.



dword_1008E5C4는 무슨 값을 설정하는지 분석하라



값을 설정하는 것이므로 type이 w인 항목을 선택한다.
해당 위치의 바로 윗부분에 10003695를 호출하는 함수가 보인다.



getversionExA를 통해 운영체제 정보를 확인하는 값임을 알 수 있다.



PSLIST가 2단계까지 호출하는 함수는 몇 개인가?



Exports는 파일이 익스포트되는 모든 함수 목록을 보여준다.
PSLIST로 이동한 후 함수의 호출, 참조 관계를 표현하기 위해
display xfer 차트를 활용한다. 



15개






반응형

'리버스-엔지니어링' 카테고리의 다른 글

SimpleBackdoor - IDA 정적 분석  (8) 2020.08.29
Lab07_01 - 악성코드 동적 분석  (0) 2020.08.29
[Reversing.kr] Music Player  (0) 2020.08.17
[Reversing.kr] Easy CrackMe  (0) 2020.08.17
[Reversing.kr] Easy Unpack  (0) 2020.08.17