首页
社区
课程
招聘
[求助]关于DLL劫持问题
发表于: 2008-5-22 18:16 5969

[求助]关于DLL劫持问题

2008-5-22 18:16
5969
研读了大大们关于DLL劫持的文章,用win32asm写了下,发现在DLL中不能加载同名的DLL(系统DLL),问了有些高手说,不能加载同名的DLL。
用Yonsm的AheadLib生成了C++代码,发现关于系统DLL的调用都在namespace AheadLib中,不知道namespace在win32asm中怎么写,请高手指教下。
本人写的代码如下(LPK.DLL):
    .386
    .model flat,stdcall
    option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include     windows.inc
include windows.inc
include user32.inc
includelib  user32.lib
include kernel32.inc
includelib  kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_PROCVAR0   typedef   proto
PROCVAR0    typedef   ptr   _PROCVAR0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    .data?
szSystem                    db 1024 dup(?)
lpFileName                  db 1024 dup(?)
hDllInstance                dd        ?
lpIncCount                  PROCVAR0  ?
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    .const
_dllName                    db  '\lpk.dll',0
_LpkInitialize              db  'LpkInitialize',0
_LpkTabbedTextOut           db  'LpkTabbedTextOut',0
_LpkDllInitialize           db  'LpkDllInitialize',0
_LpkDrawTextEx              db  'LpkDrawTextEx',0
_LpkEditControl             db  'LpkEditControl',0
_LpkExtTextOut              db  'LpkExtTextOut',0
_LpkGetCharacterPlacement   db  'LpkGetCharacterPlacement',0
_LpkGetTextExtentExPoint    db  'LpkGetTextExtentExPoint',0
_LpkPSMTextOut              db  'LpkPSMTextOut',0
_LpkUseGDIWidthCache        db  'LpkUseGDIWidthCache',0
_ftsWordBreak               db  'ftsWordBreak',0
szTitle                     db  '加载成功',0
szTitle2                    db  '加载失败',0
szTitle3                    db  '卸载成功',0
szTitle4                    db  '卸载失败',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    .code
DllEntry    proc  _hInstance,_dwReason,_dwReserved
            mov eax,_dwReason
            .if eax == DLL_PROCESS_ATTACH
                  invoke DisableThreadLibraryCalls,_hInstance
                  invoke GetSystemDirectory,addr szSystem,sizeof szSystem
                  invoke lstrcat,addr szSystem,addr _dllName
                  invoke LoadLibrary,addr szSystem
                  .if eax == NULL
                        ;加载失败
                        invoke MessageBox,NULL,offset szSystem,offset szTitle2,MB_ICONSTOP
                        mov eax,FALSE                       
                  .else
                        ;加载成功
                        invoke MessageBox,NULL,offset szSystem,offset szTitle,MB_OK
                        mov hDllInstance,eax
                        ;可以执行到这里,但是调用GetModuleFileName后,lpFileName居然是空的
                        invoke GetModuleFileName,hDllInstance,addr lpFileName,sizeof lpFileName
                        invoke MessageBox,NULL,offset lpFileName,offset szTitle,MB_OK
                        mov eax,TRUE
                   .endif
            .elseif eax == DLL_PROCESS_DETACH
              invoke FreeLibrary,hDllInstance
              .if eax == NULL
                      ;卸载失败
                      invoke MessageBox,NULL,offset szSystem,offset szTitle4,MB_ICONSTOP                    
                .else
                      ;卸载成功
                      invoke MessageBox,NULL,offset szSystem,offset szTitle3,MB_OK
                 .endif
              mov eax,TRUE
            .endif
            ret
DllEntry    Endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
LpkInitialize   proc
            invoke  GetProcAddress,hDllInstance,addr _LpkInitialize
            .if eax != NULL
              mov lpIncCount,eax
              invoke  lpIncCount
            .endif
            ret
LpkInitialize   Endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
LpkTabbedTextOut    proc
            invoke GetProcAddress,hDllInstance,addr _LpkTabbedTextOut
            .if eax != NULL
              mov lpIncCount,eax
              invoke  lpIncCount
            .endif
            ret
LpkTabbedTextOut    Endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
LpkDllInitialize    proc
            invoke  GetProcAddress,hDllInstance,addr _LpkDllInitialize
            .if eax != NULL
              mov lpIncCount,eax
              invoke  lpIncCount
            .endif
            ret
LpkDllInitialize    Endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
LpkDrawTextEx   proc
            invoke  GetProcAddress,hDllInstance,addr _LpkDrawTextEx
            .if eax != NULL
              mov lpIncCount,eax
              invoke  lpIncCount
            .endif
            ret
LpkDrawTextEx   Endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
LpkEditControl  proc
            invoke  GetProcAddress,hDllInstance,addr _LpkEditControl
            .if eax != NULL
              mov lpIncCount,eax
              invoke  lpIncCount
            .endif
            ret
LpkEditControl  Endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
LpkExtTextOut   proc
            invoke  GetProcAddress,hDllInstance,addr _LpkExtTextOut
            .if eax != NULL
              mov lpIncCount,eax
              invoke  lpIncCount
            .endif
            ret
LpkExtTextOut   Endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
LpkGetCharacterPlacement    proc
            invoke  GetProcAddress,hDllInstance,addr _LpkGetCharacterPlacement
            .if eax != NULL
              mov lpIncCount,eax
              invoke  lpIncCount
            .endif
            ret
LpkGetCharacterPlacement    Endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
LpkGetTextExtentExPoint   proc
            invoke  GetProcAddress,hDllInstance,addr _LpkGetTextExtentExPoint
            .if eax != NULL
              mov lpIncCount,eax
              invoke  lpIncCount
            .endif
            ret
LpkGetTextExtentExPoint   Endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
LpkPSMTextOut   proc
            invoke  GetProcAddress,hDllInstance,addr _LpkPSMTextOut
            .if eax != NULL
              mov lpIncCount,eax
              invoke  lpIncCount
            .endif
            ret
LpkPSMTextOut   Endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
LpkUseGDIWidthCache   proc
            invoke  GetProcAddress,hDllInstance,addr _LpkUseGDIWidthCache
            .if eax != NULL
              mov lpIncCount,eax
              invoke  lpIncCount
            .endif
            ret
LpkUseGDIWidthCache   Endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ftsWordBreak    proc
            invoke  GetProcAddress,hDllInstance,addr _ftsWordBreak
            .if eax != NULL
              mov lpIncCount,eax
              invoke  lpIncCount
            .endif
            ret
ftsWordBreak    Endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            End     DllEntry

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
咋没人呢?是大家都不会还是太简单不愿意回答啊
2008-5-23 15:49
0
游客
登录 | 注册 方可回帖
返回