首页
社区
课程
招聘
[旧帖] DLL加载器自实现 0.00雪花
发表于: 2011-6-30 16:09 1889

[旧帖] DLL加载器自实现 0.00雪花

2011-6-30 16:09
1889
自己整了个DLL加载代码,映射节区-〉导入表处理-〉重定位处理
然后获得被加载DLL的入口函数fun = xxxx->AddressOfEntry + ImageBase

fun(ImageBase,DLL_PROCESS_ATTACH,0);

在调用入口函数的时候出现 Privileage Instruction (0xC0000096)错误,跟踪发现是入口的运行时初始化代码 _CRT_INIT->HeapAlloc()里面出现异常。

百思不得其解。。。大伙知道原因么。(导入表,重定位处理100%没问题)

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

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
2
呵呵,你把问题想得太简单了。。。。。。加载一个PE要处理的东西远远比处理节区映射,输入表,重定位多的多。比如在执行入口点代码前,PEB结构的准备等等。PE的加载是ring0和ring3配合共同完成的。好多实现细节是操作系统代码处理的。原理虽然简单,但实现起来没那么容易。记得有人逆向过CreateProcess函数的全过程,你可以搜索查看一下,但愿对你的思路有所帮助。
2011-6-30 18:24
0
雪    币: 143
活跃值: (61)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
改flanew的值,指向运行文件的pe头
2011-6-30 20:24
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
你是说在 调用DLL入口点之前      导入表/重定位表处理之后  改吗?
2011-7-1 09:45
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我试了,不行.................................
2011-7-1 15:40
0
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
看看这个,有人做过。http://bbs.pediy.com/showthread.php?p=976225#post976225
2011-7-2 13:31
0
雪    币: 143
活跃值: (61)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
7
那我就不知道了…
我自己写个,只弹MessageBox 的,运行得了就不试其它东西了…
2011-7-2 14:54
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
8
参考一下这里:
http://bbs.pediy.com/showthread.php?t=75365
想自己实现一个Loadlibrary,请教
2011-7-2 15:04
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
多谢大家,我比较了下自己的实现与 windows loadlibrary的区别,就差一个 TLS的初始化,但tls初始化怎么会影响到 HeapAlloc函数,我在 调用入口之前 调用HeapAlloc是没问题的,但一进入口,在里面 call _Security_cookie  然后就是call CRT_INIT->call GetProcessHeap ->Call HeapAlloc就出错了
2011-7-2 15:38
0
游客
登录 | 注册 方可回帖
返回
//