?? smartkiddlg.cpp
字號:
// smartkidDlg.cpp : 實現文件
//
#include "stdafx.h"
#include "smartkid.h"
#include "smartkidDlg.h"
#include "AboutCtrl.h"
#include "Login.h"
#include "Splash.h"
#include ".\smartkiddlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#define WM_SHOWTASK WM_USER+10
// 用于應用程序“關于”菜單項的 CAboutDlg 對話框
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 對話框數據
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 實現
protected:
DECLARE_MESSAGE_MAP()
public:
CAboutCtrl m_AboutCtrl;
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
CString strCredits = "\t智慧小子 SmartKid\n\n"
"\rProgrammed by:\n"
"菠菜 songbohr@gmail.com\n\n"
"\rSpecial thanks to:\n冰血封情\nFr.Qaker\nZV\nGxter\nzzzevazzz\nharambo\nand RedSword\n\n"
"\rCopyright (c)2006-2007 \n\r夢軟科技有限公司\n"
"\rAll right reserved.\n\n"
"Solutions at http://www.dream2fly.net\n";
m_AboutCtrl.SetCredits(strCredits);
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_ABOUTCTRL, m_AboutCtrl);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
void CAboutDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
SendMessage( WM_CLOSE );
CDialog::OnLButtonDown(nFlags, point);
}
bool g_stop=true;
// CsmartkidDlg 對話框
CsmartkidDlg::CsmartkidDlg(CWnd* pParent /*=NULL*/)
: CDialog(CsmartkidDlg::IDD, pParent)
, m_domain(_T(""))
, m_isspecial(false)
, m_startport(21)
, m_endport(80)
, m_drdosport(80)
, m_ddosport(80)
, m_reflectport(_T("179"))
, m_scantype(_CONNECT)
, m_ddostype(_SYN)
, m_drdostype(_SYN)
, m_threadnum(200)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
CsmartkidDlg::~CsmartkidDlg()
{
}
void CsmartkidDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_URL, m_url);
DDX_Control(pDX, IDC_EMAIL, m_email);
DDX_Control(pDX, IDC_REFLECTLIST, m_reflectlist);
DDX_IPAddress(pDX, IDC_REFLECTIP, m_reflectip);
DDX_Text(pDX, IDC_TARGETDOMAIN, m_domain);
DDX_Text(pDX, IDC_STARTPORT, m_startport);
DDX_Text(pDX, IDC_ENDPORT, m_endport);
DDX_Text(pDX, IDC_DRDOSPORT, m_drdosport);
DDX_Text(pDX, IDC_DDOSPORT, m_ddosport);
DDX_Text(pDX, IDC_REFLECTPORT, m_reflectport);
DDX_Text(pDX, IDC_THREADNUM, m_threadnum);
DDX_Control(pDX, IDC_IPPORT, m_listInfo);
DDX_Control(pDX, IDC_ATTACKIPADDRESS, m_ctrtargetip);
DDX_Control(pDX, IDC_LOCALIP, m_ctrlocalip);
DDX_Control(pDX, IDC_REFLECTIP, m_ctrreflectip);
}
BEGIN_MESSAGE_MAP(CsmartkidDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_ADDIP, OnBnClickedAddip)
ON_BN_CLICKED(IDC_LOAD, OnBnClickedLoad)
ON_BN_CLICKED(IDC_SAVE, OnBnClickedSave)
ON_LBN_DBLCLK(IDC_REFLECTLIST, OnLbnDblclkReflectlist)
ON_BN_CLICKED(IDC_SCANPORT, OnBnClickedScanport)
ON_BN_CLICKED(IDC_DOMAINTOIP, OnBnClickedDomaintoip)
ON_BN_CLICKED(IDC_CHECKALL, OnBnClickedCheckall)
ON_BN_CLICKED(IDC_DDOSATTACK, OnBnClickedDdosattack)
ON_BN_CLICKED(IDC_DRDOSATTACK, OnBnClickedDrdosattack)
ON_BN_CLICKED(IDC_SYN, OnBnClickedSyn)
ON_BN_CLICKED(IDC_DDOSSYN, OnBnClickedDdossyn)
ON_BN_CLICKED(IDC_DDOSICMP, OnBnClickedDdosicmp)
ON_BN_CLICKED(IDC_DRDOSSYN, OnBnClickedDrdossyn)
ON_BN_CLICKED(IDC_DRDOSICMP, OnBnClickedDrdosicmp)
ON_BN_CLICKED(IDC_PAUSE, OnBnClickedPause)
ON_WM_LBUTTONDOWN()
ON_COMMAND(ID_ABOUT, OnAbout)
ON_COMMAND(ID_FAQ, OnFaq)
ON_COMMAND(ID_UPDATE, OnUpdate)
ON_COMMAND(ID_OPENSOURCE, OnOpensource)
ON_BN_CLICKED(IDC_TRAY, OnBnClickedTray)
ON_MESSAGE(WM_SHOWTASK,OnShowTask)
ON_WM_CLOSE()
END_MESSAGE_MAP()
// CsmartkidDlg 消息處理程序
BOOL CsmartkidDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 將\“關于...\”菜單項添加到系統菜單中。
// IDM_ABOUTBOX 必須在系統命令范圍內。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 設置此對話框的圖標。當應用程序主窗口不是對話框時,框架將自動
// 執行此操作
SetIcon(m_hIcon, TRUE); // 設置大圖標
SetIcon(m_hIcon, FALSE); // 設置小圖標
#ifndef _DEBUG
CLogin loginDlg;
loginDlg.DoModal();
OS_LEVEL os_level=get_win32_type();
if(os_level==WIN_XP_SP2)
{
AfxMessageBox("系統檢測到您的操作系統是WIN_XP_SP2,\n\n此系統目前只能使用connect掃描功能!");
}
#endif
CSplashWnd::ShowSplashScreen(this);
Sleep(1000);//同步splash延遲
m_prog=(CProgressCtrl*)GetDlgItem(IDC_SCANPROGRESS);
((CButton *)GetDlgItem(IDC_CHECKALL))->SetCheck(BST_CHECKED);
m_isspecial=true;
GetDlgItem(IDC_STARTPORT)->EnableWindow(FALSE);
GetDlgItem(IDC_ENDPORT)->EnableWindow(FALSE);
((CButton *)GetDlgItem(IDC_DDOSSYN))->SetCheck(BST_CHECKED);
((CButton *)GetDlgItem(IDC_DRDOSSYN))->SetCheck(BST_CHECKED);
//初始化信息列表框
m_listInfo.InsertColumn(0,"IP",LVCFMT_LEFT,0,0);
m_listInfo.InsertColumn(1,"PORT",LVCFMT_LEFT,0,0);
m_listInfo.SetColumnWidth(0,100);
m_listInfo.SetColumnWidth(1,60);
///<獲取本機IP地址
m_localip=GetLocalIP();
m_ctrlocalip.SetWindowText("您的本機IP:"+m_localip);
//初始化窗體IP
//m_ctrtargetip.SetAddress(192,168,1,139);
m_ctrreflectip.ClearAddress();
m_url.SetURL(_T("http://www.dream2fly.net"));
m_url.SetUnderline(FALSE);
m_email.SetURL(_T("mailto:songbohr@gmail.com"));
m_email.SetUnderline(FALSE);
return TRUE; // 除非設置了控件的焦點,否則返回 TRUE
}
void CsmartkidDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 如果向對話框添加最小化按鈕,則需要下面的代碼
// 來繪制該圖標。對于使用文檔/視圖模型的 MFC 應用程序,
// 這將由框架自動完成。
void CsmartkidDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于繪制的設備上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使圖標在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 繪制圖標
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
//當用戶拖動最小化窗口時系統調用此函數取得光標顯示。
HCURSOR CsmartkidDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CsmartkidDlg::OnBnClickedAbout()
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
void CsmartkidDlg::OnBnClickedAddip()
{
UpdateData(true);
if(m_reflectip>0)
{
char* reflectip=new char[256];
u_long reflect_ip=htonl(m_reflectip);
TransformIp(reflectip,reflect_ip,true);
strcat(reflectip,":");
m_reflectlist.AddString(reflectip+m_reflectport);
delete []reflectip;
}
}
void CsmartkidDlg::OnBnClickedLoad()
{
CFileDialog LoadDlg(true);
LoadDlg.m_ofn.lpstrTitle = "導入反射源地址";
if (LoadDlg.DoModal()==IDOK)
{
CString strFileName=LoadDlg.GetPathName();
CFile file(strFileName,CFile::modeRead);
UINT len=static_cast<UINT>(file.GetLength());
char *buf = new char[len];
file.Read(buf,len);
UINT i=0,j=0;
while(i<len)
{
if ((buf[i]=='\r')&&(buf[i+1]=='\n'))
{
buf[i] = '\0';
m_reflectlist.AddString(buf + j);
j = i + 2;
i+=2;
}
else if ((buf[i]!='\r')&&(buf[i]=='\n'))
{
buf[i] = '\0';
m_reflectlist.AddString(buf + j);
j = i + 1;
++i;
}
else
{
++i;
}
}
delete []buf;
file.Close();
}
}
void CsmartkidDlg::OnBnClickedSave()
{
CFileDialog SaveDlg(false);
SaveDlg.m_ofn.lpstrTitle = "導出反射源地址";
if (SaveDlg.DoModal()==IDOK)
{
CString strFileName=SaveDlg.GetPathName ();
CFile file(strFileName,CFile::modeWrite|CFile::modeCreate);
CString strCurSel;
CString strEnd="\r\n";
for(int i=0;i<m_reflectlist.GetCount();i++)
{
m_reflectlist.GetText(i,strCurSel);
strCurSel.Append(strEnd);
file.Write (strCurSel,strCurSel.GetLength());
}
file.Close () ;
MessageBox("成功導出反射源地址列表!");
}
}
void CsmartkidDlg::OnLbnDblclkReflectlist()
{
m_reflectlist.DeleteString (m_reflectlist.GetCurSel());
}
BOOL CsmartkidDlg::check_target_ip(void)
{
if(m_ctrtargetip.IsBlank())
{
MessageBox("請輸入IP地址",_T("錯誤"),MB_ICONWARNING|MB_OK);
return -1;
}
DWORD ip;
if(m_ctrtargetip.GetAddress(ip)<4)
{
MessageBox("請輸入完整的IP地址",_T("錯誤"),MB_ICONWARNING|MB_OK);
return -1;
}
m_ctrtargetip.GetWindowText(m_targetip);
if(0==m_targetip.Compare("208.113.145.214"))
{
AfxMessageBox("用偶的工具攻擊俺的站,不厚道啊!");
return -1;
}
return 0;
}
void CsmartkidDlg::OnBnClickedScanport()
{
g_stop=false;
if(-1==check_target_ip())
return;
if(m_startport>m_endport)
{
MessageBox(_T("開始端口必須小于等于結束端口!"));
return;
}
m_listInfo.DeleteAllItems();
UpdateData(true);
m_portscan.start_scan();
}
void CsmartkidDlg::OnBnClickedDdosattack()
{
g_stop=false;
if(-1==check_target_ip())
return;
UpdateData(true);
m_ddos.start_ddos();
}
void CsmartkidDlg::OnBnClickedDrdosattack()
{
g_stop=false;
UpdateData(true);
if(-1==check_target_ip())
return;
if(m_reflectlist.GetCount()==0)
{
AfxMessageBox("反射源列表不能為空!");
return;
}
std::vector<CString> reflectlist;
CString strCurSel;
for(int i=0;i<m_reflectlist.GetCount();i++)
{
m_reflectlist.GetText(i,strCurSel);
reflectlist.push_back(strCurSel);
}
m_drdos.start_drdos(reflectlist);
}
void CsmartkidDlg::OnBnClickedDomaintoip()
{
UpdateData(true);
if (m_domain.Find ("dream2fly.net",0)>=0)
{
AfxMessageBox("用偶的工具攻擊俺的站,不厚道啊!");
return;
}
if (m_domain.Find ("eviloctal.com",0)>=0)
{
AfxMessageBox("曾經滄海,八進制門前止步!");
return;
}
hostent* pHostent = gethostbyname(m_domain.GetBuffer());
if (pHostent == 0)
{
AfxMessageBox("輸入的域名無效!");
return;
}
for (int nAdapter=0; pHostent->h_addr_list[nAdapter]; nAdapter++)
{
char* ipaddr = NULL;
in_addr inaddr;
inaddr.s_addr=*(DWORD*)pHostent->h_addr_list[nAdapter];
ipaddr= inet_ntoa(inaddr);
m_ctrtargetip.SetWindowText(ipaddr);
break;
}
UpdateData(false);
}
void CsmartkidDlg::OnBnClickedCheckall()
{
m_isspecial=m_isspecial?false:true;
if(m_isspecial)
{
GetDlgItem(IDC_STARTPORT)->EnableWindow(FALSE);
GetDlgItem(IDC_ENDPORT)->EnableWindow(FALSE);
}
else
{
GetDlgItem(IDC_STARTPORT)->EnableWindow(TRUE);
GetDlgItem(IDC_ENDPORT)->EnableWindow(TRUE);
}
}
void CsmartkidDlg::OnBnClickedSyn()
{
if(m_scantype==_CONNECT)
{
m_scantype=_SYN;
}
else
{
m_scantype=_CONNECT;
}
}
void CsmartkidDlg::OnBnClickedDdossyn()
{
m_ddostype=_SYN;
}
void CsmartkidDlg::OnBnClickedDdosicmp()
{
m_ddostype=_ICMP;
}
void CsmartkidDlg::OnBnClickedDrdossyn()
{
m_drdostype=_SYN;
}
void CsmartkidDlg::OnBnClickedDrdosicmp()
{
m_drdostype=_ICMP;
}
void CsmartkidDlg::OnBnClickedPause()
{
g_stop=true;
}
void CsmartkidDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
//鼠標拖動窗口
SendMessage(WM_SYSCOMMAND,0xF012,0);
CDialog::OnLButtonDown(nFlags, point);
}
void CsmartkidDlg::OnAbout()
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
void CsmartkidDlg::OnFaq()
{
WinExec("notepad.exe fag.txt",SW_SHOW);
}
void CsmartkidDlg::OnUpdate()
{
UINT ret=WinExec("update.exe smartkid 0.90 http://www.dream2fly.net/projects/smartkid_update.ini" ,SW_SHOW);
if(ERROR_FILE_NOT_FOUND==ret)
{
AfxMessageBox("夢軟升級軟件丟失!請確認update.exe是否存在!");
}
}
void CsmartkidDlg::OnOpensource()
{
CString url="http://www.dream2fly.net/";
ShellExecute(NULL, _T("open"), url, NULL,NULL, SW_NORMAL);
}
void CsmartkidDlg::OnBnClickedTray()
{
NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uCallbackMessage=WM_SHOWTASK;//自定義的消息名稱
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(nid.szTip,"智慧小子SmartKid");//信息提示條
Shell_NotifyIcon(NIM_ADD,&nid);//在托盤區添加圖標
ShowWindow(SW_HIDE);//隱藏主窗口
}
LRESULT CsmartkidDlg::OnShowTask(WPARAM wParam,LPARAM lParam)
//wParam接收的是圖標的ID,而lParam接收的是鼠標的行為
{
if(wParam!=IDR_MAINFRAME)
{
return 1;
}
switch(lParam)
{
case WM_RBUTTONUP://右鍵起來時彈出快捷菜單,這里只有一個“關閉”
{
{
POINT point;
::GetCursorPos(&point);//得到鼠標位置
CMenu menu;
menu.CreatePopupMenu();//聲明一個彈出式菜單
//增加菜單項“關閉”,點擊則發送消息WM_DESTROY給主窗口(已
//隱藏),將程序結束。
menu.AppendMenu(MF_STRING,WM_DESTROY,"關閉");
//確定彈出式菜單的位置
menu.TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);
//資源回收
HMENU hmenu=menu.Detach();
menu.DestroyMenu();
}
break;
}
case WM_LBUTTONDBLCLK://雙擊左鍵的處理
{
static bool IsTray=true;
if(IsTray)
{
IsTray=false;
this->ShowWindow(SW_SHOW);//簡單的顯示主窗口完事兒
}
else
{
IsTray=true;
this->ShowWindow(SW_HIDE);//簡單的隱藏主窗口完事兒
}
}
break;
}
return 0;
}
void CsmartkidDlg::OnClose()
{
if(g_stop==false)
{
AfxMessageBox("請先停止攻擊或掃描線程!");
return;
}
CDialog::OnClose();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -