3.1.2 应用层勾子InLine HOOK -(41课)

3.1.2 应用层勾子InLine HOOK                 -(41课)
3.1.2 应用层勾子InLine HOOK                 -(41课)

3.1.2 应用层勾子InLine HOOK(41课)

A、InLine HOOK 原理分析

B、InLine HOOK 代码编写

C、InLine HOOK 代码测试

课时:33

在 021_绕过驱动保护已经讲过一次 in line hook

_declspec(naked)

#pragma pack(1)

//前5字节

77D507EA > 8BFF MOV EDI,EDI

77D507EC /. 55 PUSH EBP

77D507ED |. 8BEC MOV EBP,ESP

My_MessageBoxA地址 401020

============================================

笔记:

在21课时讲过内联HOOK,本课再继续深入讲解.用VC6新建代码inlineHook_test控制台程序,新建一个MessageBoxA,然后用另一个函数my_MessageBox进行参数与原函数相同.我们在OD里看一下这MessageBoxA函数,将前面几个字节改成JMP XXXXXX,先找到我们自己的函数地址是00401020,然后修改代码跳到这里.在OD中修改了代码之后出现了两次的HOOK成功,应该是有两个地方调用了代码.又修改后打印自己的地址信息,信息正确但是报错,我们需要加上恢复函数头部的代码,但是还是出错了,再加上一条_declspec(naked)生成干脆的汇编

// inlineHook_test.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include "hook_test.h"

#include

_declspec(naked) int My_MessageBox

(

HWND hWnd, // handle of owner window

LPCTSTR lpText, // address of text in message box

LPCTSTR lpCaption, // address of title of message box

UINT uType // style of message box

)

{

__asm //恢复函数头部

{ mov bx,bx //特征码定位

PUSH EBP

MOV EBP,ESP

}

printf("Hook Ok %x,%s,%s,%x \n",hWnd,lpText,lpCaption,uType);

__asm

{

jmp oldMessageBoxA+5 //HOOK后又跳回

}

__asm pop ebp //堆栈平衡

__asm retn 0x10 //堆栈平衡

}

int main(int argc, char* argv[])

{

// printf("Hello World!\n");

MessageBoxA(NULL,"Hook Test Contect","hook",MB_OK);

printf("End Process \n");

getchar();

return 0;

}

已经成功了,原理清楚后再用一下之前已经写好的hook_test.h

#include

typedef int (__stdcall *MessageBox_type)(

HWND hWnd, // handle of owner window

LPCTSTR lpText, // address of text in message box

LPCTSTR lpCaption, // address of title of message box

UINT uType // style of message box

) ;

MessageBox_type old_MessageBoxA;

#pragma pack(1)

typedef struct _JMPCODE

{

BYTE jmp;

DWORD addr;

}JMPCODE,*PJMPCODE;

_declspec(naked)

VOID __stdcall my_MessageBox(

HWND hWnd, // handle of owner window

LPCTSTR lpText, // address of text in message box

LPCTSTR lpCaption, // address of title of message box

UINT uType // style of message box

)

{

// old_MessageBoxA(hWnd,"Hook ok",lpCaption,uType);

__asm

{

PUSH EBP

MOV EBP,ESP

}

printf("取得参数%x,%s,%s,%x\n",hWnd,lpText,lpCaption,uType);

__asm

{

mov ebx,old_MessageBoxA

add ebx,5

jmp ebx

}

printf("hook Error\n");

}

VOID InLine_HookMessageBoxA()

{ JMPCODE jcode;

//取得MessageBoxA函数当前地址

HMODULE h=LoadLibraryA("user32.dll");

old_MessageBoxA=(MessageBox_type)(GetProcAddress(h,"MessageBoxA"));

//替换jmp指令

jcode.jmp=0xe9;

jcode.addr=(DWORD)(&my_MessageBox)-(DWORD)(&MessageBoxA)-5;//目的地

址-当前地址-5 //跳到my

old_MessageBoxA=&MessageBoxA;

WriteProcessMemory(GetCurrentProcess(),&MessageBoxA,&jcode,sizeof(JMPCOD

E),NULL);

CloseHandle(h);

}

int main(int argc, char* argv[])

{

printf("Hello World!\n");

InLine_HookMessageBoxA();

MessageBoxA(NULL,"333","222",MB_OK);

return 0;

}

代码过程:通过LoadLibrarA(“user32.dll”);来取得原有MessageBoxA函数地址,然后写入我们的HOOK代码, 通过公式计算执行到我们自己的函数处,执行完后再恢复原有函数.最后在OD里详细的看清HOOK流程.这种内联HOOK用于保护/盗密等,应用比较广泛.

hook的使用实例

在网上找了好久都没有找到消息hook的实例,下面是我的例子给大家分享一下 下面是dll中的代码: //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //我的经验,编译的时候会提示DllMain,已在DllMain.cpp中定义,把DllMain.cpp从源文件里删掉就好了 #include "stdafx.h" #include HHOOK hkey=NULL; HINSTANCE h_dll; #pragma data_seg(".MySec") //定义字段,段名.MySec HWND h_wnd=NULL; #pragma data_seg() #pragma comment(linker,"/section:.MySec,RWS") BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) { h_dll=hinstDLL; // MessageBox(0,"运行dllman","",MB_OK); return TRUE; } LRESULT CALLBACK my_test(int nCode,WPARAM wParam,LPARAM iParam)// { /* if(nCode==HC_ACTION) { MessageBox(0,"成功!!","标题",MB_OK); } else { MessageBox(0,"失败!!","标题",MB_OK); } */ MessageBox(0,"被截取","",MB_OK); UnhookWindowsHookEx(hkey); return 1; } void SetHook(HWND hwnd) { h_wnd = hwnd; // MessageBox(0,"运行sethook","",MB_OK); hkey=SetWindowsHookEx(WH_KEYBOARD,my_test,h_dll,0); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 下面是EXE的代码:有很多头文件是没用上的,我个人习惯都带着- -,虽然这不是好习惯

驱动程序

linux 驱动程序设计实验 一实验目的 1.了解LINUX操作系统中的设备驱动程序的组成 2.编写简单的字符设备驱动程序并进行测试 3.编写简单的块设备驱动程序并进行测试 4.理解LINUX操作系统的设备管理机制 二准备知识 1. LINUX下驱动程序基础知识 Linux抽象了对硬件的处理,所有的硬件设备都可以像普通文件一样来看待:它们可以使用和操作文件相同的、标准的系统调用接口来完成打开、关闭、读写和I/O控制操作,而驱动程序的主要任务也就是要实现这些系统调用函数。在Linux操作系统下有两类主要的设备文件:一类是字符设备,另一类则是块设备。字符设备是以字节为单位逐个进行I/O操作的设备,在对字符设备发出读写请求时,实际的硬件I/O紧接着就发生了,一般来说字符设备中的缓存是可有可无的,而且也不支持随机访问。块设备则是利用一块系统内存作为缓冲区,当用户进程对设备进行读写请求时,驱动程序先查看缓冲区中的内容,如果缓冲区中的数据能满足用户的要求就返回相应的数据,否则就调用相应的请求函数来进行实际的I/O操作。块设备主要是针对磁盘等慢速设备设计的,其目的是避免耗费过多的CPU时间来等待操作的完成。一般说来,PCI卡通常都属于字符设备。 我们常见的驱动程序就是作为内核模块动态加载的,比如声卡驱动和网卡驱动等,这些驱动程序源码可以修改到内核中,也可以把他们编译成模块形势,在需要的时候动态加载. 而Linux最基础的驱动,如CPU、PCI总线、TCP/IP协议、APM (高级电源管理)、VFS等驱动程序则编译在内核文件中。有时也把内核模块就叫做驱动程序,只不过驱动的内容不一定是硬件罢了,比如ext3文件系统的驱动。当我们加载了设备驱动模块后,应该怎样访问这些设备呢?Linux是一种类Unix系统,Unix的一个基本特点是“一切皆为文件”,它抽象了设备的处理,将所有的硬件设备都像普通文件一样看待,也就是说硬件可以跟普通文件一样来打开、关闭和读写。 系统中的设备都用一个设备特殊文件代表,叫做设备文件,设备文件又分为Block (块)型设备文件、Character(字符)型设备文件和Socket (网络插件)型设备文件。Block设备文件常常指定哪些需要以块(如512字节)的方式写入的设备,比如IDE硬盘、SCSI硬盘、光驱等。而Character型设备文件常指定直接读写,没有缓冲区的设备,比如并口、虚拟控制台等。Socket(网络插件)型设备文件指定的是网络设备访问的BSD socket 接口。 设备文件都放在/dev目录下,比如硬盘就是用/dev/hd*来表示,/dev/hda表示第一个IDE 接口的主设备,/dev/hda1表示第一个硬盘上的第一个分区;而/dev/hdc 表示第二个IDE接口的主设备。对于Block和Character型设备,使用主(Major)和辅(minor)设备编号来描述设备。主设备编号来表示某种驱动程序,同一个设备驱动程序模块所控制的所有设备都有一

SQLSERVER2008开启远程数据库访问图解

SQL SERVER2008开启远程数据库访问图解moon.翘楚 2012-02-19 8:52 转载自zhangcheng1 最终编辑zhangcheng1 tag:sql server2008远程数据库,远程连sql,IP远程连SQL SERVER,1433端口映射 这篇文章不错,我试验了确实可以,moon.翘楚在这里再进行一下图文增补,让大家更加明白。 讲解SQL Server 2008开启远程连接 作者:blue1000出处:IT专家网论坛2010-06-23 07:00 sql server 2008默认是不允许远程连接的,sa帐户默认禁用的,如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,需要做两个部分的配置: sql server 2008默认是不允许远程连接的,sa帐户默认禁用的,如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,需要做两个部分的配置: 1,SQL Server Management Studio Express(简写SSMS) 2,SQL Server 配置管理器/SQL Server Configuration Manager(简写SSCM) 有两点要注意: 1,2005的外围应用配置器在2008中换了地方 2,有些设置生效需要重启一下SQL Server step 1: 打开SSMS,用windows身份连接数据库,登录后,右键选择“属性” step 2: 左侧选择“安全性”,选中右侧的“SQL Server 和 Windows 身份验证模式”以启用混合登录模式 step 3: 选择“连接”,勾选“允许远程连接此服务器”,然后点“确定” step 4: 展开“安全性”->“登录名”->“sa”,右键选择“属性” step 5: 左侧选择“常规”,右侧选择“SQL Server 身份验证”,并设置密码 step 6: 选择“状态”,选中“启用”,点击“确定” step 7: 右击数据库选择“方面”

网络连接数据库

package day01; import java.sql.Connection; import java.sql.DriverManager; public class JDBCConnection { public static void main(String[] args) throws Exception { //注册驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); //连接 Connection conn=DriverManager.getConnection( "jdbc:oracle:thin:@192.168.7.134:1521:orcl", "system","tarena"); System.out.println(conn); } } NetCTOSS 电信运营支撑系统 资费管理模块资费: cost/fee 主要功能: 针对资费信息的CURD(增删改查)操作. 常见的企业级应用 OSS : 运营支撑系统 CRM: 客户关系管理 ERP: 企业资源规划 技术: JavaEE开发、JavaWeb开发 JavaSE JavaEE Web技术数据库 常见的软件架构体系: (1) C/S client/server客户端/服务架构 client 需要单独安装客户端软件QQ serve 服务器端软件 优点: 客户端可以单独开发,功能和界面可以非常丰富 缺点: 软件的升级成本高 (2)B/S browser/server浏览器/服务架构 是一种特殊的c/s结构 client: 浏览器Browser IE/Firefox/chrome server: 服务器Web服务器 http协议超文本传输协议简单、无状态的协议请求request和应答response

驱动入口函数

这个驱动程序包含了三个函数:DriverEntry、HelloDDKUnload和HelloDDKDispatchRoutine。其中DriverEntry是驱动程序的入口函数,相当于C/C++程序的main函数,HelloDDKUnload函数是驱动卸载函数。而HelloDDKDispatchRuntine则是IRP的派遣函数,因为驱动程序主要是处理IO 请求,而IO请求大多是在派遣函数中处理的。 先来看看这个驱动程序的第一个函数:DriverEntry /**************************************************************** * 函数名称:DriverEntry * 功能描述:初始化驱动程序,定位和申请硬件资源,创建内核对象 * 参数列表: pDriverObject:从I/O管理器中传来的驱动对象 pRegistryPath:驱动程序在注册表中的路径 * 返回值:返回初始化驱动状态 ****************************************************************/ #pragma INITCODE extern "C" NTSTATUS DriverEntry( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath ) { NTSTATUS status; KdPrint( ( "Enter DriverEntry!\n" ) ); //注册其它驱动调用函数入口 pDriverObject->DriverUnload = ( PDRIVER_UNLOAD ) HelloDDKUnload; pDriverObject->MajorFunction[IRP_MJ_CREATE] = HelloDDKDispatchRoutine; pDriverObject->MajorFunction[IRP_MJ_CLOSE] = HelloDDKDispatchRoutine; pDriverObject->MajorFunction[IRP_MJ_WRITE] = HelloDDKDispatchRoutine; pDriverObject->MajorFunction[IRP_MJ_READ] = HelloDDKDispatchRoutine; //创建驱动设备对象 status = CreateDeivce( pDriverObject ); KdPrint( ( "DriverEntry end!\n" ) ); return status; } 这个函数的第一句代码是一个#pragma预处理指令: #pragma INITCODE

用PLSQL远程连接Oracle数据库

PL/SQL Developer 远程连接Oracle数据库 1、配置服务器tnsnames.ora文件,如果本机上没有安装oracle,可以从安 装了oracle的机上拷贝一个(tnsnames.ora文件)放在指定目录下,因为我已安装oracle,所以直接配置该文件。 # tnsnames.ora Network Configuration File: D:\Oracle11g\product\11.2.0\dbhome_1\network\admin\tnsnames.ora # Generated by Oracle configuration tools. LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ORACLR_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) (CONNECT_DATA = (SID = CLRExtProc) (PRESENTATION = RO) ) ) ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.25.224)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) orcl为远程Oracle数据库的实例名,IP地址和端口也要配置正确。 2、配置完成后,Oracle客户端应该可以连接到远程Oracle 数据库上。

数据库系统的访问

第7章数据库系统的访问 对于那些相对独立的软件供应商而言,经常要为每一个DBMS编写一个版本的应用程序,或者为每个要访问的DBMS编写针对DBMS的代码。这就意味着,大量的资源都耗在了编写和维护DB的访问上,更不用说应用程序了。此时应用程序的评价标准不再是质量,而是它能否在给定的DBMS中访问数据库。 这就需要开放的数据库连接,就是人们需要用一种新的方法来访问不同的数据库。为此,在C/S,B/S系统中必须广泛使用访问接口技术,以隐藏各种复杂性,屏蔽各种系统之间的差异。常见的数据库访问接口的技术有固有调用、ODBC、JDBC、OLE DB、DAO、ADO、https://www.360docs.net/doc/923267873.html, 以及基于XML的数据库访问等几种流行的方式。这其中以ODBC技术和JDBC技术应用最广泛,也是目前最为优秀的访问接口方式。 本章主要对几种常见的数据库访问技术(如固有调用、ODBC、JDBC、OLE DB、DAO、ADO、https://www.360docs.net/doc/923267873.html,以及基于XML的数据库访问等)进行介绍。 7.1 数据库的访问接口 所谓访问接口是指分布式环境中保证操作系统、通信协议、数据库等之间进行对话、互操作的软件系统。 访问接口的作用是保证网络中各部件(软件和硬件)之间透明地连接,即隐藏网络部件的异构性,尤其保证不同网络、不同DBMS和某些访问语言的透明性,即下面三个透明性。 ⑴网络透明性:能支持所有类型的网络。 ⑵服务器透明性:不管服务器上的DBMS是何种型号(ORACLE、SYBASE、DB2等),一个好的访问接口都能通过标准的SQL语言与不同DBMS上的SQL语言连接起来。 ⑶语言透明性:客户机可用任何开发语言进行发送请求和接受回答,被调用的功能应该像语言那样也是独立的。 应用系统访问数据库的接口方式有多种,本节介绍固有调用、ODBC和JDBC。 7.1.1 固有调用 每个数据库引擎都带有自己的包含用于访问数据库的APl函数的动态链接库DLL,应用程序可利用它存取和操纵数据库中的数据。如果应用程序直接调用这些动态链接库,就说它执行的是“固有调用”,因为该调用对于特定的数据库产品来说是“固有” (专用)的。 固有调用接口的优点是执行效率高,由于是“固有”,编程实现较简单。但它的缺点也是很严重的:不具通用性。对于不同的数据库引擎,应用程序必须连接和调用不同的专用的动态链接库,这对于网络数据库系统的应用是极不方便的。 7.1.2 ODBC ODBC是“开放数据库互连”(Open Database Connectivity)的简称。ODBC是Microsoft 公司提出的、当前被业界广泛接受的应用程序通用编程接口(API)标准,它以X/Open和ISO/IEC的调用级接口(CLI)规范为基础,用于对数据库的访问。我们可以用如下图示来说明ODBC概念。

数据库访问技术

7.2 数据库访问技术 访问数据库中的数据对象时,一般可采用两种访问方式:一是登录用户直接借助DBMS 的数据操纵工具,通过图形或SQL命令接口联机访问;另外一种为程序代码通过应用程序编程接口(Application Programming Interface,API)进行数据库连接验证以及数据操作。两种数据库访问方式,可以抽象为图7.5的层次结构,从中可见中间的接口组件是数据库访问的桥梁与核心,本节主要就该部分的通用接口技术(即API访问方式)部分进行介绍。 图7.5 数据库访问结构示意 根据底层数据操作模式的差异,数据库接口可简单分为:本地(Local)数据库接口和客户机/服务器(Client/Server)数据库接口。 1.本地数据库接口 通过DBMS将用户数据请求转换成为简单的磁盘访问命令,并交由操作系统的文件管理系统执行;然后DBMS从文件管理系统得到数据响应并加以处理。由于DBMS数据文件组织结构的差异,本地型DBMS只能够读取特定的数据源。 2.客户机/服务器数据库接口 数据处理工作分散到工作站和服务器上处理。工作站通过特定的数据库通信API,把数据访问请求传给相应的服务器的后端数据驱动程序。由于不同客户机/服务器数据库管理系统通信机制的差异,异构数据库之间也难以实现透明通信互访。 因此,仅依靠特定DBMS提供的数据库访问接口难以支撑透明的、通用的异构数据库访问。后台数据库管理系统的变更或升级,需要程序员对特定API的重新学习,以及对应用程序代码的改写;而市场上DBMS产品众多,必将进一步加大系统开发人员的学习和维护压力,应用程序与数据源间的独立性难以真正实现。为此,建立更为通用的数据访问技术规范,为程序用户提供一套完整、统一的数据库访问接口,得到了数据库业界广泛认同与支持,并由此产生了众多成熟的数据库访问接口应用技术规范。 到目前为止,主流的数据库访问技术包括ODBC、MFC ADO、RDO、OLE DB、ADO、https://www.360docs.net/doc/923267873.html,以及JDBC等通用技术标准。这些通用数据库访问技术的出现与发展大大降低了数据库系统开发与维护门槛,改善了数据库系统的移植性、扩展性,极大推动了数据库技术的发展与普及。下面就主流数据库访问技术发展与演化进行介绍。

字符设备驱动相关函数及数据结构简介

1.设备号 分为主次设备号,看上去像是两个号码,但在内核中用dev_t()一种结构表示,同时不应该自己去假设赋值设备号,而是使用宏()来取得. MAJOR(dev_t dev); MINOR(dev_t dev); 即使你有确定的主,次设备号也要用 dev=MKDEV(int major, int minor); 1.1分配设备号 静态分配 int register_chrdev_region(dev_t first, unsigned int count, char *name); first 是你要分配的起始设备编号. first 的次编号部分常常是0, 但是没有要求是那个效果. count 是你请求的连续设备编号的总数. 注意, 如果count 太大, 你要求的范围可能溢出到下一个次编号; 但是只要你要求的编号范围可用, 一切都仍然会正确工作. name 是应当连接到这个编号范围的设备的名子; 它会出现在/proc/devices 和sysfs 中 动态分配 int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name); dev 是一个只输出的参数, 它在函数成功完成时持有你的分配范围的第一个数. fisetminor 应当是请求的第一个要用的次编号; 它常常是0. count 和name 参数如同给request_chrdev_region 的一样 >>>应该始终使用动态分配,但最好为定制设备号留有接口,以参数形式,以name_major=0做为默认值,可能 的操作如下: if(scull_major){ dev = MKDEV(scull_major, scull_minor); result = register_chrdev_region(dev, scull_nr_devs,"scull"); }else{ result = alloc_chrdev_region(&dev, scull_minor, scull_nr_devs,"scull"); scull_major = MAJOR(dev); } if(result < 0){ printk(KERN_WARNING "scull: can't get major %d\n", scull_major); return result; } 1.2释放设备号 void unregister_chrdev_region(dev_t first, unsigned int count);

常用钩子的类型

常用钩子的类型 1、WH_CALLWNDPROC 1、WH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks WH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks使你可以监视发送到窗口过程的消息。系统在消息发送到接收窗口过程之前调用WH_CALLWNDPROC Hook子程,并且在窗口过程处理完消息之后调用WH_CALLWNDPROCRET Hook 子程。 WH_CALLWNDPROCRET Hook传递指针到CWPRETSTRUCT结构,再传递到Hook子程。CWPRETSTRUCT结构包含了来自处理消息的窗口过程的返回值,同样也包括了与这个消息关联的消息参数。 2、WH_CBT Hook 在以下事件之前,系统都会调用WH_CBT Hook子程,这些事件包括: 1. 激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件; 2. 完成系统指令; 3. 来自系统消息队列中的移动鼠标,键盘事件; 4. 设置输入焦点事件; 5. 同步系统消息队列事件。 Hook子程的返回值确定系统是否允许或者防止这些操作中的一个。 3、WH_DEBUG Hook 在系统调用系统中与其他Hook关联的Hook子程之前,系统会调用 WH_DEBUG Hook子程。你可以使用这个Hook来决定是否允许系统调用与其他Hook关联的Hook子程。 4、WH_FOREGROUNDIDLE Hook 当应用程序的前台线程处于空闲状态时,可以使用WH_FOREGROUNDIDLE Hook执行低优先级的任务。当应用程序的前台线程大概要变成空闲状态时,系统就会调用WH_FOREGROUNDIDLE Hook子程。 5、WH_GETMESSAGE Hook 应用程序使用WH_GETMESSAGE Hook来监视从GetMessage or PeekMessage函数返回的消息。你可以使用WH_GETMESSAGE Hook去监视鼠标和键盘输入,以及其他发送到消息队列中的消息。

SQL2000数据库实现远程连接

SQL 2000数据库怎么实现远程连接 SQL Server 2000无论是个人版、企业版还是标准版,只要细版本在8.00.1760以下,均不提供远程数据库连接,即使服务器端工具和客户端工具的设置均有TCP/IP设置和数据库连接属性也设置了RPC远程连接,仍然不能实现远程连接。该怎么解决呢? 解决方案如下: 首先,需要打SP4补丁,该补丁包含了以前sp1、2、3的补丁,安装此补丁后一般要重新启动计算机,再进行远程连接就可以了,如再企业管理器可远程注册服务器、查询分析可连接远程服务器、ODBC可连接远程服务器。 要点: 1.确认服务器端SQL服务端口号是否为:1433 2.如果不是1433,配置客户端 3.建立服务器端登录帐号,确保角色及管理数据库 一、查看服务器端情况 1. 看ping 服务器IP能否ping通。 这个实际上是看和远程sql server 服务器的物理连接是否存在。如果不行,请检查网络,查看配置,当然得确保远程sql server 服务器的IP拼写正确。 2. 在Dos或命令行下输入telnet 服务器IP 端口,看能否连通。 如telnet 202.114.100.100 1433 通常端口值是1433,因为1433是sql server 的对于Tcp/IP的默认侦听端口。如果有问题,通常这一步会出问题。通常的提示是“……无法打开连接,连接失败"。 如果这一步有问题,应该检查以下选项。 1) 检查远程服务器是否启动了sql server 服务。如果没有,则启动。 2) 检查sql server服务器端有没启用Tcp/IP协议,因为远程连接(通过因特网)需要靠这个协议。检查方法是,在服务器上打开开始菜单->程序->Microsoft SQL Server->服务器网络实用工具,看启用的协议里是否有tcp/ip协议,如果没有,则启用它。 3) 检查服务器的tcp/ip端口是否配置为1433端口。仍然在服务器网络实用工具里查看启用协议里面的tcp/ip的属性,确保默认端口为1433,并且隐藏服务器复选框没有勾上。 事实上,如果默认端口被修改,也是可以的,但是在客户端做telnet测试时,写服务器端口号时必须与服务器配置的端口号保持一致。如果隐藏sql server服务器复选框被勾选,则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接,但是Tcp/ip协议的默认端口将被隐式修改为2433,在客户端连接时必须作相应的改变(具体方式见二:设置客户端网络实用工具)。

Rootkit的类型、功能及主要技术

Rootkit的类型、功能及主要技术Rootkit 的类型小结 1.固化Rootkits和BIOS Rootkits 固化程序是存于ROM中,通常很小,使用系统硬件和BIOS 创建顽固的软件镜像。将制定的代码植入到BIOS 中,刷新BIOS,在BIOS 初始化的末尾获得运行机会。重启无用、格式化无用,在硬盘上无法探测,现有的安全软件将大部分的扫描时间用在了对硬盘的扫描上。 本文整理:(第三方信息安全网)https://www.360docs.net/doc/923267873.html,/ 2 内核级Rootkits 内核级Rootkits(Kernelland Rootkits)是通过修改内核、增加额外的代码、直接修改系统 调用表、系统调用跳转(Syscall Jump),并能够替换一个操作系统的部分功能,包括内核和相关的设备驱动程序。现在的操作系统大多没有强化内核和驱动程序的不同特性。许多内核模式的Rootkit 是作为设备驱动程序而开发,或者作为可加载模块,如Linux 中的可加载模块或Windows 中的设备驱动程序,这类Rootkit 极其危险,它可获得不受限制的安全访问权。如果代码中有任何一点错误,那么内核级别的任何代码操作都将对整个系统的稳定性产生深远的影响。 特点:无进程;无端口。与用户级Rootkit 相比,与操作系统处于同一级别,可以修改或破坏由其它软件所发出的任何请求。 3 用户态Rootkits 用户态Rootkits(Userland Rootkits)是运行在Ring3 级的Rootkit,由于Ring3 级就是 用户应用级的程序,而且信任级别低,每一个程序运行,操作系统给这一层的最小权限。用

Labview中远程数据库访问技术

摘要:介绍了在Labview中应用ADO技术访问本地和远程数据库的方案。对在局域网中以网络 共享方式访问远程Access数据库进行了详细介绍,最后给出了应用该方法开发的一个实例。关 键词:LabviewADO远程数据库引言Labview是美国NI公司开发的一种图形化编程语言,其主 要用于数据采集、仪器控制、过程监控等领域。Labview具有丰富的采集与分析函数库,在Labview环境下可以方便快捷地开发监控系统软件。现代监控系统一般构建于局域网内,且 摘要:介绍了在Labview中应用ADO技术访问本地和远程数据库的方案。对在局域网中以网络共享方式访问远程Access数据库进行了详细介绍,最后给出了应用 该方法开发的一个实例。 关键词:Labview ADO 远程数据库 引言 Labview 是美国NI公司开发的一种图形化编程语言,其主要用于数据采集、仪器控制、过程监控等领域。Labview具有丰富的采集与分析函数库,在Labview 环境下可以方便快捷地开发监控系统软件。现代监控系统一般构建于局域网内,且监控系统自身也是企业生产管理系统的一个子系统,因此不可避免地要访问本地或远程数据库。Labview开发版中并没有提供直接与通用数据库接口的工具,但可以 通过以下方法解决:购买NI公司开发的附加软件工具包;利用其它语言如VC++编写DLL访问数据库;利用ADO控件访问数据库。[1]Labview支持Activex控件,与其它方法相比基于ADO技术构建本地或远程数据库访问接口不失为一种简单而又经济 的方法。 1 ADO技术简介 ADO(Activex Data Objects)是Microsot为OLE DB设计的应用层接口,它为一致的数据访问接口提供了良好的扩展性而不局限于单一的数据源。ADO接口编程模型中包括连接(connection)、命令(command)、参数(parameter)、 记录集(recordset)、字段(field)、错误(error)、属性(property)、集合(collection)、事件(event)等元素。其中connection、command、recordset是三个主体对象,parameters、fields、errors、properties、是四个集合对象。ADO的一般操作方式为:1 连接到数据源;2 指定访问数据源的命令;3 执行命令;4 将命令执行后产生的结果保存在缓存中;5 更新数据源。ADO接口继承了OLE DB的高速性,可以高速访 问本地或远程的数据源。 2在Labview 中使用ADO接口 在Labview 中使用ADO接口访问数据库一般包括以下几个步骤:建立ADO控件;连接到数据源;生成SQL命令;执行命令;关闭连接。具体步骤如图1 所示。 2.1建立ADO控件 在前面板控件模板中选择Activex子模板单击Automation Refnum项,右键单击Select Activex Class的Browse从类型库中选择 Microsoft Activex Data Objects 2.7 library Version 2.7,之后可以向框图程序中加 入connection、command、recordset等对象。 2.2连接到数据源 首先在Diagram中单击鼠标右键,从Function模板选择communication 子模板,从中选择Activex项的Automation Open 与ADODB_Connection相连即 可打开连接。接着同样从communication子模板的Activex项中选择 Invoke node (方法节点)并与Automation Open 相连,在其上单击右键选择methods项的Open方法即出现图1中所示的节点。其中“Open”表示该节点为打开“连接对象”,“ConnectionString”是连接到数据源的字符串,“UserID”和“Password”

第七讲 VB访问SQL Server2000数据库的方法

第七讲 VB访问SQL Server2000数据库的方法 一、ODBC数据源设置 1、ODBC简介 ODBC Open DatabaseConnectivity开放式数据库互连)是Mircosoft公司有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API Application应用程序编程接口)。这些API利用SQL来完成大部分的任务。ODBC本身提供对SQL语言的支持,用户可以直接将SQL送给ODBC一个基于ODBC的应用程序对数据库操作不依赖于任何DBMS,不直接与DBMS打交道,所有数据库操作由ODBC驱动程序完成。 2、ODBC数据源的创建(建立ODBC数据源) 前台系统Windows 2000 professional系统,后台Windows 2000 Server系统。以Windows 2000 professional为例: (1)单击“开始”/设置/控制面板/管理工具/数据源ODBC,打开“ODBC数据源管理器”,选择“用户DSN or 系统DSN”,单击【添加】按钮,打开“创建用户数据源”对话框,选择“SQL Server”,单击【完成】按钮。

(2)打开“创建新的数据源到SQL Server”窗口: ○1你想用什么名称命名数据源:在名称框中输入xn。 ○2服务器:为网络中数据库服务器(默认是本地服务器Local,可选远程服务器IP)。 ○3登陆ID:xn密码:xn(取决于安装SQL时所指定的密码)。特别注意此处为确保数据库安全起见,数据库管理员可以给用户指定一个用户名及密码。这里为简便起见使用管理员用户名及密码。 ○4更改数据库为:aa(所要使用的数据库)。

远程访问数据库

远程访问数据库 对于oracle数据库,可以通过建立dblink的方式,在一个数据库中访问获取另一个数据库的数据,具体实现方式如下: 1.建立DATABASE LINK: 在本机数据库中执行如下语句: Create public database link ERPDATABASE–远程数据库连接名 Connectto apps identifiedby apps Using '(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.0.100) (PORT = 1521) ) ) (CONNECT_DATA = (SERVICE_NAME = ERPTEST) ) ) ' ; 蓝色部分可以从数据库安装目录\product\10.2.0\db_1\network\ADMIN的路径下找到,拷贝tnsnames.ora文件中的对应信息。 以上连接信息可以用oracle客户端的Net Manager工具生成:

2.查看数据 成功之后,可以在本机数据库中查看ERPTEST数据库的数据: 其中需要注意的有: 1)ygfm为数据库用户名,因为dblink的连接信息中使用的apps用户是数据库dba,所以可以方位ygfm的数据,这里要注意的是apps需要有ygfm的访问权限。 2)注意需要使用’ @ERPDATABASE’标识远程数据库。 3.建立同义词 可以建立同义词减少输入: 执行以下语句: Create synonym ygfm_analyse_base for ygfm.ygfm_analyse_base@ERPDATABASE; 查询: select * from ygfm_analyse_base; 需要注意的是:这里建立的DATABASE LINK 不同于tnsnames.ora文件中的连接信息,这里是在数据库中保存连接信息,而tnsnames.ora文件中的连接信息是在数据库层面之上的。

数据库访问技术简介

数据库访问技术简介 数据库中的数据存放在数据库文件中,我们要从数据库文件中获取数据,先要连接并登陆到存放数据库的服务器。一般来说,访问数据库中的数据有两种方式:一是通过DBMS (Data Base Management System,数据库管理系统)提供的数据库操作工具来访问,如通过SQL Server 2000的查询设计器来提交查询,或者通过SQL Server 2000的企业管理工具来访问。这种方式比较适合DBA对数据库进行管理;二是通过API(Application Programming Interface, 应用编程接口)来访问数据库,这种方式适合在应用程序中访问数据库。 在数据库发展的初期,各个开发商为自己的数据库设计了各自不同的DBMS,因此不同类型的数据库之间数据交换非常困难。为了解决这个问题,Microsoft提出了ODBC(Open Data Base Connectivity,开放数据库互连)技术,试图建立一种统一的应用程序访问数据库接口,使开发人员无需了解程序内部结构就可以访问数据库。 1、Microsoft提出的系列数据库访问技术 1.1、ODBC ODBC是微软公司开放服务结构中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API。应用程序可以使用所提供的API来访问任何提供了ODBC驱动程序的数据库。ODBC规范为应用程序提供了一套高层调用接口规范和基于动态链接的运行支持环境。ODBC已经成为一种标准,目前所有的关系数据库都提供了ODBC 驱动程序,使用ODBC开发的应用程序具有很好的适应性和可移植性,并且具有同时访问多种数据库系统的能力。这使得ODBC的应用非常广泛,基本可用于所有的关系数据库。 要使用ODBC,先要了解以下概念:ODBC驱动管理器、ODBC驱动程序、数据源。它们都是ODBC的组件。ODBC组件之间的关系如图1所示。

驱动名词解释

驱动 NTSTATUS NTSTATUS 是被定义为32位的无符号长整型。在驱动程序开发中,人们习惯用NTSTATUS 返回状态。其中0~0X7FFFFFFF,被认为是正确的状态,而0X80000000~0XFFFFFFFF被认为是错误的状态。 有一个非常有用的宏-----NT_SUCCESS,用来检测状态是否正确。 IN IN,OUT,INOUT是一个空的宏,只是用来说明这个参数是用于输入参数,还是输出的参数。 DriverEntry 操作系统在初始化驱动程序的时候会调用DriverEntry,通常会用这个函数来填充dispatch例程的指针,这就象注册回调函数一样。有的设备要创建设备的对象,或者还要创建一个设备名字,以及其他的初始化操作。它的原型: NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ){ } IN,OUT,INOUT是一个空的宏,只是用来说明这个参数是用于输入参数,还是输出的参数。NTSTATUS实际是个长整型可以在DDK头文件NTSTA TUS.H中找到NTSTATUS的代码列表。函数的第一个参数DriverObject是刚被初始化的驱动对象,就是操作系统为这个驱动分配的空间的指针。函数的第二个参数RegistryPath是驱动在注册表中的键值。如果驱动程序需要访问设备的服务键需要保存这个键值以备后用。 UNICODE_STRING UNICODE_STRING结构是通过使用各种本地安全认证(LSA)的功能来指定一个Unicode 字符串。 2结构体原型: typedef struct _LSA_UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer;} LSA_UNICODE_STRING, *PLSA_UNICODE_STRING, UNICODE_STRING, *PUNICODE_STRING; 3结构成员: Length 指定字符串的长度,以字节为单位指出的Buffer字符串的长度。如果是以NULL字符结尾(即'\0'),则不包括NULL字符的长度。 MaximumLength Buffer字符串的总长度。 MaximumLength和Length的关系可以参照: char c[10] = "123"; sizeof(c);和strlen(c);得出的结果。

常见表扣的分类

《外贸手表那些事儿》 外贸钟表交流微信号:YXCsince1989 第一课 第一讲——表扣 根据结构功能使用方法的不同,手表表扣有如下7种基本类型: 手表针扣、手表皮带按扣、手表钩扣、手表蝴蝶扣、手表暗扣、手表折叠扣和手表折叠安全扣。 1. 手表针扣(Buckle)不锈钢材质为多,也有塑料材质的,有单针和双针,是人们平常见得最多的手表表扣之一,它一般被用于皮带手表,硅胶手表,可自行调节手表表带周长,使用方便.可镭射LOGO.

2.手表皮带按扣(leather deployment buckle),蝴蝶扣的一种,使用得高档皮带手表,基本上都是不锈钢材质。因为只固定于皮带一边,因此使用较复杂,但是牢固。可镭射LOGO。

3.手表钩扣(Hook Buckle) ,一般为不锈钢,多用于钢网带和不锈钢带手表.可镭射LOGO。

4 蝴蝶双按扣(Push-Button Hidden Clasp),基本上都是不锈钢,由于连接钢带两边,操作比皮带蝴蝶扣更加方便,佩带舒适,多用于高档不锈钢手表,陶瓷手表。一般不可镭射LOGO(因为藏在表带下面,LOGO看不到),LOGO可做在表带上面。

5.手表暗扣(hidden clasp )基本上都是不锈钢,一般用于钢带手表,折叠起来后与表带浑然一体,非常美观因此也很受人们欢迎。一般不可镭射LOGO(因为藏在表带下面,LOGO看不到),LOGO可以做在表带上面. 6. 手表珠宝扣(Bracelet Clasp) ,有不锈钢材质也有合金材质,一般用于中低档手链手表。操作方便,可镭射LOGO。

7. 手表折叠安全扣(folding clasp with safety),龟背扣的一种,有单按双按,一般为不锈钢材质,单按扣很便宜,是中低档钢带手表中使用率最高的表扣类型,生活中非常常见,不过如果质量不过关的话比较容易松脱。双按保险扣(右图)质量比较好,可以镭射LOGO.

VB访问数据库的方法及接口分析

摘要:本文介绍了几种Visual Basic访问数据库的方法,对这些数据接口的性能进行了比较,并提出相互的转化关系。 1VB访问数据库的方法 VB访问数据库的方法很多,一般情况下分成两大类,而每一类又有很多方法。下面以列表的方式列出每一类,及每一类包含的方法。 1.1接口对象法(API) VBSQL:通过DB-Library访问微软的SQL Server。 ODBC API:任何一种ODBC数据源16位和32位。 DAO/Jet:本地的Jet/Access.MDB、顺序索引数据库(ISAM)和任何ODBC数据源。 DAO/ODBC Direct:任何一种ODBC数据源(经过RDO)。 RDO2.0:任何一种ODBC数据源(LevelⅠ或Ⅱ)。 ADO:任何一种ODBC数据源和任何经过OLE DB界面接口的数据源。 1.2数据控件法 Data Control:DAO/Jet数据界面接口。 Data Control/ODBC Direct:DAO/ODBC Direct数据界面接口。 RemoteData Control/RDC:RDO数据界面接口。 Advanced Data Connector/ADC:ADO数据界面接口。 2几种接口的比较 ADC(Advanced Data Connector):高级数据连接器。提供绑定ADO数据源到窗体的数据绑定控件上。ADC主要是一种直接访问或者通过ADO访问远程OLE DB对象的一种技术,它也支持主要应用在微软IE浏览器上的数据绑定控件。它是特地为Web上的浏览器为基础的应用程序而设计的。 ADO(Active Data Objects):Active数据对象。是DAO/RDO的后继产物,ADO“扩展”了DAO和RDO所使用的对象模型,这意味着它包含较少的对象、更多的属性、方法(和参数),以及事件。ADO实际是一种提供访问各种数据类型的连接机制。ADO设计为一种极简单的格式,通过ODBC的方法同数据库接口。可以使用任何一种ODBC数据源,即不止适合于SQL Server、Oracle、Access等数据库应用程序,也适合于Excel表格、文本文件、图形文件

相关文档
最新文档