DebugPort 호출 함수 찾기
그런 다음 Windbg이 열리고 Serial 포트를 통해 가상 시스템이 연결됩니다.
lkd->!process 0 0 LoadSys.exe
LoadSys 가져오기exe의 EPROCESS 주소는 입니다.0x87654321
lkd->ba r4 0x87654321+0xec(WIN7에서 DebugPort를 0xec로 오프셋하면 lkd->dt nt! eprocess를 통해 볼 수 있습니다.)
방문 단점.그리고 가상 머신에 들어가서 OD를 켜세요.추가 LoadSys.exe..이때 가상 머신이 끊어진다.어떤 함수를 호출했는지 봅시다.
코드:
: nt!DbgkCreateThread+0x22a: 856ab86a 399eec000000 cmp dword ptr [esi+0ECh],ebx nt!PsGetProcessDebugPort+0x8: 85514130 8b80ec000000 mov eax,dword ptr [eax+0ECh] nt!DbgkpSetProcessDebugObject+0x8d: 856f7959 83beec00000000 cmp dword ptr [esi+0ECh],0 nt!DbgkpSetProcessDebugObject+0x9d: 856f7969 89beec000000 mov dword ptr [esi+0ECh],edi nt!DbgkpMarkProcessPeb+0x85: 856f6e90 3987ec000000 cmp dword ptr [edi+0ECh],eax nt!DbgkpQueueMessage+0xad: 856f74a7 8b80ec000000 mov eax,dword ptr [eax+0ECh] nt!KiDispatchException+0x1d8: 8550539f 39b0ec000000 cmp dword ptr [eax+0ECh],esi nt!DbgkForwardException+0x49: 8565deac 8b98ec000000 mov ebx,dword ptr [eax+0ECh] nt!PspExitThread+0x2ad: 8569094c 83bfec00000000 cmp dword ptr [edi+0ECh],0 nt!DbgkExitThread+0x28: 856f8cf1 83b9ec00000000 cmp dword ptr [ecx+0ECh],0 nt!PspTerminateAllThreads+0x1dd: 856a7ff4 83bfec00000000 cmp dword ptr [edi+0ECh],0 nt!DbgkExitProcess+0x28: 856f8d63 83b9ec00000000 cmp dword ptr [ecx+0ECh],0 nt!DbgkpCloseObject+0xd6: 856f707f 3998ec000000 cmp dword ptr [eax+0ECh],ebx nt!DbgkpCloseObject+0x119: 856f70c2 3998ec000000 cmp dword ptr [eax+0ECh],ebx nt!DbgkpCloseObject+0x121: 856f70ca 83a0ec00000000 and dword ptr [eax+0ECh],0
이상은 독단점 부분입니다.
함수 + 오프셋을 기록하고 가상 머신에 들어가고 OD 및 LoadSys를 종료합니다.exe...
LoadSys를 다시 엽니다.exe
그리고 다시 Windbg.
lkd->!process 0 0 LoadSys.exe
LoadSys를 다시 가져옵니다.exe의 EPROCESS 주소(예: 0x88776655)
lkd->ba w4 0x88776655+0xec
LoadSys에exe의 DebugPort에서 인터럽트 쓰기
가상 머신 재접속, OD 켜기, LoadSys 추가exe..그리고 끊어질 거야...
코드:
: nt!DbgkpSetProcessDebugObject+0xa3 // nt!DbgkClearProcessDebugObject+0x41: 856d3e84 05ec000000 add eax,0ECh nt!DbgkpCloseObject+0x128 ////
WIN7에서 디버그 포트에 쓰기 위한 커널 관련 함수를 찾았습니다.
==========================================================
그러나 이때의 함수는 완전하지 않다. 예를 들어 마지막 훅이라는 함수를 디버깅한 후에 종료할 때 오류가 발생한다.
이 때 디버그를 종료할 때 debugport를 검사하고 인터넷에 있는 기존 XP 코드의 debugport 관련 함수에 대한 컴파일링을 다음과 같은 코드로 보냅니다.
nt!PspProcessDelete+0xbc: 840aa771 8db7ec000000 lea esi,[edi+0ECh] nt!DbgkCopyProcessDebugPort+0xf: 84089865 83a0ec00000000 and dword ptr [eax+0ECh],0 nt!DbgkCopyProcessDebugPort+0x1e: 84089874 8b7d0c mov edi,dword ptr [ebp+0Ch] nt!DbgkCopyProcessDebugPort+0x5e: 840898b4 8bbfec000000 mov edi,dword ptr [edi+0ECh] nt!DbgkOpenProcessDebugPort+0x16: 840e4c5e 399fec000000 cmp dword ptr [edi+0ECh],ebx nt!DbgkOpenProcessDebugPort+0x54: 840e4c9c 8bbfec000000 mov edi,dword ptr [edi+0ECh] nt!ObpCloseHandle+0xd1: 8407c13e 3988ec000000 cmp dword ptr [eax+0ECh],ecx nt!ObpCloseHandleTableEntry+0x181: 8407c326 83b8ec00000000 cmp dword ptr [eax+0ECh],0 nt!PsIsProcessBeingDebugged+0x8: 84113a11 83b8ec00000000 cmp dword ptr [eax+0ECh],0 nt!NtQueryInformationProcess+0x91d: 8406f00c 8b81ec000000 mov eax,dword ptr [ecx+0ECh]
완전한 여부에 대해 이 검증 방법은 HOOK 이후 디버깅을 할 때만 발견할 수 있고 오류가 발견되면 debugport를 다시 감시하고 창고 추적을 통해 누락된 함수를 발견할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.