Quantcast
Channel: 看雪安全论坛
Viewing all articles
Browse latest Browse all 9556

把OD改成DLL..我没成功,有谁试成功的

$
0
0
谁成功了...我修改了然后loadlibrary怎么加载也不行啊..



引用:

把XXX.exe改写成dll来直接加载使用。

把XXX.exe改成dll,可以参考PEloader的实现原理。
如果懒的看PEloader,那么我告诉你几个注意事项,改一下就行了,也不是很复杂。

关键点:exe的镜像地址是有PE头的 OptionalHeader.ImageBase决定的,
而dll的ImageBaseAddr由LoadLibraryA决定的。
好像只需要修正这一点,就可以了。
{反正我改OD.exe就只改了这个,我很菜,希望高手补充。}

具体怎么改,参考附录C。

最后,把XXX.exe改成了dll,想怎么玩都可以了。

附录C:我把OD.exe ---> OD.dll的修改过程。
1,修改OEP:
OD的OEP:
00DA1000 > $ /EB 10 jmp short 00DA1012
00DA1002 |66 db 66 ; CHAR 'f' //新加的代码不能放这里,因为要重定位。
00DA1003 |62 db 62 ; CHAR 'b'
00DA1004 |3A db 3A ; CHAR ':'
00DA1005 |43 db 43 ; CHAR 'C'
00DA1006 |2B db 2B ; CHAR '+'
00DA1007 |2B db 2B ; CHAR '+'
00DA1008 |48 db 48 ; CHAR 'H'
00DA1009 |4F db 4F ; CHAR 'O'
00DA100A |4F db 4F ; CHAR 'O'
00DA100B |4B db 4B ; CHAR 'K'
00DA100C |90 nop
00DA100D |E9 db E9
00DA100E . |2801E500 dd offset b.___CPPdebugHook
00DA1012 > \A1 1B01E500 mov eax, dword ptr [E5011B]
修改为:
00871000 > /E9 5BE60A00 jmp 0091F660 // + 记录模块地址
00871005 |90 nop
00871006 |90 nop
00871007 |90 nop
00871008 |90 nop
00871009 |90 nop
0087100A |90 nop
0087100B |90 nop
0087100C |90 nop
0087100D |90 nop
0087100E |90 nop
0087100F |90 nop
00871010 |90 nop
00871011 |90 nop
00871012 . |A1 1B019200 mov eax, dword ptr [92011B]

2,加一些代码记录模块地址。
// + 记录模块地址
0091F660 8BC3 mov eax, ebx
0091F662 2D 00100000 sub eax, 1000
0091F667 51 push ecx
0091F668 8BCB mov ecx, ebx
0091F66A 83C1 06 add ecx, 6
0091F66D 8901 mov dword ptr [ecx], eax
0091F66F 59 pop ecx
0091F670 ^ E9 9D19F5FF jmp 00871012 //再跳回去
0091F675 00 db 00



3,在0091F642这里加一个Call,修正GetModuleHandleA的返回,因为现在OD是Dll了,模块地址不同。
0091F628 . 33 32 2D 62 6>ascii "32-bit analysing"
0091F638 . 20 64 65 62 7>ascii " debugger",0
// + 修改 kernel32.GetModuleHandleA
0091F642 $ 8BC4 mov eax, esp
0091F644 . 8378 04 00 cmp dword ptr [eax+4], 0
0091F648 . 74 05 je short 0091F64F
0091F64A .- E9 F2C0EE7B jmp kernel32.GetModuleHandleA
0091F64F > E8 00000000 call 0091F654
0091F654 /$ 58 pop eax
0091F655 |. 2D 4EE60A00 sub eax, 0AE64E
0091F65A |. 8B00 mov eax, dword ptr [eax] //返回上面记录的模块地址
0091F65C \. C2 0400 retn 4
0091F65F 00 db 00

4,最后把调用kernel32.GetModuleHandleA的Call,如果参数为0修改成Call 0091F642,参数不为0的不改。

5,改完,保存为OD.dll,自己随便写一个exe,LoadLibraryA,OD.dll,可以用了


Viewing all articles
Browse latest Browse all 9556

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>