2017-10-06 5 views
1

WinDbg로 AcroRd32.exe을 분석 중입니다. AcroRd32.exe에는 2 개의 프로세스가 있으며, 하나 (father-p)가 다른 프로세스 (child-p)를 시작합니다. 이 두 프로세스를 디버그하려면 .childdbg 1|1s 등의 명령을 사용합니다.다중 프로세스 디버깅을 제어하는 ​​방법

나는 child-p로 전환 한 다음 조건부 중단 점을 사용하여 kernel32.dll의 CreateFileWReadFile API를 모니터링하여 father-p로 다시 전환합니다. a.pdf을 열면 CreateFileW 만 매개 변수 "C : \ a.pdf"와 함께 호출됩니다. CreateFileW, 반환 값을 CreateFileW 가진 ReadFile에 대한 호출이 없지만 CreateFileW, 반환 값을 ReadFile 모니터링하려면 조건부 중단 점을 사용하는 기억 해요. 그런 다음 많은 g 명령을 사용하면 혼란스러운 일이 발생하여 a.pdf이 열렸습니다!

혼란 스럽습니다. ReadFile을 호출하지 않으면 PDF가 열립니다. Acrobat Reader는 어떻게 작동합니까? 나는 두 가지 가정을 가지고 있는데, 첫째는 CreateFileMapping API를 사용한다. 다른 하나 (대부분), 아이 - p는 그것을 만든다.

두 번째 가정에 대해 살펴 보겠습니다. 내가 father-p를 디버깅 할 때, child-p는 정지하지 않았습니다. 파일을 어떻게 열어 보았습니까? 와 같은 알아 내기 위해 그 사건이기 때문에

Screenshot of Rohitab API Monitor

, 그것은 또한 가능합니다

답변

1

사용 Rohitab API Monitor 나는 두 번째 인스턴스가 파일의 핸들 CreateFileW()뿐만 아니라 ReadFile()를 호출하는 것을 볼 수 WinDbg의 중단 점. 문제를 재현하기위한 정확한 단계가 없으면 Google은 잘못된 정보에 답할 수 없습니다. 브레이크 포인트 조건에서. 자식 프로세스가를 얻을 수 있지만,

  • 당신이 자식 프로세스의 상태에서 부모 프로세스의 파일 핸들을 사용하고 : 내 연습 볼 때

    , 나는 다음과 같은 잘못 될 수 있다고 생각 새로운 핸들

  • 잘못된 프로세스에서 중단 점을 설정하고 있습니다. 중단 점은 프로세스에 따라 다릅니다.
  • 다른 점은 중단 점의 조건입니다. .if 또는 j 명령을 확인하십시오.

여기 내 중단 점이 중단 점에 도달했음을 보여줍니다. 여기서 조건부 중단 점을 사용하지 않습니다.

0:000> bp kernel32!CreateFileW 
0:000> .childdbg 1 
Processes created by the current process will be debugged 
0:000> g 
[...] 
Breakpoint 0 hit 
[...] 
0:000> kb L1 
# ChildEBP RetAddr Args to Child    
00 0045f0d8 011d95b1 0023ca98 00000000 00000007 kernel32!CreateFileW 
0:000> du 0023ca98 
0023ca98 "d:\temp\a.pdf" 
0:000> gu 
0:000> r eax 
eax=000000f0 
0:000> *** Note that this is the wrong process, it's the father 
0:000> *** We should not set a breakpoint with a condition of 0xF0 as the handle 
0:000> *** Let's wait for the child process 
0:000> bd 0 
0:000> sxe cpr 
0:000> g 
[...] 
ModLoad: 011c0000 013e5000 AcroRd32.exe 
[...] 
1:009> bl 
1:009> |0s 
[...] 
0:000> bl 
    0 d Enable Clear 771a167f  0001 (0001) 0:**** kernel32!CreateFileW 
0:000> |1s 
[...] 
1:009> bl 
1:009> *** Did you note? Breakpoints are process specific 
1:009> bp kernel32!CreateFileW 
Bp expression 'kernel32!CreateFileW' could not be resolved, adding deferred bp 
1:009> g 
[...] 
ntdll!LdrpDoDebuggerBreak+0x2c: 
77850ed4 cc    int  3 
1:009> bl 
    1 e Disable Clear 771a167f  0001 (0001) 1:**** kernel32!CreateFileW 
[...] 
Breakpoint 1 hit 
[...] 
1:009> kb L1 
# ChildEBP RetAddr Args to Child    
00 002cedcc 771a775d 002cedec 002cede8 772e124c kernel32!CreateFileW 
1:009> du 002cedec 
002cedec "C:\Windows\Globalization\Sorting" 
002cee2c "\sortdefault.nls" 
1:009> *** wrong file 
1:009> g 
[...] 
Breakpoint 0 hit 
[...] 
1:009> kb L1 
# ChildEBP RetAddr Args to Child    
00 0043da18 5f9b5cf0 06a12e68 80000000 00000001 kernel32!CreateFileW 
1:009> du 06a12e68 
06a12e68 "d:\temp\a.pdf" 
1:009> gu 
[...] 
1:009> r eax 
eax=000001cc 
1:009> bp kernel32!readfile 
1:009> bl 
    0 e Disable Clear 771a167f  0001 (0001) 1:**** kernel32!CreateFileW 
    1 e Disable Clear 771a3ef1  0001 (0001) 1:**** kernel32!ReadFile 
1:009> bd 0 
1:009> g 
Breakpoint 1 hit 
[...] 
1:009> kb L1 
# ChildEBP RetAddr Args to Child    
00 0043da44 5f9b74be 000001cc 0043db64 00000008 kernel32!ReadFile 
+0

귀하의 답변으로 제 문제가 완벽하게 해결되었습니다! 초보자로서 여러 번 문제를 해결할 수 있도록 저의 밑바닥부터 감사드립니다. – xupeng

+0

@xupeng : 천만에. WinDbg는 배우기가 어렵고 지식을 공유 할 수있어 기쁩니다. –