您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 黑客软件编写基础知识锦囊 - 安全编程
黑客软件编写基础知识锦囊-安全编程程序只运行一个实例,并激活前一个实例具体实现:1、在程序初始化的时候(InitInstance())枚举所有的窗口,查找本程序的实例是否存在2、在主窗口初始化的时候在本窗口的属性列表中添加一个标记,以便程序查找.部分关键代码1、在App的InitInstance()中枚举所有窗口,查找本程序实例HWNDoldHWnd=NULL;EnumWindows(EnumWndProc,(LPARAM)&oldHWnd);//枚举所有运行的窗口if(oldHWnd!=NULL){AfxMessageBox(本程序已经在运行了);::showWindow(oldHWnd,SW_SHOWNORMAL);//激活找到的前一个程序::setForegroundWindow(oldHWnd);//把它设为前景窗口returnfalse;//退出本次运行}2、添加EnumWndProc窗口过程函数://添加的标识只运行一次的属性名CStringg_szPropName=YourPropName;//自己定义一个属性名HANDLEg_hValue=(HANDLE)1;//自己定义一个属性值BOOLCALLBACKEnumWndProc(HWNDhwnd,LPARAMlParam){HANDLEh=GetProp(hwnd,g_szPropName);if(h==g_hValue){*(HWND*)lParam=hwnd;returnfalse;}returntrue;}3、在主窗口的OnInitDialog()中添加属性//设置窗口属性SetProp(m_hWnd,g_szPropName,g_hValue);探测Windows主机的NetBIOS信息NetBIOS信息在我们和远程Windows2000/XP主机建立了空会话之后,我们就有权枚举系统里的各项NetBIOS信息了。当然在某些选项中需要较高的权利,不过我们只执行那些匿名用户可以获得的绝大多数系统信息。时间:探测远程主机的当前日期和时间信息。它会返回一个数据结构,包括年,月,日,星期,时,分,秒等等。不过得到的是GMT标准时间,当然对于我们来说就应该换算为GMT+8:00了。由此可以判断出主机所在的时区信息。操作系统指纹:探测远程主机的操作系统指纹信息。一共有三种级别的探测(100,101,102),我们使用的是101级,它会返回一个数据结构,可以获取远程主机的平台标识,服务器名称,操作系统的主次版本(Windows2000为5.0,WindowsXP为5.1,而最新操作系统Longhorn的版本为6.0),服务器类型(每台主机可能同时包含多种类型信息)和注释。共享列表:探测远程主机的共享列表。我们可以获得一个数据结构指针,枚举远程主机的所有共享信息(隐藏的共享列表在内)。其中包括共享名称,类型与备注。类型可分为:磁盘驱动器,打印队列,通讯设备,进程间通讯与特殊设备。用户列表:探测远程主机的用户列表,返回一个数据结构指针,枚举所有用户信息。可获取用户名,全名,用户标识符,说明与标识信息。标识信息可以探测用户的访问权限。本地组列表:探测远程主机的本地组列表信息。枚举所有本地组信息,包含本地组名称和注释信息。组列表:探测远程主机的组列表信息。枚举所有的组信息,包括组名称,注释,组标识符与属性。在此基础上,我们可以枚举组内的所有用户信息。组用户列表:探测特定组内的用户信息。我们可以获得组内所有用户的名称。当我门获得了所有的用户列表,下一步就应该很清楚了,那就是挂一个字典进行破解了。传输协议列表:探测远程主机的传输协议信息,枚举所有的传输列表。可以获得每个传输协议的名称,地址,网络地址和当前与本传输协议连接的用户数目。会话列表:探测远程主机的当前会话列表。枚举每个会话的相关信息,包括客户端主机的名称,当前用户的名称,活动时间和空闲时间。这可以帮助我们了解远程主机用户的喜好等等。主要函数与相关数据结构分析1.建立空会话WNetAddConnection2(&nr,username,password,0);//nr为NETRESOURCE数据结构的对象;//username为建立空会话的用户名,在此将用户名设置为NULL;//password为登陆密码,在此将密码设置为NULL;2.撤消空会话WNetCancelConnection2(ipc,0,TRUE);//ipc为TCHAR的指针,我们可以这样获得://swprintf(ipc,_T(\\\\%s\\ipc$),argv[1]),argv[1]为主机名或地址;3.探测主机时间nStatus=NetRemoteTOD(server,(PBYTE*)&pBuf);//参数server为主机的名称或地址;//pBuf为TIME_OF_DAY_INFO数据结构的指针;//nStatus为NET_API_STATUS成员;4.探测操作系统指纹NetServerGetInfo(server,dwLevel,(PBYTE*)&pBuf);//dwLevel为等级数,我们选择的是101级;//pBuf是SERVER_INFO_101数据结构的指针;5.探测共享列表NetShareEnum(server,dwLevel,(PBYTE*)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);//dwLevel的等级数为1级;//pBuf是SHARE_INFO_1数据结构的指针;//MAX_PREFERRED_LENGTH指定返回数据的长度;//er指明返回的实际可以枚举的成员数目;//tr返回所有的成员数目;//resume用于继续进行共享搜索;6.探测用户列表NetQueryDisplayInformation(server,dwLevel,i,100,0xFFFFFFFF,&dwRec,(PVOID*)&pBuf);//dwLevel的等级数为1级;//i为枚举的索引;//dwRec返回获取的信息数目;//pBuf为NET_DISPLAY_USER数据结构的指针;7.探测本地组列表NetLocalGroupEnum(server,dwLevel,(PBYTE*)&pBuf,-1,&er,&tr,&resume);//dwLevel的等级是1;//pBuf返回LOCALGROUP_INFO_1数据结构的指针;8.探测组列表NetQueryDisplayInformation(server,dwLevel,i,100,0xFFFFFFFF,&dwRec,(PVOID*)&pGBuf);//dwLevel的等级为3;//pGBuf返回NET_DISPLAY_GROUP的数据结构指针;9.探测组内的用户NetGroupGetUsers(server,pGBuffer-grpi3_name,0,(PBYTE*)&pUBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);//pGBuffer-grpi3_name为组的名称;//pUBuf返回GROUP_USERS_INFO_0数据结构的指针;10.探测传输协议列表NetServerTransportEnum(server,dwLevel,(PBYTE*)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);//dwLevel的等级为0级;//pBuf返回SERVER_TRANSPORT_INFO_0数据结构的指针;11.探测会话列表NetSessionEnum(server,pszClient,pszUser,dwLevel,(PBYTE*)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);//pszClient指定客户的地址;//pszUser指定用户名;//dwLevel的等级是10级;//pBuf返回SESSION_INFO_10数据结构的指针;12.释放内存NetApiBufferFree(pBuf);//释放由系统分配的内存空间。源代码#defineUNICODE#define_UNICODE#includewindows.h#includewinnetwk.h#includetchar.h#includeinclude\lmaccess.h#includeinclude\lmserver.h#includeinclude\lmshare.h#includelm.h#pragmacomment(lib,mpr)#pragmacomment(lib,netapi32)voidstart();voidusage();intdatetime(PTSTRserver);intfingerprint(PTSTRserver);intnetbios(PTSTRserver);intusers(PTSTRserver);intlocalgroup(PTSTRserver);intglobalgroup(PTSTRserver);inttransport(PTSTRserver);intsession(PTSTRserver);intwmain(intargc,TCHAR*argv[]){NETRESOURCEnr;DWORDret;TCHARusername[100]=_T();TCHARpassword[100]=_T();TCHARipc[100]=_T();system(cls.exe);start();if(argc!=2){usage();return-1;}swprintf(ipc,_T(\\\\%s\\ipc$),argv[1]);nr.lpLocalName=NULL;nr.lpProvider=NULL;nr.dwType=RESOURCETYPE_ANY;nr.lpRemoteName=ipc;ret=WNetAddConnection2(&nr,username,password,0);if(ret!=ERROR_SUCCESS){_tprintf(_T(\nIPC$ConnectFailed.\n));return-1;}datetime(argv[1]);fingerprint(argv[1]);netbios(argv[1]);users(argv[1]);localgroup(argv[1]);globalgroup(argv[1]);transport(argv[1]);session(argv[1]);ret=WNetCancelConnection2(ipc,0,TRUE);if(ret!=ERROR_SUCCESS){_tprintf(_T(IPC$DisconnectFailed.\n));return-1;}return0;}voidstart(){_tprintf(_T(=====[T-SMBScan,byTOo2y]=====\n));_tprintf(_T(=====[E-mail:TOo2y@safechina.net]=====\n));_tprintf(_T(=====[HomePage:]=====\n));_tprintf(_T(=====[Date:12-12-2002]=====\n));}voidusage(){_tprintf(_T(\nUsage:\tT-SMBRemoteip));_tprintf(_T(\nRequest:Remotehostmustbeopeningport445/tcpofMicrosoft-DS.\n));}intdatetime(PTSTRserver){PTIME_OF_DAY_INFOpBuf=NULL;NET_API_STATUSnStatus;DWORDlerror;_tprintf(_T(\n***DateandTime***\n));nStatus=NetRemoteTOD(serve
本文标题:黑客软件编写基础知识锦囊 - 安全编程
链接地址:https://www.777doc.com/doc-3872728 .html