안녕하세요. Message입니다.
<실전 악성코드와 멀웨어 분석> 책의 실습 문제 5-1을 분석합니다.
분석환경은 Windows 7 Ultimate 64x / Vmwre 12.1.0 build 입니다.
#1 : http://redscreen.tistory.com/66
#2 : http://redscreen.tistory.com/67
#3 : http://redscreen.tistory.com/68
#4 : http://redscreen.tistory.com/71
------------------------------------------------------------------------------------------------------------------------------------------
0. 준비
------------------------------------------------------------------------------------------------------------------------------------------
OllyDbg쓰다가 IDA쓰다가 이클립스로 개발하다가...보면 가장 혼동되는게 단축키입니다.
원래는 그때마다 검색해서 다시 감잡은 다음에 작업에 들어갔는데,
이참에 IDA에서 자주 쓰는 단축키만 정리하겠습니다.
일반
---------------------------------------------------------
- TextView와 Graph 화면전환 : SPACE ★★★
- Strings Window : Shitft+F12
- 함수이동 : Ctrl+p ★
- 이름검색 : Ctrl+L
- XREF 검색 : Ctrl+X ★★★
- 주소이동 : g ★
- 전단계 이동 : ESC
- 코드수정 : Alt+F2
- Text 검색 : Alt+t
- Quick View : Ctrl+1 ★★★
---------------------------------------------------------
디버그
--------------------------------
- BreakPoint : F2
- Debugging Start : F9
- Debugging Exit : Ctrl+F2
- Step Into : F7
- Step Over : F8
--------------------------------
그래프모드 화살표 색상
---------------------------
------▶ False
------▶ True
------▶ 무조건 Jump
---------------------------
------------------------------------------------------------------------------------------------------------------------------------------
1. DllMain의 주소는 무엇인가?
------------------------------------------------------------------------------------------------------------------------------------------
Function Name Window에서 DllMain을 찾습니다.
처음에는 DllEntryPoint로 착각했지만, DllMain이 따로 있었습니다.
둘의 차이점을 검색해보았으나, 명확하게 딱 이거다 라고 되어 있는걸 못찾았습니다.
스페이스키를 누르고 그래프를 살펴보았더니 DllEntryPoint가 먼저 호출되고 난 이후에
자신이 받은 인자값을 그대로 넣어주면서 DllMain을 호출하더군요.
답 : text 섹션 / 0x1000D02E
Tip. main에 관하여
RedAlert 에서 배포된 PE구조 문서를 보니
일반적으로 EntryPoint는 main, wmain, WinMain, wWinMain 으로 착각하기 쉽지만 (처음보는 함수도 많네요)
진정한 main은 CRT main이라고 합니다. CRT main은 C/C++ run-time startup 코드라고 불리는 함수가 따로 존재하는데,
이는 Linker에 의해 실행파일이 생성될 때 합쳐치며, main 함수도 CRT main에 의해서 호출되는 함수입니다.
CTR main은 Command-Line argument와 환경변수를 채우고,
heap 초기화, 전역변수 객체 생성자 호출, 전역변수 초기화 등을 수행합니다.
종류는 mainCRTStartup, wmainCRTStartup, WinMainCRTStartup wWinMainCRTStartup 등등..
이부분은 따로 숙지할 필요가 있겠네요.
------------------------------------------------------------------------------------------------------------------------------------------
2. Imports 윈도우를 이용해 gethostbyname을 탐색해보자. 임포트 위치는 어디인가?
------------------------------------------------------------------------------------------------------------------------------------------
Import Window에서 getbyhostname을 찾습니다.
윈도우에 포커스를 두고, gethostbyname을 타자치면 검색 기능이 활성화되어 쉽게 찾을 수 있습니다.
gethostbyname을 더블클릭하면 디스어셈블리창으로 이동되며, 주소값을 알아낼 수 있습니다.
답 : idata 섹션 / 0x100163CC
------------------------------------------------------------------------------------------------------------------------------------------
3. gethostbyname 함수는 몇번 호출되는기?
------------------------------------------------------------------------------------------------------------------------------------------
디스어셈블리창에서 Ctrl+X 를 입력하면 xref로 표기되는 상호참조 리스트 윈도우가 호출됩니다.
type은 호출(p)과 읽기(r)로 표시됩니다.
sub_10001074, sub_10001365, sub_10001656, sub_1000208F, sub_10002CCE 등 5개의
서로다른 함수에서 9번 호출됨을 알 수 있습니다.
답 : 5개의 함수에서 9번 호출
------------------------------------------------------------------------------------------------------------------------------------------
4. 0x10001757에 위치한 gethostbyname 호출을 보면 어떤 DNS 요청이 이뤄지는지 알 수 있는가?
------------------------------------------------------------------------------------------------------------------------------------------
.gethostbyname 함수는 도메인이름ex) www.daum.net 하나를 파라미터로 받는 함수입니다
상호참조 리스트에서 P type의 메소드를 클릭하여 확인하면
EAX 레지스터를 이용하여 도메인 네임 인자를 받는 어셈블리코드를 볼 수 있습니다.
off_10019040 주소를 더블클릭하거나 G 기능을 이용하여 주소로 점프하면
아래와 같이 "[This is RDO]pics.practicalmalware...(생략)" 소스를 발견할 수 있습니다.
EAX 레지스터에 0Dh 주소값을 더하는 이유는
문자열의 [This is RDO] 값을 제외하고 "pics..." 부분을 포인터로 얻기 위함입니다.
답 : pics.practicalmalwareanalysis.com
------------------------------------------------------------------------------------------------------------------------------------------
5. 0x10001656 서브루틴에서 IDA Pro는 지역변수 몇개를 인지하고 있는가?
6. 0x10001656 서브루틴에서 IDA Pro는 파라미터 몇개를 인지하고 있는가?
------------------------------------------------------------------------------------------------------------------------------------------
스페이스바를 이용하여 그래프모드로 전환후 0x10001656으로 가거나
G단축키를 이용하여 0x10001656으로 이동하면
아래와 같은 그림에서 지역변수와 파라미터의 개수를 확인할 수 있습니다.
답 : 지역변수 23개, 파라미터 1개 (arg_0= dword ptr 4)
':: 문제풀이 > Pracical Malware' 카테고리의 다른 글
Red_Message :: 실전 악성코드와 멀웨어 분석 실습 5-1 분석 #3 (0) | 2016.04.20 |
---|---|
Red_Message :: 실전 악성코드와 멀웨어 분석 실습 5-1 분석 #2 (1) | 2016.04.19 |
Red_Message :: 실전 악성코드와 멀웨어 분석 실습 3-4 분석 (0) | 2016.03.23 |
Red_Message :: 실전 악성코드와 멀웨어 분석 실습 3-3 분석 (0) | 2016.03.20 |
Red_Message :: 실전 악성코드와 멀웨어 분석 실습 3-2 분석 (0) | 2014.02.05 |