API 调用过程
以一个demo测试为例,本测试查看OpenProcess
在R3-R0
下的调用。
// test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
// __asm int 3
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS,FALSE,2548);
printf("handle=%08x",handle);
return 0;
}
RING3
载入OD具体分析调用。
ring3 application space
00401028 |. 8BF4 mov esi, esp
0040102A |. 68 F4090000 push 0x9F4 ; /ProcessId = 9F4
0040102F |. 6A 00 push 0x0 ; |Inheritable = FALSE
00401031 |. 68 FF0F1F00 push 0x1F0FFF ; |Access = PROCESS_ALL_ACCESS
00401036 |. FF15 4CA14200 call dword ptr ds:[<&KERNEL32.OpenProcess>] ; \OpenProcess
此时由测试进程模块 进入到kernel32
模块
--kernel32.dll (OpenProcess)
7C830A0B 8975 E8 mov dword ptr ss:[ebp-0x18], esi
7C830A0E 8975 F0 mov dword ptr ss:[ebp-0x10], esi
7C830A11 8975 F4 mov dword ptr ss:[ebp-0xC], esi
7C830A14 FF15 1C11807C call dword ptr ds:[<&ntdll.NtOpenProcess>]; ntdll.ZwOpenProcess
----ntdll.dll(NtOpenProcess (or ZWOpenProcess))
7C92D5E0 > B8 7A000000 mov eax, 0x7A
7C92D5E5 BA 0003FE7F mov edx, 0x7FFE0300
7C92D5EA FF12 call dword ptr ds:[edx] ; ntdll.KiFastSystemCall
7C92E4F0 > 8BD4 mov edx, esp
7C92E4F2 0F34 sysenter ; ring3->ring0
7C92E4F4 > C3 retn
在R3下的函数调用过程:本地模块->kernel32(openprocess)->ntdll(zwOpenProcess)->ntdll(sysenter)
。
ring3级别的函数调用栈回朔
地址 堆栈 函数过程 / 参数 调用来自 结构
........ ........ sysenter ntdll.KiFastSystemCall+0xC(7C92E4F2) ...
0012FEE0 7C92D5EC 包含ntdll.KiFastSystemCall ntdll.7C92D5EA 0012FF1C
0012FEE4 7C830A1A ntdll.ZwOpenProcess kernel32.7C830A14 0012FF1C
0012FF20 0040103C kernel32.OpenProcess test.00401036 0012FF1C
0012FF24 001F0FFF Access = PROCESS_ALL_ACCESS
0012FF28 00000000 Inheritable = FALSE
0012FF2C 000009F4 ProcessId = 9F4
0012FF84 00401239 test.00401005 test.<模块入口点>+0E4 0012FF80
也可以用windbg
去查看,更简单,但是调试就不能是local kernel
模式了,往windbg
中拖拽一个可执行文件后,查看结构
0:000> u kernel32!openprocess l30 //l30表示取30条指令,只求多,不求少
kernel32!OpenProcess:
7c8309d1 8bff mov edi,edi
7c8309d3 55 push ebp
7c8309d4 8bec mov ebp,esp
7c8309d6 83ec20 sub esp,20h
7c8309d9 8b4510 mov eax,dword ptr [ebp+10h]
7c8309dc 8945f8 mov dword ptr [ebp-8],eax
7c8309df 8b450c <