阅读:1396回复:7
softice是如何定位API函数在内存中的位置? |
|
最新喜欢:![]() |
沙发#
发布于:2002-04-17 17:07
不同的windows版本有不同的方法
|
|
板凳#
发布于:2002-04-17 19:40
If u means user mode APIs.
I think to get PE entrypoint and find export table. |
|
|
地板#
发布于:2002-04-17 20:00
If u means user mode APIs.faint! Code entry point和import table and export table不是一回事! |
|
|
地下室#
发布于:2002-04-18 08:34
我知道在winNT和win9X的内存管理不一样,在win9X里,softice怎么定位API函数的位置,比如说MessageBoxA吧,大家都知道它在user32.dll中,如果根据PE格式找它的地址,但softice是如何获得user32.dll的PE头的位置,有人介绍过从0X80000000搜索所有的2G内存,找出所有PE头,但这2G内存并不是都有效,这有如何处理呢?在ICH病毒里好象用了这个技术,但我没大看明白,那位大哥弄懂了给小弟说说?
|
|
5楼#
发布于:2002-04-18 10:59
[quote]faint! Code entry point和import table and export table不是一回事! [/quote] sorry, PE Header. I think API:GetModuleHandle to get module table. |
|
|
6楼#
发布于:2002-04-18 12:51
给你Copy一小段代码,它枚举模块,找出ntoskrnl.exe的地址后,在PE头中找出我想要的函数:
PVOID FindNtoskrnl() { ULONG n; ZwQuerySystemInformation(SystemModuleInformation,&n,0,&n); PULONG q =PULONG(ExAllocatePool(PagedPool,n)); ZwQuerySystemInformation(SystemModuleInformation,q,n *sizeof *q,0); PSYSTEM_MODULE_INFORMATION p=PSYSTEM_MODULE_INFORMATION(q +1); PVOID ntoskrnl=0; for (ULONG i =0;i <*q;i++) if (_stricmp(p.ImageName +p.ModuleNameOffset,\"ntoskrnl.exe\")==0) ntoskrnl =p .Base; ExFreePool(q); return ntoskrnl; } PVOID FindFunc(PVOID Base,PCSTR Name) { PIMAGE_DOS_HEADER dos =PIMAGE_DOS_HEADER(Base); PIMAGE_NT_HEADERS nt =PIMAGE_NT_HEADERS(PCHAR(Base)+dos->e_lfanew); PIMAGE_DATA_DIRECTORY expdir=nt->OptionalHeader.DataDirectory +IMAGE_DIRECTORY_ENTRY_EXPORT; ULONG size =expdir->Size; ULONG addr =expdir->VirtualAddress; PIMAGE_EXPORT_DIRECTORY exports=PIMAGE_EXPORT_DIRECTORY(PCHAR(Base)+addr); PULONG functions =PULONG(PCHAR(Base)+exports->AddressOfFunctions); PSHORT ordinals =PSHORT(PCHAR(Base)+exports->AddressOfNameOrdinals); PULONG names =PULONG(PCHAR(Base)+exports->AddressOfNames); PVOID func =0; for (ULONG i =0;i< exports->NumberOfNames;i++){ ULONG ord =ordinals [i ]; if (functions[ord]<addr || functions[ord] >=addr +size){ if (strcmp(PSTR(PCHAR(Base)+names),Name)==0) func =PCHAR(Base)+functions[ord]; } } return func; } |
|
7楼#
发布于:2002-04-18 15:28
偶想咳能是通过PE节吧!
|
|
|