ProviderHook

问题描述:WSPConnect重写求教解决方法 大家好,本文将围绕一个有趣的事情展开说明,一个有趣的事情是一个很多人都想弄明白的事情,想搞清楚一个有趣的事情需要先了解以下几个事情。

抓包技术是怎么样运行的,他有什么样作用?

ProviderHook的相关图片

Delphi(Pascal) codefunction WSPConnect(s: TSocket; name: PSockAddr; namelen: Integer; lpCallerData: LPWSABUF;lpCalleeData: LPWSABUF; lpSQOS: LPQOS; lpGQOS: LPQOS; var lpErrno: Integer): Integer; stdcall;。

var

sin:sockaddr_in ;。

begin

sin := sockaddr_in(name^);。

rizhi('拦截访问目标:'+PChar(IPtoStr(sin.sin_addr.S_addr) + ':' + IntToStr(ntohs(sin.sin_port))));。

result:=NextProcTable.lpWSPConnect(s,name,namelen,lpCallerData,lpCalleeData,lpSQOS,lpGQOS,lpErrno);。

end;

function WSPStartup(wVersionRequested: WORD; lpWSPData: LPWSPDATA;lpProtocolInfo: LPWSAPROTOCOL_INFOW; UpcallTable: WSPUPCALLTABLE;lpProcTable: LPWSPPROC_TABLE): Integer; stdcall;。

var

WSPStartupFunc:LPWSPSTARTUP;。

slibpath:string;。

hlibhandle:hmodule;。

begin

rizhi('启动:WSPStartup...');。

if not GetHookProvider(lpProtocolInfo,slibPath) then。

begin

result:=WSAEPROVIDERFAILEDINIT;。

exit;

end;

OutputDebugString(pchar(slibpath));。

hlibhandle:=loadlibrary(pchar(slibpath));。

if hlibhandle<>0 then。

begin

WSPStartupFunc:= LPWSPSTARTUP(GetProcAddress(hlibhandle,pchar('WSPStartup')));。

if Assigned(WSPStartupFunc) then。

begin

rizhi('加载:Load library ok!');。

result:=WSPStartupFunc(wVersionRequested,lpWSPData,lpProtocolInfo,UpcallTable,lpProcTable);。

if result=0 then。

begin。

NextProcTable:=lpProcTable^;。

lpProcTable.lpWSPConnect:=WSPConnect;。

rizhi('加载成功:Hook ok!');。

exit;。

end;。

end

else

begin

result:=WSAEPROVIDERFAILEDINIT;。

end;

end

else

begin

result:=WSAEPROVIDERFAILEDINIT;。

end;

end;

C++中ADO访问数据库方法?的相关图片

C++中ADO访问数据库方法?

PcapOpen()有下面几个方法。

PcapOpen()

PcapOpen(bool promiscuous_mode) 。

PcapOpen(bool promiscuous_mode, int read_timeout) 。

promiscuous_mode:在普通的抓取模式下,我们只抓取那些目的地为目标网络的包,而处于promiscuous_mode时,则抓取所有的包,包括转发的包.通常我们都是开启这种模式的。

//Extract a device from the list。

PcapDevice device = devices[i];。

//Register our handler function to the 。

//''packet arrival'' event。

device.PcapOnPacketArrival += 。

new SharpPcap.PacketArrivalEvent(device_PcapOnPacketArrival);。

//Open the device for capturing。

//true -- means promiscuous mode。

//1000 -- means a read wait of 1000ms。

device.PcapOpen(true, 1000);。

Console.WriteLine(。

"-- Listenning on {0}, hit ''Enter'' to stop...",。

device.PcapDescription);。

//Start the capturing process。

device.PcapStartCapture();。

//Wait for ''Enter'' from the user.。

Console.ReadLine();。

//Stop the capturing process。

device.PcapStopCapture();。

//Close the pcap device。

device.PcapClose();。

PcapStartCapture()对应PcapStopCapture()。

使用PcapCapture(int packetCount)时我们可以使用SharpPcap.INFINITE,来达到持续抓包的功能。

Note:通常CRC的数据是不在数据包的中的,因为通常错误的CRC包会被自动丢弃.。

上面的需要注册一个event handle,这在很多时候是不可行的,所以我们推荐使用下面这个方法PcapGetNextPacket()。

//Extract a device from the list。

PcapDevice device = devices[i];。

//Open the device for capturing。

//true -- means promiscuous mode。

//1000 -- means a read wait of 1000ms。

device.PcapOpen(true, 1000);。

Console.WriteLine();。

Console.WriteLine("-- Listenning on {0}...",。

device.PcapDescription);。

Packet packet = null;。

//Keep capture packets using PcapGetNextPacket()。

while( (packet=device.PcapGetNextPacket()) != null )。

...{

// Prints the time and length of each received packet。

DateTime time = packet.PcapHeader.Date;。

int len = packet.PcapHeader.PacketLength;。

Console.WriteLine("{0}:{1}:{2},{3} Len={4}", 。

time.Hour, time.Minute, time.Second, 。

time.Millisecond, len);。

//Close the pcap device。

device.PcapClose();。

Console.WriteLine("-- Capture stopped, device closed.");。

PcapSetFilter() 设置过滤条件。

string filter = "ip and tcp";。

device.PcapSetFilter( filter );。

下面这个例子通过抓取TCP包,输出他们的时间,长度,源IP,源端口,目的IP,目的端口。

/**//// <SUMMARY>。

/// Prints the time, length, src ip, 。

/// src port, dst ip and dst port。

/// for each TCP/IP packet received on the network。

/// </SUMMARY>。

private static void device_PcapOnPacketArrival(。

object sender, Packet packet)。

...{ 。

if(packet is TCPPacket)。

...{ 。

DateTime time = packet.Timeval.Date;。

int len = packet.PcapHeader.len;。

TCPPacket tcp = (TCPPacket)packet;。

string srcIp = tcp.SourceAddress;。

string dstIp = tcp.DestinationAddress;。

int srcPort = tcp.SourcePort;。

int dstPort = tcp.DestinationPort;。

Console.WriteLine("{0}:{1}:{2},。

...{3} Len=...{4} ...{5}:...{6} -> ...{7}:...{8}", 。

time.Hour, time.Minute, time.Second, 。

time.Millisecond, len, srcIp, srcPort, 。

dstIp, dstPort);。

}

恶意网站篡改主页的原理的相关图片

恶意网站篡改主页的原理

一、ADO概述

ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 使您能够编写应用程序以通过 OLE. DB 提供者访问和操作数据库服务器中的数据。ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。之所以称为 ADO,是用了一个比较熟悉的暗喻,OLE 自动化接口。

OLE DB是一组”组件对象模型”(COM) 接口,是新的数据库低层接口,它封装了ODBC的功能,并以统一的方式访问存储在不同信息源中的数据。OLE DB是Microsoft UDA(Universal Data Access)策略的技术基础。OLE DB 为任何数据源提供了高性能的访问,这些数据源包括关系和非关系数据库、电子邮件和文件系统、文本和图形、自定义业务对象等等。也就是说,OLE DB 并不局限于 ISAM、Jet 甚至关系数据源,它能够处理任何类型的数据,而不考虑它们的格式和存储方法。在实际应用中,这种多样性意味着可以访问驻留在 Excel 电子数据表、文本文件、电子邮件/目录服务甚至邮件服务器,诸如 Microsoft Exchange 中的数据。但是,OLE DB 应用程序编程接口的目的是为各种应用程序提供最佳的功能,它并不符合简单化的要求。您需要的API 应该是一座连接应用程序和OLE DB 的桥梁,这就是 ActiveX Data Objects (ADO)。

二、在VC中使用ADO(开发步骤如下:) 。

1、引入ADO库文件

使用ADO前必须在工程的stdafx.h头文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下所示:

用#import引入ADO库文件 。

#import "c:\program files\common files\system\ado\msado15.dll"no_namespaces rename("EOF" adoEOF")。

这行语句声明在工程中使用ADO,但不使用ADO的名字空间,并且为了避免常数冲突,将常数EOF改名为adoEOF。现在不需添加另外的头文件,就可以使用ADO接口了。

2、初始化OLE/COM库环境。

必须注意的是,ADO库是一组COM动态库,这意味应用程序在调用ADO前,必须初始化OLE/COM库环境。在MFC应用程序里,一个比较好的方法是在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境。

BOOL CMyAdoTestApp::InitInstance()。

if(!AfxOleInit())//这就是初始化COM库。

AfxMessageBox(“OLE初始化出错!”);。

return FALSE;

}

……

3、ADO接口简介

ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。

_ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。对于要返回记录的操作通常用_RecordserPtr来实现。而用_ConnectionPtr操作时要想得到记录条数得遍历所有记录,而用_RecordserPtr时不需要。

_CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,你可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。如果你只执行一次或几次数据访问操作,后者是比较好的选择。但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用_CommandPtr接口执行存储过程和SQL语句。

_RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_RecordsetPtr的connection成员变量,让它自己创建数据连接。如果你要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr接口。

,然后使用_RecordsetPtr执行存储过程和SQL语句。

4、使用_ConnectionPtr接口。

_ConnectionPtr主要是一个连接接口,取得与数据库的连接。它的连接字符串可以是自己直接写,也可以指向一个ODBC DSN。

_ConnectionPtr pConn;。

if (FAILED(pConn.CreateInstance("ADODB.Connection")))。

AfxMessageBox("Create Instance failed!");。

return;

CString strSRC;。

strSRC="Driver=SQL Server;Server=";。

strSRC+="suppersoft";。

strSRC+=";Database=";。

strSRC+="mydb";。

strSRC+=";UID=SA;PWD=";。

CString strSQL = "Insert into student(no,name,sex,address) values(3,'aaa','male','beijing')";。

_variant_t varSRC(strSRC);。

_variant_t varSQL(strSQL);。

_bstr_t bstrSRC(strSRC);。

if (FAILED(pConn->Open(bstrSRC,"","",-1)))。

AfxMessageBox("Can not open Database!");。

pConn.Release();。

return;

COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);。

pConn->Execute(_bstr_t(strSQL),&vtOptional,-1);。

pConn.Release();。

AfxMessageBox("ok!");。

5、使用_RecordsetPtr接口(以连接SQL Server为例)。

_RecordsetPtr pPtr;。

if (FAILED(pPtr.CreateInstance("ADODB.Recordset")))。

AfxMessageBox("Create Instance failed!");。

return FALSE;

CString strSRC;。

strSRC="Driver=SQL Server;Server=";。

strSRC+="210.46.141.145";。

strSRC+=";Database=";。

strSRC+="mydb";。

strSRC+=";UID=sa;PWD=";。

strSRC+="sa";

CString strSQL = "select id,name,gender,address from personal";。

_variant_t varSRC(strSRC);。

_variant_t varSQL(strSQL);。

if(FAILED(pPtr->Open(varSQL,varSRC,adOpenStatic,adLockOptimistic,adCmdText)))。

AfxMessageBox("Open table failed!");。

pPtr.Release();。

return FALSE;

while(!pPtr->GetadoEOF())。

_variant_t varNo;。

_variant_t varName;。

_variant_t varSex;。

_variant_t varAddress;。

varNo = pPtr->GetCollect ("id");。

varName = pPtr->GetCollect ("name");。

varSex = pPtr->GetCollect ("gender");。

varAddress = pPtr->GetCollect ("address");。

CString strNo =(char *)_bstr_t(varNo);。

CString strName =(char *)_bstr_t(varName);。

CString strSex =(char *)_bstr_t(varSex);。

CString strAddress =(char *)_bstr_t(varAddress);。

strNo.TrimRight();。

strName.TrimRight();。

strSex.TrimRight();。

strAddress.TrimRight();。

int nCount = m_list.GetItemCount();。

int nItem = m_list.InsertItem (nCount,_T(""));。

m_list.SetItemText (nItem,0,strNo);。

m_list.SetItemText (nItem,1,strName);。

m_list.SetItemText (nItem,2,strSex);。

m_list.SetItemText (nItem,3,strAddress);。

pPtr->MoveNext();。

pPtr->Close();。

pPtr.Release();。

6、使用_CommandPtr接口。

_CommandPtr接口返回一个Recordset对象,并且提供了更多的记录集控制功能,以下代码示例了使用_CommandPtr接口的方法:

代码:使用_CommandPtr接口获取数据。

_CommandPtr pCommand;。

_RecordsetPtr pRs;。

pCommand.CreateInstance(__uuidof(Command));。

pCommand->ActiveConnection=pConn;。

pCommand->CommandText="select * from student";。

pCommand->CommandType=adCmdText;。

pCommand->Parameters->Refresh();。

pRs=pCommand->Execute(NULL,NULL,adCmdUnknown);。

_variant_t varValue = pRs->GetCollect("name");。

Cstring strValue=(char*)_bstr_t(varValue);。

7、关于数据类型转换由于COM对象是跨平台的,它使用了一种通用的方法来处理各种类型的数据,因此Cstring 类和COM对象是不兼容的,我们需要一组API来转换COM对象和C++类型的数据。_vatiant_t和_bstr_t就是这样两种对象。它们提供了通用的方法转换COM对象和C++类型的数据。

详情请见 http://hi.baidu.com/lninglove/blog/item/3f6cec22959e4ca34723e833.html。

Ws2_32.lib是做什么用的?的相关图片

Ws2_32.lib是做什么用的?

简单德说

分为3种

1.是通过一种被称为“BHO”(Browser Helper Object,浏览器辅助对象)的技术手段植入系统的。 关于BHO 可以去百科看看。

2.就是 Hook (钩子)分为 本地钩子(Local Hook)和全局钩子(Global Hook),本地钩子只在本进程里起作用,全局钩子代码必须以DLL形式编写,以便在钩子生效时被其它进程所加载调用,因此我们看到的大部分Hook程序都是DLL形式的。

举个例子 3721的主程序就是一个Hook DLL,它监视IE地址栏的消息,一旦用户输入的是中文,它便在其他BHO类插件工作之前拦截了这个消息,并调用自身代码完成中文域名到英文URL的转换工作,然后返回(也可能与自己的BHO DLL配合)一个让IE跳转到英文URL的消息,完成域名的翻译任务。 流氓软件就是这个原理。

3.Winsock LSP 全称为“Windows Socket Layered Service Provider”(分层服务提供商)SPI是一种不能独立工作的技术,它依赖于系统商已经存在的基本协议提供商,如TCP/IP协议等,在这些协议上派分出的子协议即为“分层协议”,如SSL等,它们必须通过一定的接口函数调用,LSP就是这些协议的接口通过LSP,我们可以比分析基本协议更简单的得到我们想要的数据内容,如直接得到系统上运行的浏览器当前正在进行传输的地址和内容,不管这个浏览器是IE,还是Opera或Firefox,因为LSP是直接从Winsock获取信息的。

LSP用在正途上可以方便程序员们编写监视系统网络通讯情况的Sniffer,可是现在常见的LSP都被用于浏览器劫持,也用作流氓软件 。

---如果还有疑问或者问题补充。

---请直接百度HI联系

--丨Mc丶Any丶。

该库对应ws2_32.dll,提供了对以下网络相关API的支持,若使用其中的API,则应该将ws2_32.lib加入工程(否则需要动态载入ws2_32.dll)。

accept

bind

closesocket

connect

getpeername

getsockname

getsockopt

htonl

htons

ioctlsocket

inet_addr

inet_ntoa

listen

ntohl

ntohs

recv

recvfrom

select

send

sendto

setsockopt

shutdown

socket

GetAddrInfoW

GetNameInfoW

WSApSetPostRoutine。

FreeAddrInfoW

WPUCompleteOverlappedRequest。

WSAAccept

WSAAddressToStringA。

WSAAddressToStringW。

WSACloseEvent

WSAConnect

WSACreateEvent

WSADuplicateSocketA。

WSADuplicateSocketW。

WSAEnumNameSpaceProvidersA。

WSAEnumNameSpaceProvidersW。

WSAEnumNetworkEvents。

WSAEnumProtocolsA。

WSAEnumProtocolsW。

WSAEventSelect

WSAGetOverlappedResult。

WSAGetQOSByName。

WSAGetServiceClassInfoA。

WSAGetServiceClassInfoW。

WSAGetServiceClassNameByClassIdA。

WSAGetServiceClassNameByClassIdW。

WSAHtonl

WSAHtons

gethostbyaddr

gethostbyname

getprotobyname

getprotobynumber。

getservbyname

getservbyport

gethostname

WSAInstallServiceClassA。

WSAInstallServiceClassW。

WSAIoctl

WSAJoinLeaf

WSALookupServiceBeginA。

WSALookupServiceBeginW。

WSALookupServiceEnd。

WSALookupServiceNextA。

WSALookupServiceNextW。

WSANSPIoctl

WSANtohl

WSANtohs

WSAProviderConfigChange。

WSARecv

WSARecvDisconnect。

WSARecvFrom

WSARemoveServiceClass。

WSAResetEvent

WSASend

WSASendDisconnect。

WSASendTo

WSASetEvent

WSASetServiceA

WSASetServiceW

WSASocketA

WSASocketW

WSAStringToAddressA。

WSAStringToAddressW。

WSAWaitForMultipleEvents。

WSCDeinstallProvider。

WSCEnableNSProvider。

WSCEnumProtocols。

WSCGetProviderPath。

WSCInstallNameSpace。

WSCInstallProvider。

WSCUnInstallNameSpace。

WSCUpdateProvider。

WSCWriteNameSpaceOrder。

WSCWriteProviderOrder。

freeaddrinfo

getaddrinfo

getnameinfo

WSAAsyncSelect

WSAAsyncGetHostByAddr。

WSAAsyncGetHostByName。

WSAAsyncGetProtoByNumber。

WSAAsyncGetProtoByName。

WSAAsyncGetServByPort。

WSAAsyncGetServByName。

WSACancelAsyncRequest。

WSASetBlockingHook。

WSAUnhookBlockingHook。

WSAGetLastError。

WSASetLastError。

WSACancelBlockingCall。

WSAIsBlocking

WSAStartup

WSACleanup

__WSAFDIsSet

WEP

原文地址:http://www.qianchusai.com/ProviderHook.html

minority造句简单,the minority of造句

minority造句简单,the minority of造句

用show造句简单一点,show造句简单一点i做主语

用show造句简单一点,show造句简单一点i做主语

二年级下学期数学思维导图,二年级下学期数学思维导图第五单元苹果树

二年级下学期数学思维导图,二年级下学期数学思维导图第五单元苹果树

circulation-70

circulation-70

interj,interjection怎么读

interj,interjection怎么读

relish,热痢是什么症状

relish,热痢是什么症状

texas是什么品牌

texas是什么品牌

academy,academy的形容词形式

academy,academy的形容词形式

heinous-190

heinous-190

简短工作激励语,工作简短精辟的励志句子

简短工作激励语,工作简短精辟的励志句子