首页
社区
课程
招聘
[求助]不使用GetProcAddr获取API地址
发表于: 2015-12-14 22:31 5913

[求助]不使用GetProcAddr获取API地址

2015-12-14 22:31
5913
以前看过一篇不使用GetProcAddr获取API地址
现在忘记了,想重新找出来,不知道谁有求分享下

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 8
活跃值: (58)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
windows写shellcode的方法
2015-12-14 23:44
0
雪    币: 730
活跃值: (3385)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
3
我只知道遍历导出表
2015-12-15 10:34
0
雪    币: 225
活跃值: (188)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
暴力特征码搜索,或者自己实现
2015-12-15 11:49
0
雪    币: 237
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
用偏移地址
2015-12-16 09:59
0
雪    币: 376
活跃值: (92)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
貌似通过PE结构寻找的
2015-12-17 15:21
0
雪    币: 8
活跃值: (58)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
FS寄存机找kernel32地址获取LoadLibrary,然后遍历对应dll的导出表
2015-12-18 15:57
0
雪    币: 57
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
http://bbs.pediy.com/showthread.php?t=204446
这个里面的代码有实现,从PEB中获取kernel32的基地址,然后解析导出表获取函数地址,相当于自己写个GetProcAddress函数
2015-12-18 16:07
0
雪    币: 376
活跃值: (92)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢
2015-12-21 09:46
0
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
FARPROC        WINAPI        AntiHookGetProcAddress(HMODULE lib,char* pszName)
{
        PIMAGE_NT_HEADERS                                nth                =        PIMAGE_NT_HEADERS(PBYTE(lib) + PIMAGE_DOS_HEADER(lib)->e_lfanew);
        PIMAGE_EXPORT_DIRECTORY                        ides        =        PIMAGE_EXPORT_DIRECTORY(PBYTE(lib)+nth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
        PIMAGE_THUNK_DATA32                ThunkOfFuncs        =        PIMAGE_THUNK_DATA32((ULONG)lib        +        ides->AddressOfFunctions);
        PIMAGE_THUNK_DATA32                ThunkOfNames        =        PIMAGE_THUNK_DATA32((ULONG)lib        +        ides->AddressOfNames);
        PIMAGE_EXPORT_ORDINAL        ThunkOfOrdinals        =        PIMAGE_EXPORT_ORDINAL((ULONG)lib+        ides->AddressOfNameOrdinals);

        //保存结果
        int                                                ThunkOfIndex        =        0;
        PIMAGE_THUNK_DATA32                ThunkOfAddress        =        NULL;

        if(sscanf(pszName,"#%d",&ThunkOfIndex)==1)
        {
                if(ThunkOfIndex>0) ThunkOfIndex--;
                goto LAB_NEXT;
        }

        // 按函数名查找函数地址
        for(unsigned i = 0; i < ides->NumberOfNames; i++)
        {
                char*        Name        =        (char*)((ULONG)lib        +        (&ThunkOfNames[i])->u1.AddressOfData);

                if(_strcmpi(Name,pszName)!=0) continue;

                ThunkOfIndex        =        (&ThunkOfOrdinals[i])->Hint;

                goto LAB_NEXT;
        }
        goto LAB_EXIT;
LAB_NEXT:
        ThunkOfAddress                                =        &ThunkOfFuncs[ThunkOfIndex];

        if(!ThunkOfAddress->u1.AddressOfData) goto LAB_EXIT;

        return (FARPROC)(ThunkOfAddress->u1.Function        +        (ULONG)lib);
LAB_EXIT:
        return NULL;
}
2015-12-21 10:56
0
游客
登录 | 注册 方可回帖
返回
//