CreateMutex
까보면 다나와~
툴 정보 및 사용법/WinDBG (12)

링크)windbg를 이용한 언패킹

https://vallejo.cc/2017/08/13/tools-for-unpacking-malware-part-1-dumping-executables-from-rwe-memory/


windbg를 이용한 언패킹 


RWE 메모리만 찾아 덤프하는 방법 괜찮은 듯.


심볼 파일 만드는 스크립트도 유용하겠네요

'툴 정보 및 사용법 > WinDBG' 카테고리의 다른 글

Symbol 안맞아서 볼 수 없을때  (0) 2014.07.18
windbg IAT 목록 가져오기  (0) 2014.06.09
bp gethostbyname  (0) 2013.07.15
windbg (호스트 win7) xp 명령어 안될때  (0) 2013.07.05
명령줄에서 심볼로드  (0) 2012.10.24
  Comments,     Trackbacks

Symbol 안맞아서 볼 수 없을때

> !peb  (import된 dll확인)

> .reload /i WS2_32.dll


이런식으로 강제로 특정 Dll을 reload 하면 볼 수 없는 함수 이름 잘 맞춰주네요. 


http://blogs.msdn.com/b/emeadaxsupport/archive/2011/04/10/setting-up-windbg-and-using-symbols.aspx

'툴 정보 및 사용법 > WinDBG' 카테고리의 다른 글

링크)windbg를 이용한 언패킹  (0) 2017.08.16
windbg IAT 목록 가져오기  (0) 2014.06.09
bp gethostbyname  (0) 2013.07.15
windbg (호스트 win7) xp 명령어 안될때  (0) 2013.07.05
명령줄에서 심볼로드  (0) 2012.10.24
  Comments,     Trackbacks

windbg IAT 목록 가져오기

커널모드에서는 lm 명령어로 로드된 프로세스의 주소를 확인하면 되고

유저모드에서는 !dh 명령어로 "Import Address Table Directory" Offset을 찾는다.



dps 명령을 통해 위에서 찾은 주소값을 입력하면 IAT 목록을 확인할 수 있다.


kd> dps 00401000

00401000  7c82134b kernel32!GetWindowsDirectoryA

00401004  7c81cafa kernel32!ExitProcess

00401008  7c8260aa kernel32!DnsApiSetDebugGlobals

0040100c  7c809bd7 kernel32!CloseHandle

00401010  7c80be46 kernel32!lstrlenA

00401014  7c810e17 kernel32!WriteFile

00401018  7c80bcf9 kernel32!SizeofResource

0040101c  7c831ca8 kernel32!SetFileTime

00401020  7c83553c kernel32!LocalFileTimeToFileTime

00401024  7c810bac kernel32!SystemTimeToFileTime

00401028  7c801a28 kernel32!CreateFileA

0040102c  7c80a045 kernel32!LoadResource

00401030  7c80bf19 kernel32!FindResourceA

00401034  7c80be91 kernel32!lstrcpyA

00401038  7c80bb31 kernel32!lstrcmpiA

0040103c  7c93fe10 ntdll!RtlRestoreLastWin32Error

00401040  7c93fe01 ntdll!RtlGetLastWin32Error

00401044  7c834d59 kernel32!lstrcatA

00401048  7c814f7a kernel32!GetSystemDirectoryA


이런식으로...


참고 -

http://tomsreversing.com/2013/03/11/viewing-imports-table/

'툴 정보 및 사용법 > WinDBG' 카테고리의 다른 글

링크)windbg를 이용한 언패킹  (0) 2017.08.16
Symbol 안맞아서 볼 수 없을때  (0) 2014.07.18
bp gethostbyname  (0) 2013.07.15
windbg (호스트 win7) xp 명령어 안될때  (0) 2013.07.05
명령줄에서 심볼로드  (0) 2012.10.24
  Comments,     Trackbacks

bp gethostbyname

>bp WS2_32!gethostbyname



  Comments,     Trackbacks

windbg (호스트 win7) xp 명령어 안될때


Win7 host 환경에서 xp 커널 디버깅을 하려 했는데 !process 명령이 안된다.


확인해보니 extension 모듈들이 로드가 안되서 명령 인식이 안되는 것이였다.


로드를 위해서는 xp extension 모듈들이 있는 경로를 명령어(.extpath)를 통해 확인한 후 path추가해서 별도로 로드(".load") 해주면 된다.

(또는 제어판에서 [시스템] - [고급 시스템 설정] - [환경 변수] - Path에 추가해도 된다)


#추가한 경로 

C:\Program Files (x86)\Windows Kits\8.0\Debuggers\x86\winxp;

C:\Program Files (x86)\Windows Kits\8.0\Debuggers\x86\winext


확인해 보면 여러 모듈들이 있다.


#ida 연결시

ida.cfg에서 다음 경로도 확인

DBGTOOLS = "C:\\Program Files (x86)\\Windows Kits\\8.0\\Debuggers\\x86"


#extension 연결 확인

.extpath+”c:\myextensions”

.chain


다음은 참고 사이트 :

http://msdn.microsoft.com/en-us/library/windows/hardware/ff551869(v=vs.85).aspx

 

---------------

 

추가

IDA에서만 xp kernel관련 extension 모듈들이 로드되지 않고 windbg에서는 잘 로드된다.

path설정이나 IDA자체 문제 때문인것 같다.

  Comments,     Trackbacks

명령줄에서 심볼로드

IDA에 Windbg로 live debugging 중인데 symbol없다.


이렇게 하자.


WINDBG> .sympath srv*d:\sym*http://msdl.microsoft.com/download/symbols


물론 .reload 해줘서 적용!

  Comments,     Trackbacks

Windbg 유용한 커널 명령어 정리

>!drvobj <드라이버 이름> //특정 드라이버 오브젝트의 포이터 주소를 이름으로 구하고자 할때 유용

ex)!drvobj atapi 3 //driver entry 및 dispatch routines 정보까지 나온다. 제일 좋음


>dt _driver_object <드라이버 오브젝트 포인터 주소> //드라이버에 대한 자세한 정보


//아래는 해당 정보도 볼 수 있다는 차원에서..

>dt _IRP

>dt _IO_STACK_LOCATION

>dt nt!SCSI_REQUEST_BLOCK //심볼이 없다..

>dt _DRIVER_OBJECT

>!irp FFBC9318 //??

>!devstack

>dt _list_entry


>x nt!KeServiceDescriptorTable //x 명령으로 N api 주소만 알고자 할 때 유용할 듯

8055c220 nt!KeServiceDescriptorTable = <no type information>



>uf nt!ZwMapViewOfSection //해당 함수의 어셈코드를 보여줌, 코드 패치되었나 확인할 때 유용

nt!ZwMapViewOfSection:

804def2c b86c000000      mov     eax,6Ch

804def31 8d542404        lea     edx,[esp+4]

...


>dds KeServiceDescriptorTable //dds 명령으로 이름을 같이 볼 수 있다.

8055c220  804e46a8 nt!KiServiceTable //N api list 포인터 주소

8055c224  00000000

8055c228  0000011c //N api list size

8055c22c  80512088 nt!KiArgumentTable

8055c230  00000000

8055c234  00000000

...


>dds 804e46a8 L11C //역시 dds 명령, L11C는 size(=>dds nt!KiServiceTable)

804e46a8  80591df5 nt!NtAcceptConnectPort

...


>lm d t //로드, 언로드된 모듈 리스트 정보


>ln CLASSPNP!ClassInternalIoControl //?

>ed 81b7dfac f99e0fc3 //메모리 변경 같음

추가..(2012-12)

>dt _object_type //


  Comments,     Trackbacks

Windbg 커널디버깅 중 특정 유저 API에 bp걸기
커널에서 유저 API bp걸기
>!process 0 0
>.process /i <process>
>.reload /user <- 유저 심볼 로드

만약 자신의 프로세스가 올라오지(실행) 않았다고 하더라고 윈도우 User API에 bp를 걸면
분석하기가 훨씬 수월하다. 하지만 커널디버깅 중에는 윈도우 User API에 bp를 걸수없기 때문에
분석이 쉽지 않은데, 다음과 같은 방법을 사용하면 가능하다.

돌아가는 임의 Process에 컨텍스트를 맞추고 User레벨 심볼을 로드한다.
이후 원하는 User API에 bp를 설정하면 문제없이 된다.


다른 더 쉬운 방법있으면 알려주시면 감사하겠습니다.(__)
  Comments,     Trackbacks

자꼬 까먹는 명령어!!!...!dh

!dh

The !dh extension displays the headers for the specified image.



WINDBG>!dh atapi

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES

14C machine (i386)

9 number of sections

4802539D time date stamp Mon Apr 14 03:40:29 2008

0 file pointer to symbol table

0 number of symbols

E0 size of optional header

10E characteristics

Executable

Line numbers stripped

Symbols stripped

32 bit word machine

OPTIONAL HEADER VALUES

10B magic #

7.10 linker version

14B80 size of code

2A00 size of initialized data

0 size of uninitialized data

159F7 address of entry point

380 base of code

----- new -----

80766000 image base

80 section alignment

80 file alignment

1 subsystem (Native)

5.01 operating system version

5.01 image version

5.01 subsystem version

17900 size of image

380 size of headers

1CD25 checksum

00040000 size of stack reserve

00001000 size of stack commit

00100000 size of heap reserve

00001000 size of heap commit

0 DLL characteristics

0 [ 0] address [size] of Export Directory

15A40 [ 50] address [size] of Import Directory

16780 [ 3E0] address [size] of Resource Directory

0 [ 0] address [size] of Exception Directory

0 [ 0] address [size] of Security Directory

16B80 [ C24] address [size] of Base Relocation Directory

B680 [ 1C] address [size] of Debug Directory

0 [ 0] address [size] of Description Directory

0 [ 0] address [size] of Special Directory

0 [ 0] address [size] of Thread Storage Directory

BE68 [ 40] address [size] of Load Configuration Directory

0 [ 0] address [size] of Bound Import Directory

B480 [ 1F4] address [size] of Import Address Table Directory

0 [ 0] address [size] of Delay Import Directory

0 [ 0] address [size] of COR20 Header Directory

0 [ 0] address [size] of Reserved Directory

SECTION HEADER #1

.text name

97BA virtual size

380 virtual address

9800 size of raw data

380 file pointer to raw data

0 file pointer to relocation table

0 file pointer to line numbers

0 number of relocations

0 number of line numbers

68000020 flags

Code

Not Paged

(no align specified)

Execute Read

.....

  Comments,     Trackbacks

원하는 DeviceFunction에 브레이크 걸기.


1. Prepare kernel debug using Windbg tool
2. menu - Debug - Event Filters.. -> Set the Load Module to 'enabled - not handle'
3. excute app
4. kd> kb -> check 4rd address from 'nt!DbgLoadImageSysbols 0x42' (It is 'ImageBase')
5. kd> !dh '4rd address('ImageBase')' -> check address of entry point
6. kd> u 'ImageBase' + 'entry point' -> bp 'DeviceControl address'

DeviceControl(MajorFunction[14]) 주소에 bp를 걸고 유저가 호출하는 코드를 따라간다.


  Comments,     Trackbacks