没法编译,注释掉那四出重定义的部分编译出现netstat.obj : error LNK2001: unresolved external symbol _SnmpExtensionQuery@16
netstat.obj : error LNK2001: unresolved external symbol _SnmpExtensionInit@12而这两个函数 : Import Library: User-defined.
snmpXXXXX函数必须从inetmib1.dll里面抓过来用,而现在却抓不出来
netstat.obj : error LNK2001: unresolved external symbol _SnmpExtensionInit@12而这两个函数 : Import Library: User-defined.
snmpXXXXX函数必须从inetmib1.dll里面抓过来用,而现在却抓不出来
解决方案 »
- 自动平均算法 有任务Task 1000 A 有 12 任务在处理 B 有50 任务在处理 C 有 2 任务在处理,如何把Task 100分配到ABC使ABC平均
- windows7下如何注册系统服务??
- 写日志的话,直接写ANSI字符么?
- mfc中的gridview怎么实现
- 请问在Win32程序下如何实现Edit编辑框内容的清除或者滚动?
- 如果别人说你已经提交的代码有问题?
- 各位高手,为什么我在ListCtrl中设定的BackGround Image不起作用啊?如何才能让它显示出来?
- 高分求助:我想学学vc++有没有哪位高人指点一个合适的路子
- 谁能帮我看看~~~~~~mfc的listcontrol控件更新和删除sql server数据库的问题
- 兄弟在安天实习,做了一个小工具,欢迎使用
- 急死菜鸟拉,大家帮帮忙呀
- 请教一个问题~
HWND hWnd // handle to parent window
);
Parameters
hWnd
[in] Handle to the parent window whose child windows are to be examined. If this parameter is NULL, the function returns a handle to the window at the top of the Z order.
用api hook做的监视码?还是其他方法?
不过,所有网卡的数据都表示出来,意义不大吧?我还是喜欢针对
某程序的数据才有意义,所以用Hook。
这个link是404,没法下载hook connect这些winsock的api么?对系统的影响大不?占用资源多么?(我准备把这些做到浏览器里,浏览器需要的是快速、稳定,我不想影响太大)
不要用http://verybigbug.home.chinaren.com/Tools/ApiFunSpy.zip,有问题.
直接用上面的不行...............
chinaren的问题.没办法..对系统对系统的影响不大.
都显示说:
大家好:
这里是verybigbug的个人主页,您目前访问的这个页面尚未制作完成,请确认您访问的地址书写是否正确或稍后再尝试连接,非常感谢!
请使用主页大巴制作您的主页,或者通过新开通的FTP功能上传!
ChinaRen 我好着急啊
vpacket.vxd在98下使用没有问题,不过是否可以在NT或2000下使用?
2. 容易,
两种方法,一个是 iphelp api , 另一个是 snmp 协议。
我都已经实现,好像给你发过源码, 111222。 3. 有点难度
正在实现,nt 下返汇编老外的可执行文件。98 下自己编写。
98 下已经实现获得进程的 socket 结构,还差 socket 结构
到 tcp or udp 端口。
注:一个 socket 值 乘以 4 ,是进程句柄列表中的偏移量,
该偏移量指向一个结构,该结构的第二个 DWORD 是
socket 结构的指针。是内核中的 socket 结构。
不要认为是 api 级 winsock 结构。 1. 有一段时间的知识积累,只是没有时间去实现他希望大家以开发网络分析仪软件为目标,学习网络知识
任何程序只要你使用 socket ,我就能找到你的程序打开的端口。整理整理后发布在 http://asm386.home.sohu.com 上还有点缺点--不能查找使用 NETBIOS 通信的端口和程序原理:
遍例进程,找到进程结构,里面有句并列表。
遍例列表,查找 SOCKET 句柄(代码为 19)。
复制该 SOCKET ,取端口。由于 NETBIOS 不使用 内核SOCKET 结构所以找不到
NETBIOS 的使用情况。
在 98 下取得使用 端口 的可执行文件的名字。
98 的版本是 1998 或 2222 。 遗憾:如果该端口使用 WINSOCK 则能取到他的可执行文件的名字。
但是该端口是使用 NETBIOS 会话的话则取不到。正在想办法解决。
// qian at 2001-07-14#include "stdafx.h"
#include <windows.h>
#include <tlhelp32.h>
#include "winsock2.h"typedef BOOL (WINAPI *PROCESSWALK)(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);
typedef HANDLE (WINAPI *CREATESNAPSHOT)(DWORD dwFlags, DWORD th32ProcessID); BOOL InitUnobsfucator(void);DWORD Unobsfucator = 0;int main(int argc, char* argv[])
{ CREATESNAPSHOT pCreateToolhelp32Snapshot = NULL;
PROCESSWALK pProcess32First = NULL;
PROCESSWALK pProcess32Next = NULL;
HMODULE hKernel = NULL;
HANDLE hProcessSnap = NULL;
PROCESSENTRY32 pe32 = {0};
DWORD dwTaskCount = 0;
DWORD dwi; DWORD dwP, *pDw, *pHt;
char * p; int ret, len;
struct sockaddr addr;
struct sockaddr_in * dest;
len = sizeof(addr); //HANDLE hReadPipe, hWritePipe;
//CreatePipe( &hReadPipe, &hWritePipe, NULL, 0 ); memset( &addr, 0, len );
if(!InitUnobsfucator())
{
return(0);
}
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData); //SOCKET s;
//s = WSASocket (AF_INET, SOCK_RAW, IPPROTO_TCP, NULL, 0,0); dest = (struct sockaddr_in *) &addr;
//dest->sin_family = AF_INET;
//dest->sin_port = 1025;
//ret = bind ( s, &addr, len ); //ret = getsockname( s, &addr, &len ); hKernel = GetModuleHandle("KERNEL32.DLL");
//hKernel = LoadLibrary("KERNEL32.DLL");
if (hKernel)
{
pCreateToolhelp32Snapshot = (CREATESNAPSHOT)GetProcAddress(hKernel, "CreateToolhelp32Snapshot");
pProcess32First = (PROCESSWALK)GetProcAddress(hKernel, "Process32First");
pProcess32Next = (PROCESSWALK)GetProcAddress(hKernel, "Process32Next");
}
if (!(pProcess32First && pProcess32Next && pCreateToolhelp32Snapshot))
return 0; hProcessSnap = pCreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == (HANDLE)-1)
return 0; dwTaskCount = 0;
pe32.dwSize = sizeof(PROCESSENTRY32); // must be filled out before use
if (pProcess32First(hProcessSnap, &pe32))
{
do
{
DWORD dwNum, dwSock;
HANDLE hCurProc, hProc, hDup;
WSAPROTOCOL_INFO Proto;
int iProto ; iProto = sizeof(WSAPROTOCOL_INFO); printf( "Process : %s", pe32.szExeFile ); dwP = pe32.th32ProcessID ^ Unobsfucator;
pDw = (DWORD * )dwP;
dwP = pDw[0x11]; // 0x44
pHt = (DWORD * )dwP;
dwNum = pHt[0];
for( dwi = 0 ; dwi < dwNum ; dwi++ )
{
p = (char *)pHt[1 + dwi * 2 + 1];
if( p != 0 )
{
printf( " %d ", p[0] );
if( p[0] == 19 )
{
dwSock = dwi * 4;
//printf( "Process : %s", pe32.szExeFile ); hProc = OpenProcess( PROCESS_ALL_ACCESS, 0, pe32.th32ProcessID );
hCurProc = GetCurrentProcess();
ret = DuplicateHandle( hProc, (HANDLE)dwSock, hCurProc, &hDup, 0, 1, 2 ); if( ret == 0 )
{
ret = GetLastError();
}
CloseHandle( hProc );//DUPLICATE_SAME_ACCESS SO_MAX_MSG_SIZE
ret = getsockopt( (SOCKET)hDup, SOL_SOCKET, SO_PROTOCOL_INFO, (char *)&Proto, &iProto );
//WSANOTINITIALISED
ret = getsockname( (SOCKET)hDup, &addr, &len );
if( ret == 0 )
{
if( Proto.iProtocol == IPPROTO_TCP )
{
printf(" TCP: %d ", ntohs (dest->sin_port) );
}
else
{
if( Proto.iProtocol == IPPROTO_UDP )
{
printf(" UDP: %d ", ntohs (dest->sin_port) );
}
else
{
printf(" %d ", ntohs (dest->sin_port) );
}
}
}
//printf( "\n"); CloseHandle( hDup );
}
}
}
printf( "\n"); } while ( pProcess32Next(hProcessSnap, &pe32));
}
else
dwTaskCount = 0; CloseHandle (hProcessSnap); //printf("Hello World! %d \n", sizeof(SOCKET) );
WSACleanup ();
return 0;
}BOOL InitUnobsfucator(void)
{
#define WIN98_1998 0XBFFC99CC
#define WIN98_2222 0XBFFCA9CC OSVERSIONINFO ver;
BOOL bVer98;
DWORD dwpUnobsfucator; ver.dwOSVersionInfoSize = sizeof(ver);
dwpUnobsfucator = 0; if( GetVersionEx( &ver ) )
{
bVer98 = (ver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) &&
( (ver.dwMajorVersion == 4) && (ver.dwMinorVersion > 0) );
if ( bVer98 ) //// win98
{
if( LOWORD(ver.dwBuildNumber) == 1998 )
{
dwpUnobsfucator = WIN98_1998;
} if( LOWORD(ver.dwBuildNumber) == 2222 )
{
dwpUnobsfucator = WIN98_2222;
}
if( dwpUnobsfucator != 0 )
{
__asm {
push eax
//mov eax, 0bffca9cch
//mov eax, 0bffc99cch
mov eax, dwpUnobsfucator
mov eax, [eax]
mov [Unobsfucator], eax
pop eax
}
}
else
{
printf( "OS is win98 but not build 1998 or 2222 \n" );
bVer98 = FALSE;
} }
else
{
printf( "OS is not windows98 ! \n" );
}
}
return bVer98;
}
再实现 你说的第一个功能,...
唉... 还有很多技术不会,还有很多功能要实现,时间不够用啊,没有资料啊
Win98下可以用ZPacket.VXD包
Win2K支持SOCK_RAW模式的socket,可以直接recv IP包
ZPacket.VXD源代码:
http://www.programsalon.com/download.asp?type_id=61&pos=20
中的snowing代码
NT下可以参照上面位置的源代码GetPacketNT怎么解HTTP包请看响应的RFC协议
1、你根据什么原理定位到了进程的句柄列表?(这招太高了!)
2、怎么知道值为19的是Socket句柄,有没有相关的影射表?非常感谢!
可以 跟踪 GetCurrentProcessId() 这个 api 函数。
内核进程结构中偏移量 0x44 处是该进程使用的所有句柄列表的地址。system objects 中
在 95 的时候 pipe -- 14 mailslot -- 15 socket -- 17
到 98 的时候 每一个到加 2 。
句柄只在进程内有意义,所以应该没有相关的映射表。
BTW:上面的代码中打开的核心库hKernel没有Free。
有区别的话,区别在哪?难道WIN2K/NT在进程结构上和9X非常的区别么?
望指点!!
通过进程 id 得到的端口,使用方法是未公开的函数,和一些我还没看明白的转换。98 下关于进程的核心信息放在,2G 以上的核心区,该区对每个进程都有映射。
所以可以用直接内存地址进行访问。而且 98 的进程 id 本身就是进程核心地址
的一种变换。
看了你的讲解觉得收益非浅,我这儿有一个老外的可执行文件你要我给你,和你的程序功能是一样的。不过没有原码啊
如果不是我到想看看。我的 mail: [email protected]
http://www.csdn.net/expert/topic/86/86524.shtm
谁能发一个Fport.exe 给我 Thanks!
我的E_mail是:[email protected]