环境:
Windows xp sp3
工具:
masm
notepad++

首先列出本次编程程序要执行的步骤:
(1)、读取键盘所输入的字符
(2)、输出到屏幕上
(3)、完善Esc、Backspace、空格、回车的输出

首先解决(1)
这里我们可以利用int 16h的中断功能读取字符缓存区的字符

mov ah,
int 16h

执行完int 16h后 ah=扫描码 al=ASCII码

例如我们输入abc后
字符缓存区如下状态

然后执行int 16h
缓存区状态如下

前面的1E61被读进了ah和al

解决(2)
既然解决了(1),也成功读取了ASCII码到al中
这时候就是输出字符到屏幕上了

这里可以用内存中的b800H~bffffH这段32KB的空间输出
B800:0000就对应屏幕上第一列第一行了

mov ax,0b800h
mov es,ax
mov ah,
mov al,
mov es:[si],ax
add si,

高位存放该字符的属性 这里ah=2代码字符以绿色输出
地位存放该字符的ASCII码 这里选择41H(A)来测试

可以明显看到左上角屏幕出现了A

最后可以编写出大概的程序如下;

assume cs:code
code segment
start:
mov cx,2h
mov si,
ints:
mov ah,
int 16h
mov bl,al
mov ax,0b800h
mov es,ax
mov al,bl
mov ah,
mov es:[si],ax
add si,
add cx,
loop ints
mov ax,4c00h
int 21h code ends
end start

执行完int16h之后就不断的往屏幕上输出,然后si+2指向下一个字符输出的屏幕地址

随便输入几个字符,可以成功在屏幕上输出

接下来优化下Esc、Backspace、空格、回车的输出
根据上面的编程,已经知道程序是根据ASCII码到屏幕上输出的,可是Esc、Backspace、空格、回车的ASCII码不太明显
这里用cmp指令判断Esc、Backspace、空格、回车的扫描码,然后再修改对应的al中的ASCII码
程序如下

assume cs:code
code segment
start:
mov cx,2h
mov si,
ints:
mov ah,
int 16h
cmp ah,1ch
je ent
cmp ah,39h
je kg
fh:mov bl,al
mov ax,0b800h
mov es,ax
mov al,bl
mov ah,
mov es:[si],ax
add si,
add cx,
loop ints
mov ax,4c00h
int 21h ent:
mov al,19h
jmp fh
kg:
mov al,07h
jmp fh code ends
end start

编译后我们依次输入Esc、空格、回车、Backspace

可以看到屏幕出现了←(Esc)•(空格)↓(回车)◘(Backspace)

最后附上各个键盘的扫描码

注意,,程序中用了死循环!

[Assembly]汇编编写简易键盘记录器的更多相关文章

  1. 【转载】Python编写简易木马程序

    转载来自: http://drops.wooyun.org/papers/4751?utm_source=tuicool 使用Python编写一个具有键盘记录.截屏以及通信功能的简易木马. 首先准备好 ...

  2. Python编写简易木马程序(转载乌云)

    Python编写简易木马程序 light · 2015/01/26 10:07 0x00 准备 文章内容仅供学习研究.切勿用于非法用途! 这次我们使用Python编写一个具有键盘记录.截屏以及通信功能 ...

  3. 小白日记48:kali渗透测试之Web渗透-XSS(二)-漏洞利用-键盘记录器,xsser

    XSS 原则上:只要XSS漏洞存在,可以编写任何功能的js脚本 [反射型漏洞利用] 键盘记录器:被记录下的数据会发送到攻击者指定的URL地址上 服务器:kali 客户端 启动apache2服务:ser ...

  4. [C语言(VC)] 打造自己的键盘记录器 (zaroty)

    说起键盘记录,想必很多朋友都用过网上流传的一些键盘记录软件吧,但是有没有想过自己写一个呢?也许你会想:会不会很复杂啊?我可以很负责的告诉你,写键盘记录是很简单的.你所需要的仅仅是懂得一些C语言的DLL ...

  5. C# 编写简易 ASP.NET Web 服务器

    C# 编写简易 ASP.NET Web 服务器 你是否有过这样的需求——想运行 ASP.NET 程序,又不想安装 IIS 或者 Visual Studio?我想如果你经常编写 ASP.NET 程序的话 ...

  6. 警惕USB键盘记录器

    最近媒体报道了一种新型的能记录账号.密码输入的“USB键盘记录器”,引发网友关注,该设备看上去和普通U盘没什么区别,将其插入电脑USB接口,然后把键盘线和它连接,该设备就能够自动记录用户在电脑上输入的 ...

  7. wpf键盘记录器

    很简单的一个wpf键盘记录器 这个程序我一样用了全局勾子,之前用的都是winform上运行了,前一段时间 在国外的论坛上逛看到了一个wpf能用的就做了一个小程序记录一下,为了方便大家直关的看我在页面上 ...

  8. 安全之路 —— 使用Windows全局钩子打造键盘记录器

    简介 键盘记录功能一直是木马等恶意软件窥探用户隐私的标配,那么这个功能是怎么实现的呢?在Ring3级下,微软就为我们内置了一个Hook窗口消息的API,也就是SetWindowsHookEx函数,这个 ...

  9. 6.文件所有权和权限----免费设置匿名----Windows键盘记录器----简介和python模块

    文件所有权和权限 touch --help cd Desktop mkdir Folder cd Folder clear touch Test1 Test2 Test3 Test4 ls ls -l ...

随机推荐

  1. JavaScript事件冒泡与捕获

    event.preventDefault();    如果event.cancelable的值为true,可以取消默认事件 event.cancelable;             元素是否可以取消 ...

  2. 2016.5.19——vector型的输入输出

    vector型的输入输出 在上节2015.5.18——leetcode:Majority Element中纠结vector的动态输入输出问题,但是发现vector传参型的不可以动态输入输出,但是vec ...

  3. CodeForces 724G: Xor-matic Number of the Graph

    题目传送门:CF724G. 题意简述: 一张 \(n\) 个点的无向图,边有边权. 定义三元组 \((u,v,w)(1\le u < v\le n)\) 合法当且仅当存在从点 \(u\) 到点 ...

  4. 【比赛游记】THUSC2018酱油记

    day -1 早上4:30就要起来去飞机场…… 7点的飞机,10:30就到北京了. 北京的街景并没有我想像的漂亮……大概是因为我在四环外〒▽〒 晚上还有CF div3场,果断的去水了,因为太累就没有打 ...

  5. MIUI7,Android版本5.0.2,一个程序发送自定义广播,另一个程序没有接收到

    对照<第一行代码——Android>进行学习,第五章中说到广播包的相关知识,前面获取广播等程序例程都可以跑的通,但是在5.3.2节中,程序A发送自定义广播,并接收自定义广播,同时程序B也接 ...

  6. iOS开发之删除Provisioning Profiles方法

    1.在finder下打开go -> go to folder输入: ~/Library/MobileDevice/Provisioning Profiles 2.查看上面的列表,按照时间顺序删除 ...

  7. 读书笔记 effective c++ Item 48 了解模板元编程

    1. TMP是什么? 模板元编程(template metaprogramming TMP)是实现基于模板的C++程序的过程,它能够在编译期执行.你可以想一想:一个模板元程序是用C++实现的并且可以在 ...

  8. Redux-DevTools 安装

    以下以Chrome为准. 首先,从Chrome Web Store(需要***支持)下载chrome 插件 Redux DevTools. 使用方式有两种: 一种只需在代码createStore中添加 ...

  9. 为django的python manage.py加自定义命令

    计划在开发软件的过程中, 每次可以自己加入测试数据,这样就可以每次作全新的测试了. 将这个初始化django modules数据命令,将在manage.py里是最合适的. 下面我们就来实现吧. 参考文 ...

  10. Python3语法详解

    一.下载安装 1.1Python下载 Python官网:https://www.python.org/ 1.2Python安装 1.2.1 Linux 平台安装 以下为在Unix & Linu ...