什么是黑客,不同于骇客,黑客一词来源于“Hacker”,意思是劈,斩,对于黑客来说学会入侵和破解是提升自己和学习的过程,最重要的是编程能力,因为依赖大多数工具是体现不出自己水平的,所以这样说来很多安全软件公司的程序猿本身就是高明的黑客。?
但是,骇客就不是这样了,骇客本身不需要学习如此多的语言,他们追求的是入侵的快感,盗取人家的私密,看现在网上大量艳照的流出,基本都是骇客干的好事,他们不一定会编程,也不一定有高深的技术,也不知道入侵具体细节,就是利用现有的工具来达到他们的目的,骇客的入门门槛很低,所以社会上出现了越来越多的骇客,给社会造成巨大的损失。?
而对于黑客来说,黑客是有原则的我们看下黑客守则:?
1. 不恶意破坏任何的系统, 这样作只会给你带来麻烦。恶意破坏它人的软件将黑客守则?
黑客守则?
导致法律责任, 如果你只是使用电脑, 那仅为非法使用。 注意:千万不要破坏别人的文件或数据。
不修改任何系统文件, 如果你是为了要进入系统而修改它, 请在达到目的后将它还原;如果为了隐藏自己的侵入而作的修改, 仍须维持原来系统的安全性, 不得因得到系统的控制权而破坏原有的安全性。
不要轻易的将你要 Hack 的站点告诉你不信任的朋友。
不要在 bbs/论坛上谈论关于你 Hack 的任何事情。
在 Post 文章的时候不要使用真名。
入侵期间, 不要随意离开你的电脑。
不要入侵或攻击电信/政府机关的主机。
不在电话中谈论关于你 Hack 的任何事情。
将你的笔记放在安全的地方。
话就说到这里现在开始学习我们的鼠标钩子:首先大家准备好VS2008,2010,VS2012,新建一个空的–windows应用程序–win32项目–项目名称Spy,意思是间谍。为该项目添加一个对话框资源,对着新建项目点击鼠标右键–添加–资源–Dialog,然后拖拉控件,做成如下UI:?
?
然后开始对每个控件ID进行修改,修改ID是为了之后代码更好调用。?
我们目前5个控件:?
1.Dialog ID:IDD_DIALOG?
2.Static Text ID:IDC_STATIC?
3.Edit Control ID:IDC_EDIT?
4.Button ID:IDCOK?
5.Button ID:IDCCANCEL?
修改ID值需要右键控件,属性–修改ID
接下来是进入代码部分了右键项目创建一个cpp文件,文件名为“PswSpy”意思是 password spy 键盘监听器。代码如下:
#include "resource.h" #include <Windows.h> #include<iostream> using namespace std; //全局钩子句柄 HHOOK hHook=NULL; ///////////////////////////// //函数声明部分 ///////////////////////////// //鼠标钩子过程 LRESULT CALLBACK HookProc(int code,WPARAM wparam,LPARAM lparam); //窗口过程 int CALLBACK DlgProc(HWND hDlg,UINT uMmsg,WPARAM wParam,LPARAM lParam ); //主函数 int APIENTRY WinMain(__in HINSTANCE hInstance,__in_opt HINSTANCE hPrevIntance,__in_opt LPSTR lpCmdLine,__in int nShowCmd){ return DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG),NULL,DlgProc);//绑定ID,方法,类似于安卓findviewByID //根据对话框模板资源创建一个模态对话框 } //窗口过程处理函数,处理消息事件 /* HWND 待接收消息的窗口句柄 UINT 指定被发送的消息 WPARAM指定附加的消息参数 LPARAM指定附加的消息参数 */ int CALLBACK DlgProc(HWND hDlg,UINT uMmsg,WPARAM wParam,LPARAM lParam )//这里wParam低16位表示控件ID号,高16位表示消息通知码 { switch (uMmsg) {//控件给父窗口发送通知 case WM_COMMAND: { switch (LOWORD(wParam)) { case IDCCANCEL: { UnhookWindowsHookEx(hHook); EndDialog(hDlg,wParam);//关闭窗口,hDLG表示要清除的窗口句柄 } break; case IDCOK: { //调用鼠标钩子过程函数 hHook=SetWindowsHookEx(WH_JOURNALRECORD,HookProc,GetModuleHandle(NULL),0); } break; } } break; case WM_CLOSE: { EndDialog(hDlg,0); } break; } return 0; } //调用鼠标钩子函数 LRESULT CALLBACK HookProc(int code,WPARAM wparam,LPARAM lparam){ HWND hwnd; POINT point; //获得鼠标位置 GetCursorPos(&point); //得到鼠标的窗口句柄; hwnd=WindowFromPoint(point); //得到窗口风格 long nStyle=GetWindowLong(hwnd,GWL_STYLE); EVENTMSG * event=(EVENTMSG * )lparam; //是否为密码左键 if(event->message==WM_LBUTTONDOWN){ //判断是否为密码框 if(nStyle&ES_PASSWORD){ PostMessage(hwnd,EM_SETPASSWORDCHAR,0,0); } } return CallNextHookEx(hHook,code,wparam,lparam); }
?我们来测试一下效果,ctrl+F5组合键运行代码:?
在对话框输入密码:
?鼠标点击查看后将鼠标移到密码框点击鼠标左键,发现密码显示出来了
?
这个过程可能杀毒软件,360会提示你键盘被监控了,这里一个小小的星号密码查看器级别还是较低,刚刚浮出水面就被发现了,我们再随意找几个自己编的软件试试,发现成功破译了,但是当我打开QQ或者是较为熟知的软件,我的鼠标钩子就不起作用了,原因是人家的软件早就防你这手啦,那么做到这里相信大家对鼠标钩子是什么感到好奇吧。?
Windows将Edit Control的Password属性设为true来提高用户输入密码安全性,但是这种窗口密码并不安全,在windows2000以前,可以向远程进程密码编辑框发送WM_GWTTEXT来获取密码,于是windows学聪明了,之后的版本已经不允许跨进程密码读取了,但是高端的方法又出来了,黑客可以讲代码注入到远程进程的方法来获取密码。
然而我们的密码查看器就比较简单了,主要就是通过改变远程窗口密码编辑框password属性直接显示密码?
流程:?
当前进程通过响应WM_MOUSEMOVE获取鼠标指针位置,根据坐标获取窗口句柄,得到窗口名称和风格,判断是不是密码框,然后发送PostMessage(hwnd,EM_SETPASSWORDCHAR,0,0);,取消密码框password属性,这样密码就以明文方式显示出来了。
?
?
?
原文:http://429899791.iteye.com/blog/2266269