?? mento supplicantdlg.cpp
字號:
"System\\CurrentControlSet\\Services\\Class\\NetTrans\\0001";
CString sDNSSubKey;
CString sNGSubKey;
LPDWORD lpcbData = &cbData;
CString sForNetGate = "DefaultGateway";
CString sForDNS = "NameServer";
CString sForNetMask = "IPMask";
CString sClassIDofNIC;
//注冊表主鍵打開
sNGSubKey.Format( "%s", lpNGSubKey );
sDNSSubKey.Format( "%s", lpDNSSubKey );
WriteDebugInfo("InitNICP"," >> Step 0");
//獲得初始化系統設置 IP Mask NetGate DNS
if ( m_pCurrentNIC == NULL )
{
PrintOutput( "請確認你裝有具有外網網址的網卡"," ** 沒有合適的網卡",true);
return false;
}
m_IP[0] = m_pCurrentNIC->m_bIP[0];
m_IP[1] = m_pCurrentNIC->m_bIP[1];
m_IP[2] = m_pCurrentNIC->m_bIP[2];
m_IP[3] = m_pCurrentNIC->m_bIP[3];
kResult = ::RegOpenKeyEx( HKEY_LOCAL_MACHINE, sNGSubKey, NULL,
KEY_EXECUTE, &kLocalMachine);
if( kResult != ERROR_SUCCESS )
{
DWORD dwTemp = GetLastError();
LPVOID lpMsgBuf;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, dwTemp, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf, 0, NULL );
PrintOutput( (const char*)lpMsgBuf ," ** 初始化網絡配置參數錯誤!!", true );
return false;
}
WriteDebugInfo("InitNICP"," >> Step 2");
//初始化網關參數
dwType = REG_MULTI_SZ;
cbData = 50;
kResult = ::RegQueryValueEx( kLocalMachine, sForNetGate, NULL, &dwType,
lpData, lpcbData);
if(kResult != ERROR_SUCCESS)
{
DWORD dwTemp = GetLastError();
m_bStartupConnect = false;
LPVOID lpMsgBuf;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, dwTemp, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf, 0, NULL );
PrintOutput( (const char*)lpMsgBuf ," ** 獲取網關參數錯誤!!", true );
return false;
}
{
unsigned short int i1,i2,i3,i4;
m_sNetGate = lpData;
sscanf( (const char*)lpData, "%d.%d.%d.%d", &i1, &i2, &i3, &i4);
m_NetGate[0] = (byte) i1;
m_NetGate[1] = (byte) i2;
m_NetGate[2] = (byte) i3;
m_NetGate[3] = (byte) i4;
}
WriteDebugInfo("InitNICP"," >> Step 3");
//初始化網絡掩碼參數
dwType = REG_MULTI_SZ;
cbData = 50;
kResult = ::RegQueryValueEx( kLocalMachine, sForNetMask, NULL, &dwType,
lpData, lpcbData);
if(kResult != ERROR_SUCCESS)
{
DWORD dwTemp = GetLastError();
m_bStartupConnect = false;
LPVOID lpMsgBuf;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, dwTemp, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf, 0, NULL );
PrintOutput( (const char*)lpMsgBuf ," ** 獲取網絡掩碼錯誤!!", true );
return false;
}
{
unsigned short int i1,i2,i3,i4;
sscanf( (const char*)lpData, "%d.%d.%d.%d", &i1, &i2, &i3, &i4);
m_NetMask[0] = (byte) i1;
m_NetMask[1] = (byte) i2;
m_NetMask[2] = (byte) i3;
m_NetMask[3] = (byte) i4;
}
::RegCloseKey(kLocalMachine);
kResult = ::RegOpenKeyEx( HKEY_LOCAL_MACHINE, lpDNSSubKey, NULL,
KEY_EXECUTE, &kLocalMachine);
if( kResult != ERROR_SUCCESS )
{
DWORD dwTemp = GetLastError();
LPVOID lpMsgBuf;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, dwTemp, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf, 0, NULL );
PrintOutput( (const char*)lpMsgBuf ," ** 初始化DNS參數錯誤!!", true );
return false;
}
WriteDebugInfo("InitNICP"," >> Step 4");
//初始化DNS參數
dwType = REG_SZ;
cbData = 50;
kResult = ::RegQueryValueEx( kLocalMachine, sForDNS, NULL, &dwType,
lpData, lpcbData);
if(kResult != ERROR_SUCCESS)
{
DWORD dwTemp = GetLastError();
m_bStartupConnect = false;
LPVOID lpMsgBuf;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, dwTemp, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf, 0, NULL );
PrintOutput( (const char*)lpMsgBuf ," ** 獲取DNS錯誤!!", true );
return false;
}
::RegCloseKey(kLocalMachine);
for ( int i=0 ; i<50 ; i++ )
{
if ( lpData[i] == ',' )
{
lpData[i] = '\0';
break;
}
else if ( lpData[i] == '\0' )
break;
}
{
unsigned short int i1,i2,i3,i4;
sscanf( (const char*)lpData, "%d.%d.%d.%d", &i1, &i2, &i3, &i4);
m_DNS1[0] = (byte) i1;
m_DNS1[1] = (byte) i2;
m_DNS1[2] = (byte) i3;
m_DNS1[3] = (byte) i4;
}
return true;
}
void CMentoSupplicantDlg::SetShellIconState(int IState)
{
if ( m_iCallWay == 0 && m_bMinimizeModeSign )
{
m_Notify.cbSize = sizeof(NOTIFYICONDATA);
m_Notify.hWnd = GetSafeHwnd();
m_Notify.uID = 0;
m_Notify.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
m_Notify.uCallbackMessage = WM_COMMAND;
switch ( m_iState )
{
case IDT_DISCONNECT:
m_Notify.hIcon = (HICON)LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDI_FAILED),IMAGE_ICON,16,16,NULL);
lstrcpy(m_Notify.szTip,"Mento Supplicant -- 認證失敗或未認證!!");
break;
case IDT_FIND_SERVER:
case IDT_ACK_NAME:
case IDT_ACK_PSWD:
m_Notify.hIcon = (HICON)LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDI_CERTTING),IMAGE_ICON,16,16,NULL);
lstrcpy(m_Notify.szTip,"Mento Supplicant -- 正在認證...");
break;
case IDT_ACK_ECHO:
m_Notify.hIcon = (HICON)LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDI_SUCCESS),IMAGE_ICON,16,16,NULL);
lstrcpy(m_Notify.szTip,"Mento Supplicant -- 認證成功!!");
break;
}
Shell_NotifyIcon( NIM_MODIFY, &m_Notify );
}
}
void CMentoSupplicantDlg::SwitchSystemState(int IState)
{
if ( m_iState == IState )
return;
else
m_iState = IState;
OnSetShellIconState(IState);
CheckAndSetButtonStatus();
switch( IState ) {
case IDT_DISCONNECT:
SetBrandLabel( " ** 認證失敗或未認證!!" );
break;
case IDT_FIND_SERVER:
SetBrandLabel( " >> 尋找服務器 ..." );
break;
case IDT_ACK_NAME:
SetBrandLabel( " >> 發送用戶名 ..." );
break;
case IDT_ACK_PSWD:
SetBrandLabel( " >> 發送密碼 ..." );
break;
case IDT_ACK_ECHO:
if( m_ServerMsgSign)
SetBrandLabel( ":: 請注意服務器系統消息!!" );
else
SetBrandLabel( " :: 認證成功!!" );
if ( m_bConnectMinimize )
OnMinimize();
break;
case IDSHELL_FAILED:
SetBrandLabel( " ** 認證失敗!!" );
break;
}
}
void CMentoSupplicantDlg::OnInteligenceReconnect()
{
UpdateData();
}
void CMentoSupplicantDlg::OnArtificalAddressEnable()
{
UpdateData();
CheckAndSetButtonStatus();
}
void CMentoSupplicantDlg::FillNetParamater(byte ForFill[])
{
ForFill[ 0] = Alog( m_IP[0] );
ForFill[ 1] = Alog( m_IP[1] );
ForFill[ 2] = Alog( m_IP[2] );
ForFill[ 3] = Alog( m_IP[3] );
ForFill[ 4] = Alog( m_NetMask[0] );
ForFill[ 5] = Alog( m_NetMask[1] );
ForFill[ 6] = Alog( m_NetMask[2] );
ForFill[ 7] = Alog( m_NetMask[3] );
ForFill[ 8] = Alog( m_NetGate[0] );
ForFill[ 9] = Alog( m_NetGate[1] );
ForFill[10] = Alog( m_NetGate[2] );
ForFill[11] = Alog( m_NetGate[3] );
ForFill[12] = Alog( m_DNS1[0] );
ForFill[13] = Alog( m_DNS1[1] );
ForFill[14] = Alog( m_DNS1[2] );
ForFill[15] = Alog( m_DNS1[3] );
ForFill[16] = Alog( circleCheck[0] );
ForFill[17] = Alog( circleCheck[1] );
}
int CMentoSupplicantDlg::SendFindServerPacket()
{
static byte broadPackage[0x3E8] = { //廣播包,用于尋找服務器
0x00,0x00,0x00,0x00,0x00,0x00, //Destination
0x00,0x00,0x00,0x00,0x00,0x00, //Source
0x88,0x8E, //Ethertype = 0x888E (8021X)
0x01, //Version = 1
0x01, //Packet Type 0x00 ;0x01,EAPOL-Start ;0x02 ;0x03 ;0x04
0x00,0x00, //Packet Body Length
0xFF,0xFF,0x37,0x77,0xFF,0xFC,0xEA,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //*實達專有響應附加包
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x15,0x00,0x00,0x13,0x11,0x38,0x30,0x32, //
0x31,0x78,0x2E,0x65,0x78,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x1F,0x00, //
0x00,0x00,0x00,0x00,0x13,0x11,0x00,0x28,0x1A,0x28,0x00,0x00,0x13,0x11,0x17,0x22, //
0x92,0x68,0x64,0x66,0x92,0x94,0x62,0x66,0x91,0x93,0x95,0x62,0x93,0x93,0x91,0x94, //
0x64,0x61,0x64,0x64,0x65,0x66,0x68,0x94,0x98,0xA7,0x61,0x67,0x65,0x67,0x9C,0x6B}; //
/*yte ackShida[] = { //實達專有響應附加包
0xFF,0xFF,0x37,0x77,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x08,0x15,0x00,0x00,0x13,0x11,0x38,0x30,0x32,0x31,0x78,
0x2E,0x65,0x78,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x29,0x00,0x00,0x00,
0x00,0x00,0x13,0x11,0x00,0x28,0x1A,0x28,0x00,0x00,0x13,0x11,0x17,0x22,0x93,0x91,
0x65,0x65,0x62,0x60,0x66,0x96,0x93,0x68,0x91,0x62,0x91,0x67,0x66,0x61,0x96,0x91,
0x64,0x68,0x93,0x62,0x69,0x64,0x61,0x69,0xc9,0xD3,0x62,0x65,0x67,0x68,0x00,0x00,
0x13,0x11,0x18,0x06};*/
WriteDebugInfo("CertProcess"," >> Step 0");
if ( m_iSelectedMode == 1 )
memcpy( broadPackage, StarAddr, 6 );
else
memcpy( broadPackage, StandardAddr, 6 );
memcpy( broadPackage+6, bLocalMAC, 6 ); //填充MAC地址
FillNetParamater( &ackShida[0x05]);
for(int i=0 ; i<0x74 ; i++ )
broadPackage[18+i] = ackShida[i];
m_OutputCtl.AddString(" >> 尋找服務器 ...");
//發送認證請求"客戶端發起認證"
return pcap_sendpacket( m_pCurrentNIC->m_pHandle, broadPackage, 0x3E8 );
}
int CMentoSupplicantDlg::SendNamePacket()
{
static byte ackPackage[0x3E8] = { //應答包,包括用戶名和MD5
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x8E,0x01,0x00,
0x00,0x0D,0x02,0x01,0x00,0x0D,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x37,0x77,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x11,0x38,0x30,0x32,0x31,0x78,0x2E,
0x65,0x78,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
/* byte ackShida[] = { //實達專有響應附加包
0xFF,0xFF,0x37,0x77,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x08,0x15,0x00,0x00,0x13,0x11,0x38,0x30,0x32,0x31,0x78,
0x2E,0x65,0x78,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x29,0x00,0x00,0x00,
0x00,0x00,0x13,0x11,0x00,0x28,0x1A,0x28,0x00,0x00,0x13,0x11,0x17,0x22,0x93,0x91,
0x65,0x65,0x62,0x60,0x66,0x96,0x93,0x68,0x91,0x62,0x91,0x67,0x66,0x61,0x96,0x91,
0x64,0x68,0x93,0x62,0x69,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x13,0x11,0x18,0x06};*/
int iNameLen = m_sName.GetLength();
WriteDebugInfo("CertProcess"," >> Step 1");
for( int i=0 ; i<6 ; i++ )
ackPackage[i] = bDestMAC[i]; //將目的MAC地址填入組織回復的包
for( i=0 ; i<6 ; i++ )
ackPackage[i+6] = bLocalMAC[i]; //將本機MAC地址填入組織回復的包
ackPackage[18] = 0x02; //code,2代表應答
ackPackage[19] = bIndentify;
*(short *)(ackPackage+16) = ntohs((short)(5+m_sName.GetLength()));//len
*(short *)(ackPackage+20) = *(short *)(ackPackage+16);//len
for( i=0 ; i<iNameLen ; i++)
*(ackPackage+23+i) = *(m_sName.GetBuffer(0)+i); //填入用戶名
// FillNetParamater(&ackPackage[0x24]);
FillNetParamater( &ackShida[0x05] );
for( i=0 ; i<0x74 ; i++ )
ackPackage[0x17+m_sName.GetLength()+i] = ackShida[i];
PrintOutput(" >> 發送用戶名 ... ");
//iRtn = pcap_sendpacket(m_pCurrentNIC->m_pHandle,ackPackage,23+m_sName.GetLength());
return pcap_sendpacket( m_pCurrentNIC->m_pHandle, ackPackage, 0x3E8 );
}
int CMentoSupplicantDlg::SendPasswordPacket()
{
static byte ackPackage[0x3E8] = { //應答包,包括用戶名和MD5
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x8E,0x01,0x00,
0x00,0x0D,0x02,0x01,0x00,0x0D,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x37,0x77,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x11,0x38,0x30,0x32,0x31,0x78,0x2E,
0x65,0x78,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
byte md5src[30],*md5Dig;
int iLen,i;
WriteDebugInfo("CertProcess"," >> Step 2");
bpMD5Source = bMD5Source;
iLen = ntohs(*(short *)(bpMD5Source+16));
for( i=0 ; i<iLen+16 ; i++ )
ackPackage[i] = *(bpMD5Source+i);
iLen = ntohs(*(short *)(bpMD5Source+16));
for( i=0 ; i<6 ; i++ )
ackPackage[i] = bDestMAC[i]; //將目的MAC地址填入組織回復的包
for( i=0 ; i<6 ; i++ )
ackPackage[i+6] = bLocalMAC[i]; //將本機MAC地址填入組織回復的包
ackPackage[18] = 0x02; //code,2代表應答
ackPackage[19] = bpMD5Source[19]; //ID
*(ackPackage+22) = *(bpMD5Source+22); //type,即應答方式
*(short *)(ackPackage+16) = ntohs((short)( 22+m_sName.GetLength()) );//len
*(short *)(ackPackage+20) = *(short *)( ackPackage+16 );
md5src[0] = ackPackage[19];//ID
for( i=0 ; i<m_sPassword.GetLength() ; i++ )
md5src[1+i] = *( m_sPassword.GetBuffer(0) + i );//密碼
for( i=0 ; i<(int)*(ackPackage+23) ; i++ )
md5src[1+m_sPassword.GetLength()+i] = bMD5Source[24+i];//密匙
md5Dig = ComputeHash( md5src, 1+(int)*(ackPackage+23)+ m_sPassword.GetLength() );
for( i=0 ; i<(int)*(ackPackage+23) ; i++ )
ackPackage[24+i] = md5Dig[i];
for( i=0 ; i<m_sName.GetLength() ; i++ )
ackPackage[24+(int)*(ackPackage+23)+i] = *( m_sName.GetBuffer(0)+i );
FillNetParamater( &ackShida[0x05] );
for( i=0 ; i<0x74 ; i++ )
ackPackage[24+(int)*(ackPackage+23)+m_sName.GetLength()+i] = ackShida[i];
PrintOutput(" >> 發送密碼 ... ");
return pcap_sendpacket( m_pCurrentNIC->m_pHandle, ackPackage, 0x3E8 );
}
int CMentoSupplicantDlg::SendEchoPacket()
{
static byte echoPackage[] = { //echo包,用于每5秒鐘激活一次
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x8E,0x01,0xBF,
0x00,0x1E,0xFF,0xFF,0x37,0x77,0x7F,0x9F,0xF7,0xFF,0x00,0x00,0xFF,0xFF,0x37,0x77,
0x7F,0x9F,0xF7,0xFF,0x00,0x00,0xFF,0xFF,0x37,0x77,0x7F,0x3F,0xFF};
ULONG_BYTEARRAY uCrypt1,uCrypt2,uCrypt1_After,uCrypt2_After;
WriteDebugInfo("CertProcess"," >> Step 3");
m_uSerialNo.ulValue++;
uCrypt1.ulValue = m_uKey.ulValue + m_uSerialNo.ulValue;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -