首页
社区
课程
招聘
关于把EXE文件作DLL加载!
发表于: 2006-10-23 21:16 11178

关于把EXE文件作DLL加载!

2006-10-23 21:16
11178
把ollydbg.exe作为DLL加载并不奇怪,ollydbg.exe本来就可以作DLL,所有的ollydbg插件都是把它作DLL加载的。有些人把olldbg.exe改为其它文件名,但是仍然必须保留ollydbg.exe本身,否则大部分插件就不能正常工作。所以利用枚举进程模块,不管你怎么修改ollydbg.exe文件名,仍然能在模块中找到ollydbg.exe.
如果能把任意EXE文件作DLL加载,那才值得称道!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (36)
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
2
需要重定位
2006-10-23 21:18
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最初由 gkend 发布
把ollydbg.exe作为DLL加载并不奇怪,ollydbg.exe本来就可以作DLL,所有的ollydbg插件都是把它作DLL加载的。有些人把olldbg.exe改为其它文件名,但是仍然必须保留ollydbg.exe本身,否则大部分插件就不能正常工作。所以利用枚举进程模块,不管你怎么修改ollydbg.exe文件名,仍然能在模块中找到ollydbg.exe.
如果能把任意EXE文件作DLL加载,那才值得称道!


还是有点东西的,自己研究就知道了,做成通用的有见过的,不过那个等于没有什么意义了,是替换原有进程景象,相当于原来的进程内容被抹掉,意义就不大了。
2006-10-23 21:42
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
4
exe 是可以有重定位表的
2006-10-23 21:45
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
5
gkend不是鸡蛋的马甲?
2006-10-23 22:26
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
EXE作为DLL加载大致流程:
push xxxxx  //指向EXE文件名
call LoadLibraryA
mov esi,eax
or eax,eax
jnz @f
jmp ExitThread
@@:
mov ebx,[esi+03ch]
add ebx,eax
mov ecx,[ebx+28h]   //EP
add eax,ecx         //EP+基址
mov edx,[ebx+34h]   //imagebase
mov edi,[ebx+0a0h]   //relocation table address
add edi,esi
mov ecx,[ebx+0a4h]   //size
处理重定位:
pushad
@@:
mov ebx,[edi]
mov eax,[edi+4]
add ebx,esi
add eax,edi
add edi,8
rep1:
xor ecx,ecx
mov cx,[edi]
mov bp,cx
add edi,2
and cx,0fffh
and bp,0f000h
cmp bp,03000h
jnz rep2
add ecx,ebx
mov ebp,[ecx]
sub ebp,edx
add ebp,esi
mov [ecx],ebp
rep2:
cmp edi,eax
jb rep1
cmp dword ptr [edi],0
jnz @b

popad
//此处可以加入你要patch的地址和代码,如ExitProcess,GetModuleHandle修补代码
...
jmp eax    //到EP执行,eax等于EP
2006-10-24 00:17
0
雪    币: 254
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
7
没测试过的代码吧
2006-10-24 09:07
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
哎,不就是想PK飞狐吗
2006-10-24 09:28
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
最初由 gkend 发布
EXE作为DLL加载大致流程:
push xxxxx //指向EXE文件名
call LoadLibraryA
mov esi,eax
or eax,eax
........


最好是做个成品,我开始思路跟这个差不多。
2006-10-24 09:31
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
前面一位说需要处理重定位,我只发了重定位处理代码。注意:重定位处理前,还要修改所有区段属性为可写否则写入时会异常。
当然还要处理Import Table,最后才能jmp EP.
2006-10-24 12:40
0
雪    币: 303
活跃值: (466)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
强烈要求大虾gkend弄个成品使用
2006-10-24 12:56
0
雪    币: 1241
活跃值: (160)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
如果仅仅是想实现把一个EXE当DLL来加载,你所要做的工作仅仅是判断这是否是一个“合乎标准”的EXE文件就行。
至于加载Reloc/Import/..等等这些工作本身就是系统的任务,你没必要代劳。而且系统会自己做得很好。这和“壳”
不太一样。

如果你想实现模拟这个加载过程,也就是说,想把EXE当数据放入内存并模拟其加载过程,并让他能够象独立运行时
一样的结果,则要麻烦的多。而且如果想做得比较完善,那么要考虑的问题还不少。

除了要模拟系统所做的加载Reloc/Import/Tls/DelayImport等等工作之外,可能你还需要Hook一些API,达到模拟出
一个与EXE真正运行时一模一样的“进程环境”。

比如Hook象OpenProcess/WriteProcessMemory/ReadProcessMemory这些API,一旦进程想打开自身,想修改自身某处
代码时,你必须让他去修改EXE数据空间的内容,而不是去修改模拟环境的某段代码。因为你现在模拟加载时,EXE
是没有独立的进程空间的,它只是占有一段数据空间,其进程空间是与模拟环境自身共用一个进程环境的。

还有更麻烦的问题,比如比如GetModuleHandle(NULL)时,正常情况下应该返回一个“句柄”,但同时这个“句柄”
也可以作为进程首地址使用,这种双重作为导致即使Hook了这个API,处理起来也麻烦,而且可能还需要再HOOK
一堆与此问题相关的API。
2006-10-24 21:03
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
最初由 ljtt 发布
如果仅仅是想实现把一个EXE当DLL来加载,你所要做的工作仅仅是判断这是否是一个“合乎标准”的EXE文件就行。
至于加载Reloc/Import/..等等这些工作本身就是系统的任务,你没必要代劳。而且系统会自己做得很好。这和“壳”
不太一样。

如果你想实现模拟这个加载过程,也就是说,想把EXE当数据放入内存并模拟其加载过程,并让他能够象独立运行时
........

我不知道你用的是什么系统?win2k.sp4用LoadLibraryA加载后,根本就不处理重定位和引入表,必须自己处理重定位和引入表。
所以shoooo提供的方法有局限性(他本人却不知道有的win系统不能用,难怪代码那么简单),他提供的源代码根本就没有处理重定位和引入表,所以你没有看见很多人非法操作?
2006-10-24 21:24
0
雪    币: 1241
活跃值: (160)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
我用的是XP,你说的情况不知道LoadLibraryA返回的结果如何?如果结果失败没有处理重定位表和引入表很正常,如果结果成功,也没有处理这些则不太正常,即使EXE当DLL加载,也有处理这些的可能。要不你发个这样的程序给我看看,我看看是否我的系统上也是这种情况。

mailto: ljtt@yeah.net
2006-10-24 22:02
0
雪    币: 254
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
15
shoooo的ollydbg.exe是修改过的了,已经是dll属性了,自然可以直接LoadLibraryA成功,并由系统自动处理重定位表和引入表
一个普通exe未经任何处理直接LoadLibraryA,当然需要一些额外工作了
2006-10-24 23:15
0
雪    币: 214
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
没看到exe当dll加载有什么价值
2006-10-25 00:00
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
最初由 heXer 发布
shoooo的ollydbg.exe是修改过的了,已经是dll属性了,自然可以直接LoadLibraryA成功,并由系统自动处理重定位表和引入表
一个普通exe未经任何处理直接LoadLibraryA,当然需要一些额外工作了

看shoooo那个贴并没有发现它的ollydbg.exe修改过?他只提供了一个加载器yezhu.exe及其源代码,只说把yezhu.exe放到ollydbg.exe同一目录,而且加载后简单地add eax,1000然后jmp eax,其他什么都没做。
XP系统把EXE用LoadLibraryA加载后,系统的确能自动处理重定位表和引入表。LJTT所言。但是win2k用LoadLibraryA加载后还需自己写代码处理重定位表和引入表。我已经用ASM实现了EXE作DLL加载并正常运行。前面已贴了部分代码再加入引入表处理基本可以运行。要运行得好还必须hook部分API,如:GetCommandLine,GetModuleHandle,ExitProcess等
2006-10-25 08:12
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
最初由 gkend 发布
看shoooo那个贴并没有发现它的ollydbg.exe修改过?他只提供了一个加载器yezhu.exe及其源代码,只说把yezhu.exe放到ollydbg.exe同一目录,而且加载后简单地add eax,1000然后jmp eax,其他什么都没做。
XP系统把EXE用LoadLibraryA加载后,系统的确能自动处理重定位表和引入表。LJTT所言。但是win2k用LoadLibraryA加载后还需自己写代码处理重定位表和引入表。我已经用ASM实现了EXE作DLL加载并正常运行。前面已贴了部分代码再加入引入表处理基本可以运行。要运行得好还必须hook部分API,如:GetCommandLine,GetModuleHandle,ExitProcess等

把哪个ollydbg.exe双击一下就知道改没改了。
2006-10-25 08:21
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
最初由 q3 watcher 发布
把哪个ollydbg.exe双击一下就知道改没改了。

他提供了吗?怎么没看到说明?
2006-10-25 08:29
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
所以说gkend是个断章取义,自以为是,无理取闹的小人
因为他不把别人的贴子看清楚,看完整就开始发表歪理邪说
2006-10-25 08:51
0
雪    币: 254
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
21
一楼下载yezhu
二楼下载liliang
2006-10-25 08:52
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
22
稍微?一下大呢,根本不用考?重定位
2006-10-25 09:25
0
雪    币: 254
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
23
最初由 nbw 发布
稍微?一下大呢,根本不用考?重定位


这个貌似有点深,找不到大脑了怎么办
2006-10-25 09:54
0
雪    币: 11705
活跃值: (975)
能力值: ( LV12,RANK:779 )
在线值:
发帖
回帖
粉丝
24
不明白,请牛详细说明一下。

最初由 nbw 发布
稍微?一下大呢,根本不用考?重定位
2006-10-25 10:24
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
最初由 heXer 发布
这个貌似有点深,找不到大脑了怎么办

可以注入一个.
2006-10-25 11:30
0
游客
登录 | 注册 方可回帖
返回
//