首页
社区
课程
招聘
改 dll文件引起的问题
发表于: 2005-5-14 14:42 5389

改 dll文件引起的问题

2005-5-14 14:42
5389
在一个文件中,主程序调用RYDLL32.dll文件,我在OD中将dll文件修改后,文件大小不变,指令也无误,保存后,再次调试主程序,加载此动态库时出错,为什么?请高手指点一二:
00424517  FF15 E4604400  call dword ptr ds:[4460E4]   ;Rydll32.Rockey
F7进入后代码:{     00BD1270 R>    81EC 7C020000     sub esp,27C
00BD1276       A1 8C80BD00       mov eax,dword ptr ds:[BD808C]
00BD127B       8B0D 9080BD00     mov ecx,dword ptr ds:[BD8090]
00BD1281       8A15 9480BD00     mov dl,byte ptr ds:[BD8094]
00BD1287       53                push ebx
00BD1288       55                push ebp
00BD1289       56                push esi
00BD128A       57                push edi
00BD128B       8BBC24 90020000   mov edi,dword ptr ss:[esp+290]
00BD1292   |.  66:85FF           test di,di
00BD1295   |.  C74424 10 0000000>mov dword ptr ss:[esp+10],0
00BD129D   |.  894424 14         mov dword ptr ss:[esp+14],eax
00BD12A1   |.  894C24 18         mov dword ptr ss:[esp+18],ecx
00BD12A5   |.  885424 1C         mov byte ptr ss:[esp+1C],dl
00BD12A9   |.  75 11             jnz short Rydll32.00BD12BC
00BD12AB   |.  5F                pop edi
00BD12AC   |.  5E                pop esi
00BD12AD   |.  5D                pop ebp
00BD12AE   |.  66:B8 0800        mov ax,8
00BD12B2   |.  5B                pop ebx
00BD12B3   |.  81C4 7C020000     add esp,27C
00BD12B9   |.  C2 2400           retn 24
00BD12BC   |>  A1 90AABD00       mov eax,dword ptr ds:[BDAA90]
00BD12C1   |.  85C0              test eax,eax
00BD12C3   |.  0F85 A1020000     jnz Rydll32.00BD156A
00BD12C9   |.  FF15 3C70BD00     call dword ptr ds:[<&KERNEL32.Ge>;  

kernel32.GetVersion
00BD12CF   |.  6A 00             push 0                           ;

/hTemplateFile = NULL
00BD12D1   |.  68 80000000       push 80                          ;

|Attributes = NORMAL
00BD12D6   |.  6A 03             push 3                           ;

|Mode = OPEN_EXISTING
00BD12D8   |.  6A 00             push 0                           ;

|pSecurity = NULL
00BD12DA   |.  3D 00000080       cmp eax,80000000                 ; |
00BD12DF   |.  6A 00             push 0                           ;

|ShareMode = 0
00BD12E1   |.  68 000000C0       push C0000000                    ;

|Access = GENERIC_READ|GENERIC_WRITE
00BD12E6   |.  0F83 19020000     jnb Rydll32.00BD1505             ; |
00BD12EC   |.  68 7C80BD00       push Rydll32.00BD807C            ;

|FileName = "\\.\ROCKEYNT"
00BD12F1   |.  FF15 2470BD00     call dword ptr ds:[<&KERNEL32.Cr>;

\CreateFileA
00BD12F7   |.  83F8 FF           cmp eax,-1
00BD12FA   |.  A3 90AABD00       mov dword ptr ds:[BDAA90],eax
00BD12FF   |.  0F85 65020000     jnz Rydll32.00BD156A
00BD1305   |.  68 3F000F00       push 0F003F
00BD130A   |.  6A 00             push 0
00BD130C   |.  6A 00             push 0
00BD130E   |.  FF15 0070BD00     call dword ptr ds:[<&ADVAPI32.Op>;  

advapi32.OpenSCManagerA
00BD1314   |.  8BD8              mov ebx,eax
00BD1316   |.  85DB              test ebx,ebx
00BD1318   |.  75 11             jnz short Rydll32.00BD132B
00BD131A   |.  5F                pop edi
00BD131B   |.  5E                pop esi
00BD131C   |.  5D                pop ebp
00BD131D   |.  66:0D FFFF        or ax,0FFFF
00BD1321   |.  5B                pop ebx
00BD1322   |.  81C4 7C020000     add esp,27C
00BD1328   |.  C2 2400           retn 24  
}

改为如下代码,并用OD菜单命令全部修正保存:
00BD1270 R>    81EC 7C020000     sub esp,27C
00BD1276       A1 8C80BD00       mov eax,dword ptr ds:[BD808C]
00BD127B       8B0D 9080BD00     mov ecx,dword ptr ds:[BD8090]
00BD1281       8A15 9480BD00     mov dl,byte ptr ds:[BD8094]
00BD1287       E9 D7020000       jmp Rydll32.00BD1563
00BD128C       90                nop
00BD128D       90                nop
00BD128E       90                nop
00BD128F       90                nop
00BD1290       90                nop
00BD1291       90                nop
00BD1292   |.  66:85FF           test di,di
00BD1295   |.  C74424 10 0000000>mov dword ptr ss:[esp+10],0
00BD129D   |.  894424 14         mov dword ptr ss:[esp+14],eax
00BD12A1   |.  894C24 18         mov dword ptr ss:[esp+18],ecx
00BD12A5   |.  885424 1C         mov byte ptr ss:[esp+1C],dl
00BD12A9   |.  75 11             jnz short Rydll32.00BD12BC
00BD12AB   |.  5F                pop edi
00BD12AC   |.  5E                pop esi
00BD12AD   |.  5D                pop ebp
00BD12AE   |.  66:B8 0800        mov ax,8
00BD12B2   |.  5B                pop ebx
00BD12B3   |.  81C4 7C020000     add esp,27C
00BD12B9   |.  C2 2400           retn 24
00BD12BC   |>  A1 90AABD00       mov eax,dword ptr ds:[BDAA90]
00BD12C1   |.  85C0              test eax,eax
00BD12C3   |.  0F85 A1020000     jnz Rydll32.00BD156A
00BD12C9   |.  FF15 3C70BD00     call dword ptr ds:[<&KERNEL32>;  

kernel32.GetVersion
00BD12CF   |.  6A 00             push 0                        ;

/hTemplateFile = NULL
00BD12D1   |.  68 80000000       push 80                       ;

|Attributes = NORMAL
00BD12D6   |.  6A 03             push 3                        ; |Mode

= OPEN_EXISTING
00BD12D8   |.  6A 00             push 0                        ;

|pSecurity = NULL
00BD12DA   |.  3D 00000080       cmp eax,80000000              ; |
00BD12DF   |.  6A 00             push 0                        ;

|ShareMode = 0
00BD12E1   |.  68 000000C0       push C0000000                 ;

|Access = GENERIC_READ|GENERIC_WRITE
00BD12E6   |.  0F83 19020000     jnb Rydll32.00BD1505          ; |
00BD12EC   |.  68 7C80BD00       push Rydll32.00BD807C         ;

|FileName = "\\.\ROCKEYNT"
00BD12F1   |.  FF15 2470BD00     call dword ptr ds:[<&KERNEL32>;

\CreateFileA
00BD12F7   |.  83F8 FF           cmp eax,-1
00BD12FA   |.  A3 90AABD00       mov dword ptr ds:[BDAA90],eax
00BD12FF   |.  0F85 65020000     jnz Rydll32.00BD156A
00BD1305   |.  68 3F000F00       push 0F003F
00BD130A   |.  6A 00             push 0
00BD130C   |.  6A 00             push 0
00BD130E   |.  FF15 0070BD00     call dword ptr ds:[<&ADVAPI32>;  

advapi32.OpenSCManagerA
00BD1314   |.  8BD8              mov ebx,eax
00BD1316   |.  85DB              test ebx,ebx
00BD1318   |.  75 11             jnz short Rydll32.00BD132B
00BD131A   |.  5F                pop edi
00BD131B   |.  5E                pop esi
00BD131C   |.  5D                pop ebp
00BD131D   |.  66:0D FFFF        or ax,0FFFF
00BD1321   |.  5B                pop ebx
00BD1322   |.  81C4 7C020000     add esp,27C
00BD1328   |.  C2 2400           retn 24

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自效验
2005-5-14 14:48
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最初由 鸡蛋壳 发布
自效验


在7C801D9F     E8 ABFFFFFF         call kernel32.LoadLibraryExA

时出错,难道在此前有某一程序或dll来查被修改的dll文件的完整性,如果修改了就将dll输出表或入口地址故意打乱,让kernel32等系统文件找错地址而出错,是这样吗?还请高手简略述一下 dll文件由系统加载过程(因为有另一个疑问)
如果说由别的dll文件来检查RYDLL32.DLl的完整性,那么为何将某一老兄的修改版RYDLL32.DLl(并用arm加壳)载入而不会出错?call kernel32.LoadLibraryExA调用RYDLL32.DLl后RYDLL32.DLl才会管事,可以排除RYDLL32.DLl文件自身的检查,如果是主程序的检查,为何不查那位老兄修改的dll?(注*主程序不是这位老兄编写的)怪不怪?
2005-5-14 15:14
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
最初由 dsxu8 发布


在7C801D9F E8 ABFFFFFF call kernel32.LoadLibraryExA

时出错,难道在此前有某一程序或dll来查被修改的dll文件的完整性,如果修改了就将dll输出表或入口地址故意打乱,让kernel32等系统文件找错地址而出错,是这样吗?还请高手简略述一下 dll文件由系统加载过程(因为有另一个疑问)
........


外挂的话,EXE,DLLd都开始带MD5效验的,内存PATCH算了,或者注入PATCH。都可以,教学也有不少。
2005-5-14 15:20
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最初由 鸡蛋壳 发布


外挂的话,EXE,DLLd都开始带MD5效验的,内存PATCH算了,或者注入PATCH。都可以,教学也有不少。

谢谢你,不过不知道怎么才能改那个dll文件,为什么不校验人家改的呢?可以肯定没有MD5之类的校验,难道改的dll文件还得修复头部吗?还是改dll文件要遵循什么规范吗?
2005-5-14 17:29
0
雪    币: 413
活跃值: (637)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
6
Rockey 4的狗不是这么玩的.
你下面写的数据就错了.
因为DLL是需要重定位的.不能直接引用这几个地址的!
在你的机器有时可能是正常的,但常会因为你加了程序或一换机器民
上就挂!

改为如下代码,并用OD菜单命令全部修正保存:
00BD1270 R>    81EC 7C020000     sub esp,27C
00BD1276       A1 8C80BD00       mov eax,dword ptr ds:[BD808C]
00BD127B       8B0D 9080BD00     mov ecx,dword ptr ds:[BD8090]
00BD1281       8A15 9480BD00     mov dl,byte ptr ds:[BD8094]
00BD1287       E9 D7020000       jmp Rydll32.00BD1563
2005-5-15 00:01
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
最初由 nig 发布
Rockey 4的狗不是这么玩的.
你下面写的数据就错了.
因为DLL是需要重定位的.不能直接引用这几个地址的!
在你的机器有时可能是正常的,但常会因为你加了程序或一换机器民
上就挂!
........


也就是说dll文件修改地址时要注意,不能直接改是吗?那么别人怎么改狗的,改后要修复重定位表,怎么修复?用IR?
把jmp改为call行吗?
2005-5-15 10:51
0
雪    币: 212
活跃值: (76)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
dll文件最好静态反汇编后修改,不用考虑载入基址,如果有修改草案代码中有[********]地址,有可能牵涉到重定位表的修改,如果修改后代码地址[********]偏移没变就不需改,如果变了就需到重定位表处修改,建议看pe文件格式.
2005-5-15 21:41
0
雪    币: 413
活跃值: (637)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
9
最初由 dsxu8 发布


也就是说dll文件修改地址时要注意,不能直接改是吗?那么别人怎么改狗的,改后要修复重定位表,怎么修复?用IR?
把jmp改为call行吗?


改为如下代码,并用OD菜单命令全部修正保存:
00BD1270 R>    81EC 7C020000     sub esp,27C
00BD1276       A1 8C80BD00       mov eax,dword ptr ds:[BD808C]
                                                       ^^^^^^^
我说的是这个地址的引用,对于DLL的库在引用变量时是需要重定位,尤其是你
自己要修改动态库的。 你可以先取得当前IP的地址,之后再用+,-的方法来定位变量的位置。
2005-5-16 08:18
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最初由 nig 发布



改为如下代码,并用OD菜单命令全部修正保存:
00BD1270 R> 81EC 7C020000 sub esp,27C
........

谢谢大虾们的指点,本人正在努力学习。。。。。。
2005-5-19 10:04
0
雪    币: 200
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
Rockey 4的狗应该是从堆栈获取传入的参数。
补代码同样也要避开直接内存地址操作的地方,最好是跳到空白的地方去补代码……
2005-5-19 13:49
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
最初由 exky 发布
Rockey 4的狗应该是从堆栈获取传入的参数。
补代码同样也要避开直接内存地址操作的地方,最好是跳到空白的地方去补代码……

这位大虾说得对,我想最好不要改主程序的代码,只在狗dll上作文章。
2005-5-25 20:18
0
游客
登录 | 注册 方可回帖
返回
//