簡易Windows密碼檢視器

2021-09-21 11:36:20 字數 3635 閱讀 2304

[標題]:簡易windows密碼檢視器 

[時間]:2009-10-09 

[摘要]:通過全域性鉤子獲取當前滑鼠處的視窗控制項控制代碼,然後直接呼叫getwindowtext()獲取密碼文字。 

[關鍵字]:密碼、檢視、星號、全域性鉤子、hook、wm_copydata、dll、xp樣式 

[環境]:visual studio 2008、visual c++ 6.0 

[作者]:天堂露珠 ([email protected]

[正文]:

此密碼檢視器原理:通過全域性鉤子獲取當前滑鼠處的視窗控制項控制代碼,然後直接呼叫getwindowtext()獲取密碼文字。工程在vc++6.0和vs2008中編譯通過。

1、檢視密碼的dll工程

因為檢視密碼功能要用到全域性滑鼠hook,所以要把功能放到乙個dll中。

passwordviewermousehookdll.h:

#pragma once

#ifdef pswmousehookdll_api_exports 

#define pswmousehookdll_api __declspec(dllexport) 

#else 

#define pswmousehookdll_api __declspec(dllimport) 

#endif

/* 

winty:2009-09-29 

呼叫sethook()設定hook,但無需解除安裝hook,dllmain中有清理。 

*/ 

//my declaration******************************== 

#define maxcount 200 //密碼最大長度 

#define dwdata_psw_notify 1 //copydatastruct的dwdata自定義值

//密碼資訊結構體,用於傳送 

typedef struct tagpswnotify 

pswnotify , *ppswnotify;

/*extern表示這裡只是變數宣告,變數定義在cpp檔案中*/ 

extern pswmousehookdll_api bool g_breadysend;//wm_copydata互斥的標誌,因為wm_copydata不能重疊 

extern pswmousehookdll_api hwnd g_hwnd; //接收訊息的窗體控制代碼 

extern pswmousehookdll_api hhook g_hhk; //鉤子控制代碼 

extern pswmousehookdll_api bool g_bview;//是否需要檢視密碼

//滑鼠鉤子過程 

pswmousehookdll_api lresult callback mouseproc(int ncode, wparam wparam, lparam lparam ); 

//設定鉤子(可在視窗的oninitdialog()中呼叫) 

pswmousehookdll_api void sethook(hwnd hwnd);

passwordviewermousehookdll.cpp:

#include "stdafx.h"

#define pswmousehookdll_api_exports 

#include "passwordviewermousehookdll.h"

#include

//程序間共享資料,還要在鏈結器選項裡新增:"/section:.myshare,rws" 

//或: #pragma   comment(linker,"/section:.myshare,rws")  

//檢視結果:dumpbin /headers *.dll 

#pragma data_seg(".myshare") 

hhook g_hhk = null;/*hook控制代碼*/ 

hwnd  g_hwnd = null;/*接收訊息的視窗控制代碼*/ 

bool  g_breadysend = true;/*用於同步copydata訊息*/ 

#pragma data_seg() 

#pragma   comment(linker,"/section:.myshare,rws")

bool apientry dllmain( handle hmodule, 

dword  ul_reason_for_call, 

lpvoid lpreserved 

break; 

case dll_thread_attach: 

case dll_thread_detach: 

break;

return true; 

}

lresult callback mouseproc( 

int ncode,      // hook code 

wparam wparam,  // message identifier 

lparam lparam   // mouse coordinates 

}

return callnexthookex(g_hhk , ncode , wparam ,lparam); 

}

void sethook(hwnd hwnd) 

dll要想將密碼訊息傳送到主視窗顯示,要用wm_copydata訊息(或其它程序間通訊方式),否則會傳送失敗。如果用wm_settext,因為全域性hook傳送的訊息所帶的字串指標lparam可能不能被主視窗訪問,從而造成訪問異常。

g_breadysend的設定是因為wm_copydata訊息不能連續傳送,必須等前一條訊息取走之後才能傳送下一條訊息。

2、顯示密碼的工程passwordviewer

建立乙個對話方塊工程passwordviewer。

使用dll步驟:

如果要設定最後生成xp樣式的視窗,得在passwordviewerdlg.cpp 中加入

#pragma comment(linker,"/manifestdependency:\"type='win32' name='microsoft.windows.common-controls' version='6.0.0.0' processorarchitecture='x86' publickeytoken='6595b64144ccf1df' language='*'\"")

passwordviewerdlg.cpp主要**為響應wm_copydata訊息,把訊息內容顯示到視窗上:

bool cpasswordviewerdlg::oncopydata(cwnd* pwnd, copydatastruct* pcopydatastruct) 

else 

}

別忘了要在cpasswordviewerdlg::oninitdialog()中呼叫dll的sethook(m_hwnd),初始化全域性鉤子。

3、執行

執行結果如圖:

[附件]:

passwordviewer.zip:

passwordviewer.exe、passwordviewermousehookdll.dll、工程源**

附件:

mysql事件檢視器 MYSQL事件檢視器使用介紹

要檢視當前是否已開啟事件排程器 show variables like event scheduler 開啟事件檢視器 set global event scheduler 1 建立事件 語法 create event if not exists event name on schedule sch...

檔案檢視器

上節課中學習了如何載入乙個網路,這節課接著上節課的 來寫乙個引導程式。首先,可以重用上節課中的載入的 新新增的東西就是,乙個button,乙個text文字標籤,乙個filedialog檔案對話方塊。具體 如下 import qtquick 2.2 import qtquick.window 2.1 ...

檔案檢視器

linux上的檔案操作是真的不會,c語言裡靜態變數的用法也不清楚,全是參考學長的部落格,學到了好多 include include include include include define maxsize 100 using namespace std void showdirstructure...