简介这份易语言QQ密码获取演示源码适合易语言入门者、Windows API调用学习者以及安全防护方向的开发者研究核心目标是演示如何通过系统级API对窗口与键盘状态进行监听。资源共4个文件以.e源码工程为主另含htm与txt两种格式的说明文档以及一个网址快捷方式整体压缩包仅5KB轻量便于随时打开对比。源码在窗口程序集1中实现了完整的调用流程__启动窗口_创建完毕里初始化时钟周期_时钟1_周期事件中通过GetClassNameA与FindWindowExA配合枚举窗口再用GetForegroundWindow判断是否处于前台配合GetAsyncKeyState获取按键状态最后用GetWindowTextA读取窗口标题。说明文档对所用Dll、各部分功能以及运行逻辑作了简要梳理能帮助读者快速建立从窗口查找到键盘捕获的整体认识。已有1167人学习下载是一份结构紧凑、知识点集中的易语言Win32 API实践样本也适合作为反制QQ木马的逆向分析参考。1. QQ 被盗号案的背后为什么总是见到易语言的身影群里有人甩了个文件名字起得像照片压缩包里面是个图标很好看的程序。只要你双击它会在后台开个线程隔几秒扫一遍桌面窗口找到 QQ 登录框后就开始在你眼皮底下动作。等你在键盘上敲完密码账号已经在异地登录了。这类样本在网安圈子里的通用叫法就是“易语言偷QQ密码家族”。本文站在蓝队和系统维护者视角不做任何攻击代码教学而是把这类程序的特征、拆解路径和清理手段讲清楚让丢过号的人知道怎么查让做安全分析的人知道怎么下手也让被迫处理单位电脑里这类玩意的运维有一条完整的处置流程。2. 先搞清楚这类样本的套路易语言为什么成了盗号程序的重灾区深入分析一个易语言盗号样本之前得先理解一个反常的现象为什么这些年来盗号程序的开发语言集中在易语言而不是 Delphi、VC 或 Python答案不在语言本身的执行效率而在于易语言这个生态在“快速组装恶意功能”这件事上门槛低到了几乎为零。2.1 易语言的开发门槛和支持库体系让恶意功能变成了拼积木易语言是中文关键字的编程语言写界面、写逻辑对初学者非常友好。但这只是表面原因。真正让盗号样本扎堆的是易语言社区里那套积累了很多年的支持库生态。支持库在易语言里是 FNE/FNR 文件封装了系统 API。窗口操作支持库、内存操作支持库、网络通信支持库、注册表操作支持库这些正常情况下是做软件用的但同样可以被用来组装一个可运行的恶意程序。举个典型的例子社区里经常讨论的“启动线程”命令在易语言里只是一行代码编译后是对 CreateThread 的封装。盗号样本里常见的逻辑是启动一个常驻线程负责遍历窗口标题再启动一个线程做键盘钩子再启动一个线程做网络发送。三个线程各干各的主程序只负责隐藏窗口和伪装图标。这套东西如果用 C 写新手至少要折腾一周用易语言写一个熟悉支持库调用的人一个晚上就能拼出来。从分析者的视角看这个生态还带来了一个额外特征易语言程序编译出来后许多支持库文件名是明文嵌入的比如 krnln.fnr 是核心库exui.fne 是扩展界面库这些字符串在未加壳的样本里可以直接搜到。这也是我们后面做静态识别和 YARA 规则的重要依据。2.2 盗号样本的眼球盯在哪里密码框、登录状态和验证码所谓“偷QQ密码”在真实的样本行为里其实不是一个动作而是三个目标的交叉键盘输入的原生密码、登录后的会话凭证Token、拖拽验证码或扫码登录时的验证码数据。易语言盗号样本的常见模块化设计基本就围绕这三样东西展开。行为模块常见实现方向分析者关注的关键 API 或特征窗口遍历枚举顶层窗口匹配 QQ 登录窗口类名或标题FindWindowEx、GetWindowText键盘捕获安装全局钩子或轮询按键状态SetWindowsHookEx、GetAsyncKeyState内存读取打开 QQ 进程句柄读取登录相关内存段OpenProcess、ReadProcessMemory网络回传把采集到的数据加密后发到指定服务器send、InternetWriteFile、加密字符串自启动保持注册表 Run 键、计划任务、服务RegSetValue、CreateService这里的重点不是教人怎么实现而是让防御者理解样本中的任何单一行为都不可怕可怕的是多模块组合后的效果。所以分析时要特别留意进程的线程数量易语言盗号程序几乎不会开单线程至少会有一个主线程加一个常驻行为线程。看到多线程加网络发包基本可以圈定嫌疑范围。还有一个常见操作是反调试。很多易语言样本在“启动线程”里顺带加了一个反调试循环不断调用 IsDebuggerPresent 或者检测窗口标题里有没有 OllyDbg、x64dbg 字样。这也是为什么很多新手把样本扔进 OD 里直接崩掉的原因后面避坑章节我会专门讲这个。3. 静态拆解从加壳识别到易语言伪代码还原静态分析首先回答三个问题文件加壳没有是不是易语言编译的以及能不能直接还原出关键逻辑。动手之前我习惯先把样本丢进哈希工具记录 MD5/SHA256然后开始过壳。别嫌这一步啰嗦很多人的分析翻车就翻在壳没识别清楚就硬上 OD结果调试了半天都在和花指令搏斗。3.1 先过加壳检测DIE 和 PE 区段一眼定真假疑似易语言的样本到手第一步是用 Detect It EasyDIE看壳。DIE 能识别出常规的 VMP、ASP 壳、UPX 等也能看到编译器特征。未加壳的易语言程序在 DIE 里通常会显示为“EPL(Compiled)”或者“Borland Delphi/易语言”之类的特征标签识别不了的再用下一步的区段分析。只看 DIE 还不够因为盗号样本很喜欢用 VMP 之类的保护壳来抹掉编译特征。我用了一个小脚本快速看 PE 文件的区段名区段名是最直观的证据。标准编译的 PE 文件区段通常是 .text、.data、.rdata 这类三个到四个区段的组合加过强壳或加花工具的样本区段名往往变成乱码或者多出许多意义不明的区段。下面这个脚本不依赖第三方库直接读 PE 头import struct def pe_section_names(file_path): with open(file_path, rb) as f: data f.read(4096) if data[:2] ! bMZ: return [] pe_off struct.unpack_from(I, data, 0x3C)[0] if data[pe_off:pe_off 4] ! bPE\0\0: return [] num_sections struct.unpack_from(H, data, pe_off 6)[0] opt_size struct.unpack_from(H, data, pe_off 20)[0] sec_off pe_off 24 opt_size names [] for i in range(num_sections): raw data[sec_off i * 40: sec_off i * 40 8] name raw.rstrip(b\x00).decode(utf-8, errorsreplace) names.append(name) return names if __name__ __main__: import sys for sec in pe_section_names(sys.argv[1]): print(sec)这段代码的关键在于 PE 头的偏移计算。文件偏移 0x3C 处存的是 PE 头相对文件头的偏移PE 头里偏移 6 处是节区数量偏移 20 处是可选头大小节区表紧跟在可选头后面。每个节区条目固定 40 字节前 8 字节是区段名。看到输出为vmp0、vmp1之类的区段名说明该样本用 VMProtect 加壳了。看到输出区段数量异常多超过 10 个或者区段名是随机字符也要高度警惕。这一步就把样本分成两类可直接静态分析的和必须动态脱壳的。3.2 易语言反编译还原启动线程、支持库调用和窗口逻辑如果样本没有加壳或者只是 UPX 这类简单壳接下来就是易语言分析最有意思的部分用易语言反编译工具把程序还原成接近源码的形式。社区里这类工具的思路基本都是两条线一条是直接提取字符串另一条是把易语言程序的字节码特征反向映射回支持库函数名。先把文件用 UPX 脱壳如果有的话或者直接拖进反编译工具。工具扫描完成后重点看三个地方一是“启动线程”附近的代码块二是窗口类名和标题的比对逻辑三是网络发送相关的支持库函数。以典型的盗号样本为例反编译后的伪代码会很容易看到类似“启动线程(子程序1)”和“取窗口标题”这样的调用序列。这不是原始源码但足以帮助分析者快速定位行为逻辑。启动线程在易语言中对应的底层函数是 CreateThread反编译工具会把线程入口地址标出来。在这个地址上下断点是动态分析的快捷入口。如果遇到 VMP 强壳反编译工具通常会直接失效因为易语言程序的特征信息在加壳时被抹掉了。这时候的常规做法是动态调试先运行样本让壳把原始代码解密到内存然后用 OllyDbg 或 x64dbg 附加进程做内存转储对转储出来的文件再做字符串和逻辑分析。常见做法是让样本在虚拟机里跑起来在 CreateThread 和 ReadProcessMemory 这两个 API 上下断点等触发后 dump 内存再回到反编译那一步。这条路线每一步都可能踩坑我放到第五部分集中讲。4. 动态行为分析与现场清理让样本自己交代清楚静态分析只能给出“可能做了什么”要确认样本到底干了什么、把数据发到哪、怎么实现自启动必须做动态行为分析。动态分析的核心原则是环境可控、样本孤立、行为可见。这三条缺一条分析结论就可能是错的。4.1 隔离环境与快照策略用什么虚拟机、怎么准备系统我一般用 VMware Workstation 建一台 Windows 7 x64 的分析机。选 Win7 而不是 Win10/11是因为 Win7 对老易语言程序的兼容性最好很多易语言支持库在更高版本的 Windows 上会因权限模型变化而运行异常反而导致样本行为不一致。给分析机安装 Process Monitor、Process Explorer、Wireshark、x64dbg 和 OD然后做一次干净快照。配置项推荐值理由虚拟机软件VMware Workstation 或 VirtualBox快照恢复效率高系统版本Windows 7 x64 SP1易语言样本兼容性最好杀软关闭实时防护避免样本被杀、分析工具被杀网卡仅主机模式观察网络连接但不外联快照分析前制作干净快照每轮分析后一键回滚强调一下“仅主机模式”这个选项。很多新手把网卡设置成 NAT 模式样本真的把数据往外发了如果那个 C2 域名还没失效就是一次真实的对外攻击行为。仅主机模式下分析机只能和宿主通信样本的网络发包行为仍然能被 Wireshark 抓到但不会真正连接到外网。这是动态分析里很重要的一条基线。4.2 行为采集注册表、进程树、线程和网络连接样本运行后Process Monitor 会抓取所有进程的注册表、文件、网络操作。直接看全量日志不现实我习惯等样本跑完两分钟后导出 CSV再用脚本过滤出关键操作。重点关注三件事写入 Run 键的注册表操作、释放的 DLL 文件路径、以及网络连接的远程地址。下面这个脚本专门过滤 Process Monitor 导出的 CSV挑出和自启动相关的注册表写入import csv import sys def find_run_keys(csv_path): with open(csv_path, newline, encodingutf-8, errorsignore) as f: reader csv.DictReader(f) for row in reader: op row.get(Operation, ) path row.get(Path, ) if RegSetValue in op and CurrentVersion\\Run in path: print(f{op} | {path} | {row.get(Result, )}) if __name__ __main__: find_run_keys(sys.argv[1])参数说明Operation字段是 Process Monitor 的事件类型RegSetValue代表写入注册表键值Path是注册表路径Result显示操作是否成功。脚本会筛出所有写入 Run 键的条目自启动行为在这一步基本无处可藏。除了 Run 键还要看计划任务目录schtasks相关命令和服务创建CreateService有些样本会把自启动做成计划任务来增强隐蔽性。进程线程分析上用 Process Explorer 的线程面板查看线程数量即可。易语言盗号样本的线程数一般在 3 到 6 个之间关键线程入口地址如果指向不可读的内存区域基本就是线程注入或壳的运行时解压。这个现象值得记录后面排错时能用上。4.3 从分析结论回到加固基线写不进去比杀得掉更实在动态分析的目的是什么不是为了在上面点个“已分析”而是为最终处置提供依据。分析完样本会发现易语言盗号程序虽然行为多样但绝大多数都要写注册表自启动项。那防御的发力点就清楚了让普通用户权限写不了 Run 键。以当前 Windows 用户身份执行下面的 PowerShell 脚本可以拒绝 Everyone 对当前用户 Run 键的写权限从根上挡住大部分盗号样本的持久化$keyPath HKCU:\Software\Microsoft\Windows\CurrentVersion\Run $acl Get-Acl $keyPath $rule New-Object System.Security.AccessControl.RegistryAccessRule( Everyone, SetValue, Deny ) $acl.AddAccessRule($rule) Set-Acl $keyPath $acl参数说明SetValue表示仅拒绝设置键值的权限不影响读和删除Deny优先于 Allow即使用户后来手动授权也无法覆盖。这个操作不会影响正常软件写入启动项因为正常装软件是管理员权限会有对应的提权路径。但对大多数以当前用户权限运行的盗号样本来说这就是一堵墙。如果环境里有域或批量管理的需求这个 ACL 策略可以打包成 GPO 下发到所有终端。动态分析下来的结论如果不固化成防御机制价值就少了一半。5. 易语言样本分析避坑笔记5 个高频翻车现场易语言样本的分析路径本质上是“静态特征 动态行为”两条腿走路。但这两条路上我见过太多同行翻车。下面五条全是我自己做分析时踩过的坑或者帮别人排障时遇到的问题按“现象 → 原因 → 解决”写出来每条后面都是能直接落地的经验。5.1 反编译不出易语言伪代码样本被误判成纯 C 木马现象样本在 DIE 里看不到任何易语言特征反编译工具也读不出伪代码报告里写成了“疑似 VC 编译的远控木马”。后来动态分析时却发现它用的是易语言的支持库逻辑。原因样本加过 VMP 加壳壳把易语言程序的编译特征全部抹掉了。易语言程序本质上编译后确实是一堆二进制码加上支持库调用壳一处理字符串和导入表特征都会消失。解决加壳样本不要硬怼静态直接上动态分析。让样本在虚拟机里跑起来等壳自动解码后做内存转储再对 dump 出来的文件做字符串扫描。我习惯用 x64dbg 的 Scylla 插件在 OEP原始入口点处 dump这个 dump 文件通常能恢复出易语言特征再拖回反编译工具就行了。5.2 OD 一附加就崩样本却在正常运行现象用 OllyDbg 附加到已运行的样本进程瞬间蓝屏或进程崩溃但不开调试器时样本跑得好好的。原因样本开了反调试线程常见手段是启动线程里循环调用 IsDebuggerPresent或者用 NtQueryInformationProcess 检测调试端口检测到调试器后直接调用 TerminateProcess。这种线程设计在易语言木马里很常见因为写起来太简单了。解决不用裸 OD配合 ScyllaHide 插件隐藏调试器特征它的配置文件里把 PEB 的 BeingDebugged 标志位和 NtQueryInformationProcess 的返回值全部伪造一遍。如果样本检测窗口标题就把 OD 的窗口标题改成 svchost 之类。别笑真有样本这么干。5.3 杀软把分析样本和工具一起干掉现象虚拟机里的样本刚解压完就被 Windows Defender 隔离Process Monitor 还没来得及开样本已经没了。再想复现快照恢复后发现杀软又把分析工具 OD 报毒删了。原因分析机默认开启了实时防护。易语言程序因为特征太容易被误报而很多破解版调试工具又带着敏感特征两边都被杀很正常。解决分析用的虚拟机一律关闭 Windows Defender 实时防护并在一开始做快照时就把这个关闭状态固化下来。给样本文件一律改名为.bin或放进加密压缩包防止分析环境中其他工具顺手扫描。记住分析机不是办公机杀软在这里只会添乱。5.4 雷电模拟器里跑的样本和真机行为完全不同现象拿了个疑似针对 QQ 的安卓辅助模块放在雷电模拟器里跑结果网络行为和进程行为都异常和受害用户反馈的“手机上被盗”完全对不上。原因易语言社区里大量“雷电模块”“乐玩模块”是围绕模拟器环境封装 UI 自动化的它们依赖模拟器特有的系统接口和分辨率。模拟器环境和真机的 SELinux 策略、组件调用路径不同很多行为在模拟器里根本不触发或者触发了但走的是模拟器专用的通道。解决模拟器里的行为分析结果只能作为参考不能作为最终结论。如果样本检测到模拟器特征后会自动退出或改变行为还要先做反模拟器检测绕过。建议先跑两三遍模拟器收集数据再落到真机上做一轮关键行为验证。这个双重验证的流程能让结论可靠性大幅提升。5.5 大量误报掩盖了真正有价值的 IoA现象动态分析日志里几百条警报杀毒引擎把样本关联到了一堆“风险软件”家族看起来问题很严重可真正有价值的攻击行为却完全没被注意到。原因易语言程序天然具备高误报率。易语言编写的正常工具也会被多个引擎报毒因为它的支持库行为如内存读写、模拟点击在其他语言写的程序里很少见。杀软的静态引擎倾向于“宁可误杀不可漏杀”结果就是日志里全是噪音。解决分析结论一定要以运行时行为IoA为准不以扫描引擎报告为准。手动检查的关键点就三个是否写自启动、是否尝试注入其他进程、是否有异常外联。这三个行为在 Process Monitor 和 Wireshark 里都有明确的日志记录看这些就足够下结论了。6. 进阶把易语言 VMP 样本识别规则和处置流程固化下来分析过几个家族样本之后我最大的感受是重复劳动太多了。每个样本都得从 DIE 看壳开始再走一遍动态分析流程。后来我把识别规则写进了 YARA再用一个简单的计划任务做定期扫描把被动分析变成了主动狩猎。易语言样本再怎么会伪装核心库 krnln.fnr 这个字符串在未加壳样本里几乎必然存在加壳样本在内存转储后也能找到。针对这一点可以写一条最小可用的 YARA 规则来识别疑似易语言程序rule epl_core_library_detect { meta: description Detect Easy Language compiled binaries by core library reference author defender-script strings: $krnln krnln.fnr ascii wide $exui exui.fne ascii wide condition: uint16(0) 0x5A4D and filesize 20MB and (1 of them) }这条规则的含义是文件必须是 PE 格式uint16(0) 0x5A4D判断 MZ 头大小不超过 20MB并且包含krnln.fnr或exui.fne中任意一个字符串。运行它只需要把规则存成epl_detect.yar然后执行yara epl_detect.yar /path/to/suspicious参数说明/path/to/suspicious可以是单个文件也可以是目录YARA 会自动遍历目录下的所有文件输出命中规则的样本路径。我会在规则里再加上vmp0、vmp1区段特征来识别 VMP 加壳的变体但这里只需要理解它的工作方式即可。别把这条规则当成万能的它只解决“找到疑似目标”这一步确认还要靠动态分析。处置流程上我的习惯是先断网隔离受害机用 Process Explorer 杀掉可疑进程并记录进程树然后检查 Run 键、计划任务、服务三项自启动点清理完再用反编译工具提取样本特征写进 YARA 规则供全网扫描最后给用户改密码、开登录保护。这几步按顺序做基本能把损失控制在最小范围。回看这么多年的分析经历最想补一句的是处理盗号样本时别急着下结论。我曾经因为只看了静态特征就定案说是“键盘钩子木马”结果漏掉了样本释放的第二个 DLL那才是真正做主传输的模块。从那以后每个样本我都坚持静态分析、动态分析、清理处置三步走完每一步留下日志。养成这个习惯吃亏的次数会少很多希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
Shopify AI代理落地实战:从客服自动化到本地模型选型 最近总被独立站卖家问一个问题:“大家都在说AI代理,Shopify店铺到底怎么落地?”说实话,这个问题放在一年前,我大概率会回答“再等等”,因为那时候市面上的方案要么是单点工具,要么还是基于关键词… · 2026/9/24 20:52:31
50天算法学习复盘:从冒泡排序到BEVFusion,真正难的是这两件事 1. 为什么会有"更弱智的算法学习"这个系列Day 50,一个挺微妙的节点。说长不长,毕竟网上那些"30天精通算法"的标题党都敢把周期压到一个月;说短也不短,能连续折腾50天还没放弃,说明这事儿确实有点上… · 2026/9/24 20:52:19
电脑访问WAP网站实操指南:UA切换与WML渲染全解析 前后折腾了两天,我才搞明白在电脑上完整访问WAP网站的套路。起因是帮人查一个老套餐的剩余流量,营业厅App里根本找不到那个入口,客服甩过来一个w开头的短链接,说是WAP营业厅。我在电脑浏览器里打开,页面闪了一下就跳回… · 2026/9/24 22:39:20
电脑IP地址怎么查?Windows、macOS、Linux三系统实用指南 你有没有遇到过这种情况:同事发来一串地址让你访问,你张口想问自己电脑的IP是多少,却愣是说不出来。或者公司IT让你把IP发过去,你打开设置翻半天找不到。这种事看着小,卡住的时候是真麻烦。我自己平时要折腾虚拟机、局… · 2026/9/24 22:39:20
同步电机与构网型变流器频率稳定性:Simulink虚拟同步机仿真研究 1. 同步电机与构网型变流器:频率稳定性研究的“同频共振”起点这两年做新能源并网仿真,尤其是在Matlab/Simulink里做微电网或储能PCS控制,一个绕不开的话题就是构网型变流器。它之所以火,最根本的原因是传统火力发电和水力发电里的… · 2026/9/24 22:39:07
图片批处理实战:用PS动作、脚本和命令行1分钟处理100张图 做设计这行,最折磨人的往往不是改需求,而是改完需求之后要重新导一遍图。上个月我接了一组电商换季素材,甲方甩过来120张商品图,要求统一裁成800800白底居中、右上角压统一角标、命名必须按货号来。这种活在很多人眼里属于“无脑重… · 2026/9/24 22:39:07
手把手教你查询本机IP地址:覆盖Windows/macOS/Linux全系统 前几天帮一位朋友远程调网络,聊到一半对方发来一张截图,图里是路由器后台。我问:你本机 IP 呢?他说:不就这个吗?其实那是路由器的管理地址。这种情况我见过太多次。查自己电脑的 IP 地址,听起来… · 2026/9/24 22:39:07
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44