2017-12-03 9 views
1

연구를 위해 Windows 시스템 호출에서 특정 패턴을 찾으려고합니다.Windows 시스템 호출 어셈블리를 정적으로 얻는 방법?

지금까지 나는 ntdll.dll, user32.dll 등의 Windows DLL을 조사했지만 시스템 호출로 바로 이동할 준비를위한 래퍼 코드 만 포함 된 것 같습니다. 예를 들어 :

mov  eax, 101Eh 
lea  edx, [esp+arg_0] 
mov  ecx, 0 
call large dword ptr fs:0C0h 
retn 10h 

나는 call large dword ptr fs:0C0h 명령을 추측하고있어 결국 실제 어셈블리에 이르는 체인의 다른 게이트웨이,하지만 내가 직접 그 어셈블리에 얻을 수 있는지 궁금 해서요.

+0

디버거를 사용하여'fs : 0ch'에 무엇이 있는지 확인한 다음 그 기능을 분해하려고 시도 했습니까? – fuz

+3

이것은 와우 프로세스입니다 (64 비트 창 사용). 이 코드는 x64 게이트에 입력합니다. WinDbg에서이 말을 할 수 있습니다. 다른 쪽 - 이미 64 비트 코드 -'CpupReturnFromSimulatedCode'. 예를 들어 읽을 수 있습니다 - http://waleedassar.blogspot.com/2012/07/wow64-user-mode-system-calls-hooking.html – RbMm

+0

@RbMm 정말 고맙습니다! – Noamiko

답변

3

잘못 찾고 있습니다. dll s입니다. 시스템 호출은 ntoskrnl.exe입니다. 당신이 ntoskrnl.exeNtOpenFile() 보면

당신은 볼 수 있습니다 : 함수의 진정한 몸

mov  r11, rsp 
sub  rsp, 88h 
mov  eax, [rsp+88h+arg_28] 
xor  r10d, r10d 
mov  [r11-10h], r10 
mov  [rsp+88h+var_18], 20h ; int 
mov  [r11-20h], r10d 
mov  [r11-28h], r10 
mov  [r11-30h], r10d 
mov  [r11-38h], r10d 
mov  [r11-40h], r10 
mov  [rsp+88h+var_48], eax ; int 
mov  eax, [rsp+88h+arg_20] 
mov  [rsp+88h+var_50], 1 ; int 
mov  [rsp+88h+var_58], eax ; int 
mov  [r11-60h], r10d 
mov  [r11-68h], r10 
call IopCreateFile 
add  rsp, 88h 
retn 

합니다. 대부분의 작업은 IopCreateFile()에서 이루어 지지만 정적으로 수행하고 필요한 분석을 수행 할 수 있습니다.

+2

대부분의 I/O 관리자 작업은 ['IoCreateFile'] (https://msdn.microsoft.com/en-us/library/ff548418)에 있지만, 장치 또는 파일을 만들거나 여는 작업은 대부분 장치 스택에있는 드라이버 및 필터 드라이버의 ['IRP_MJ_CREATE'] (https://msdn.microsoft.com/en-us/library/ff548630) 루틴에 나와 있습니다. 그러나 이것은 OP의 연구와 관련이 없을 수 있습니다. – eryksun