【AIGC】12 行的关机程序,重编 11 次滚到 7.4 MB:靠量长度重建自我携带链,再让反编译器对一遍答案

起因 翻旧文件时找到一对 2018 年的易语言程序:一个叫「主程序」,一个叫「检查程序」。下面是主程序的源码,12 行 —— 整篇文章前半的结论全从这 12 行长出来,而检查程序那 10 行我是到第六节才把它解出来的: .版本 2 .程序集 程序集1 .子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行 ' 病毒主程序 运行 (“shutdown -s -t 10000”, 真, #隐藏窗口) .判断循环首 (1 = 1) 运行 (“shutdown -s -t 3”, 真, #隐藏窗口) .如果真 (进程_是否存在 (“looking.exe”) = 假) 写到文件 (“C:\Windows\looking.exe”, #图片1) 运行 (“C:\Windows\looking.exe”, 真, #隐藏窗口) .如果真结束 .判断循环尾 () 返回 (0) 逻辑一眼看完:先挂一个 10000 秒(≈2.8 小时)之后的关机,然后进死循环 —— 每一圈重新挂一个 3 秒后关机,并且检查 looking.exe 还在不在,不在就把自己带的 #图片1 写成 C:\Windows\looking.exe 再拉起来。 ...

【AIGC】没有易语言 IDE 也能读 .e 工程:把自己 2014–2018 的聊天器从二进制里挖出来

起点:一堆积木,但积木盒是锁着的 手上有 26 个易语言(EPL)工程文件,时间从 2014-10 到 2019-08。都是学生时代的东西:聊天器、音乐播放器、QQ 机器人、端口映射、ARP 工具、远程控制、两个小整人程序、一个 PvZ 阳光修改器。 想归档发出来,卡在一个很实际的问题上:.e 是专有二进制容器,没有易语言 IDE 就"打不开"。而我不想为了读一堆旧代码去装 IDE,更不想为了发博客把源码先重写成别的语言。 但"打不开"和"读不了"是两件事。这篇讲怎么把 .e 读出来,以及读出来以后发现的、连我自己都不记得的东西。仓库地址在最后。 第一步:判断它是"存起来"还是"锁起来" 拿到一个陌生的二进制容器,第一个问题不是"格式规范在哪",而是: ...

【AIGC】ARP 欺骗小工具:从 1.1 MB 的易语言容器里读出它到底做了什么

这批归档里时间最晚、体积最大的一个工程:ARP攻击-易语言版.e,2019-08-03,1,136,159 字节。 读 .e 容器的方法在上一篇里讲透了,这篇直接用。 窗体记录 = 一张完整的操作面板 .e 开头 10 KB 是窗体定义区,每个控件一条记录。把这一区的标题字段按顺序拉出来,就是这个工具的全部输入项: 选择网卡 标签EX7 / 编辑框EX7 本机MAC 标签EX9 / 编辑框EX9 路由器MAC 标签EX11 / 编辑框EX11 路由器IP 标签EX6 / 编辑框EX6 被欺骗MAC 标签EX8 / 编辑框EX8 发送间隔 标签EX10 / 编辑框EX10 因特发送MAC 标签EX12 / 编辑框EX13 接收者MAC ← 后面还有 接收者IP 发送者MAC 发送者IP 扫描 按钮EX2 发送 按钮EX3 应用区 分组框EX2 ARP欺骗小工具 是它的窗口标题(存在偏移 264812,扫描时首字节被上一条记录吃掉,显示成 貯RP欺骗小工具 —— 这类缺一字的串是错位读取的正常结果,不要当成原文)。 ...

【AIGC】LP 远程控制:两个 7 KB 的易语言工程,读出一套完整协议(还有一行我自己的源码)

2016-10-02。两个文件: 服务器.e 7,434 字节 客户端.e 6,749 字节 这两个是归档里最适合做全文精读的样本 —— 小到没有编进任何第三方模块,把 gbk_runs 跑一遍,全部产出是 73 条 + 55 条。方法在上一篇。 当一个工程的扫描产出不到 100 条时,你不需要任何筛选技巧,直接把全部串打印出来读就行。这是我这次归档里学到的最实用的一条:研究格式要找最小的样本,写文章也是。 把两个窗口的串并排 服务器.e —— 73 条里的非噪声部分 480 _启动窗口 842 LP 远程控制 ---byXXXXXXXXXX ← 窗口标题(QQ 号已抹) 901 按钮2 1013 记录v 1045 服务器1 ← 监听控件 1167 标签5 1331 右边是图像 1377 标签4 1541 备注 1581 标签3 1745 代码 1918 鼠标类型 1966 按钮1 2078 开始执行 2247 类型 X坐标 Y坐标 ← 一行的格式 2467 写入 备注 2512 备注编辑框 2793 写入 代码 2838 代码编辑框 2955 图片框1 3270 系统核心支持库 3330 特殊功能支持库 3939 \Data\Data代码 4170 _图片框1_鼠标位置被移动 4248 横向位置 4269 纵向位置 4290 功能键状态 4399 鼠标位置 4487 _按钮1_被单击 4726 _按钮2_被单击 4905 _服务器1_客户进入 5075 有一个客户进入…… 5111 _服务器1_数据到达 5321 __启动窗口_尺寸被改变 5567 _服务器1_客户离开 5645 _启动窗口.标题 = “对方已经关闭客户端。” ← 源码原文 5710 _图片框1_鼠标左键被按下 5939 鼠标类型 1 6029 _图片框1_鼠标右键被按下 6258 鼠标类型 3 6348 _标签5_鼠标左键被按下 6856 服务器.exe 客户端.e —— 55 条里的非噪声部分 794 请开始连接---远程客户端 849 时钟1 1073 断开连接l ← 末尾这个 l 不是我打的 1109 客户1 ← 连接控件 1385 第一个是IP第二个是端口 1555 开始连接 1591 编辑框2 1791 编辑框1 2082 系统核心支持库 2142 应用接口支持库 ← SetCursorPos 在这里 2160 EThread 2205 多线程支持库 2448 _按钮1_被单击 2693 正在连接中…… 2751 _客户1_数据到达 3178 鼠标位置 3327 鼠标类型 3392 X坐标 3526 Y坐标 3776 文本类型 4118 您已经停止了远程遥控。 4278 _客户1_连接断开 4408 对方关闭了远程控制服务端。 4673 10.240.211.233 ← 编辑框1 的默认值(学校内网) 4705 连接服务器 4982 连接成功!等待对方执行指令 5252 连接失败,请更改设置再试。 5317 _时钟1_周期事件 5426 定时拍照 ← 关键的一条 5871 鼠标移动 5891 SetCursorPos 6205 客户端.exe 关于串尾那些多余的拉丁字母 断开连接l、找回密码n、顺序播放o、重新连接至服务器(断网重连)l、发送0、检查更新l —— 我这一批工程里到处是这种"末尾多一个 ASCII 字符"的串。 ...

【AIGC】两个 8 KB 的整人小程序:32 条串里读不出热键绑了哪个键,换个反编译器就全读出来了

lp-toys 这个仓装了两个说不清用途的小东西: 鼠标跟随.e 7,211 字节 2016-04-07 用热键来整人.e 7,998 字节 2017-12-10 两个都没有编入第三方模块,扫描产出分别是 66 条和 32 条。小到不需要任何筛选技巧 —— 直接全贴出来读。方法本身在旗舰篇,这篇原来的重点是这套方法的天花板在哪。 写完之后我拿另一条路把这个天花板往上顶了一格(第三节),所以这篇现在有两部分:前面是字节扫描看到的清单,后面是同一份容器用反编译器解出来的真源码。中间那段"读不出来"的结论被推翻了,我没删,原样留着对照 —— 顺带把第一次写错的一处(C:\1.exe)也标出来。 一、鼠标跟随.e:清单就把意图说完了 480 _启动窗口 493 在程序启动后自动调入本窗口 818 时钟1 930 按钮3 1042 停止跟随 1078 按钮2 1190 开始跟随 1226 按钮1 1338 添加图片 1374 通用对话框1 1540 图片格式(*.JPG;*.GMP) 1605 动画框1 1769 图片1 1985 系统核心支持库 2009 扩展界面支持库二 2111 多线程支持库 2223 窗口程序集1 2297 图片 2379 __启动窗口_尺寸被改变 3199 _按钮1_被单击 3915 _按钮2_被单击 4040 _按钮3_被单击 4165 线程 5042 _动画框1_动画框鼠标位置改变 5124 横坐标 5143 纵坐标 5162 已被按下物体 5817 _时钟1_周期事件 5961 图片组 6087 路径 6125 执行图片 6150 标识值 6169 鼠标水平位置 6194 鼠标垂直位置 6219 鼠标横类型 6242 鼠标纵类型 6508 鼠标跟随.exe 程序意图完全透明: ...

【AIGC】五个版本的音乐播放器,和一个连作者名都还没想好的工程

五个工程,横跨一年半(2014-10 → 2016-04),是这批归档里迭代最勤的一条线: 2014-10-25 其他/lrc.e 8,349 LRC 歌词制作器 2016-01-10 播放器/音乐播放器/对照.e 7,203 惜缘音乐盒子 2016-01-10 播放器/音乐播放器16.01版源码.e 30,239 2016-03-25 播放器/音乐播放器内测.e 72,627 主力版 2016-04-12 播放器/LOL专用精便小巧播放器.e 2,962 读法在旗舰篇。这篇讲一件我在做筛选时才想明白的事。 ...

【AIGC】酷 Q 之前,我自己写了个 QQ 群机器人:签到、钓鱼、一套虚拟货币

LP机器人/机器人.e,2016-06-03,10,763 字节,扫描产出 82 条串。 方法在旗舰篇。这一篇想说一件更实用的事:当一个工程的串少到 82 条,你不需要筛选,需要的是把它摆成四栏。 把 82 条串摆成四栏 界面 事件 状态变量 用户文案 超级列表框1 __启动窗口_创建完毕 钱数 ,报到成功! TA发送的信息 _按钮1_被单击 钱总 ,您已经报到过了 编辑框1 / 2 / 3 (只有这两个事件名) 钱分 请用 收杆 结束钓鱼。 标签1 / 2 / 3 鱼儿分 2:签到(每日一签~) 按钮1 / 2(确定) 签到人总 功能: 返回信息 钓鱼人总 帮助 机器人控制区(分组框) 句柄分 钱了! 其他区(分组框) 句柄QQ记录分 钱了。 读取在哪 记录 / 记录类型 删除成员 (j, , ) 想读取的 索引 / 刷新 要判断的 功能: 线程 / 常量1 支持库:系统核心支持库、扩展界面支持库一、多线程支持库、特殊功能支持库。 ...

【AIGC】两个 2 KB 的「端口映射」工程:一个空壳,以及它教会我的两件事

两个文件,各一千多字节,同一天改的: 服务端.源码.e 1,729 字节 2016-10-02 客户端.源码.e 2,115 字节 2016-10-02 这一对我几乎可以肯定就是用来搞清楚格式的那两个文件 —— 因为在旗舰篇里,我推导长度前缀、窗体记录形状、支持库表项结构,用的全是它俩。 但也是这一对,让我推翻了自己几天前刚写下的话。 一、研究格式要找最小的标本 服务端.源码.e 1,729 字节,扫描产出 20 条串。全部列出来: 0 CNWTEPRG ← 容器魔数 20 嫉溪E突盼 ← 伪影 180 犆壕E位盼 ← 伪影 368 捞噪な协盼 ← 伪影 408 (无意义) 480 _启动窗口 ← 窗体名 493 在程序启动后自动调入本窗口 ← 窗体说明 678 服务器1 ← 控件:监听 796 捞与盼 ← 伪影 924 d09f2340818511d396f6aaf844c7e325 ← krnln 的 GUID 961 系统核心支持库 ← 唯一一个支持库 1015 窗口程序集1 1114 栗楼罚佛盼 ← 伪影 1220 躺吵恭墩r匙s ← 伪影 1324 测试端口映射.exe ← 容器里存的是带目录的全路径 1408 客户1 ← 控件:连接 1414 __启动窗口_创建完毕 ← 唯一的事件 1434 服务器1 1442 __启动窗口_创建完毕 1462 客户1 1500 锣荡E苹盼; ← 伪影 20 条里有 8 条是伪影 —— 这个比例(40%)正好也是旗舰篇里那套统计筛法要解决的问题。在小样本上,伪影不是噪音,它就是主要产出,所以你被迫把每一条都查到字节级才算读完。 ...

【AIGC】1.75 MB 的阳光修改器里,我写的代码不到 1500 字节:一次容器考古,外加我读错又改回来的一次

其他/辅助/植物大战僵尸阳光修改器.e,2016-04-13,1,755,148 字节,扫描产出 75,198 条串。 我第一个"改别人进程内存"的东西。方法在旗舰篇,这一篇的两个看点是:怎么量出"多少是别人的",以及我在这一个文件上读错过一次。 一、我自己写的部分:1,520 字节就到头了 窗体区的全部产出: 480 _启动窗口 493 在程序启动后自动调入本窗口 770 PlantsVSzombies阳光修改器 ← 窗口标题 827 读当前阳光 944 读取当前阳光 984 当前阳光标签 1155 当前阳光: 1201 阳光设置 1316 确认设置阳光 1356 阳光编辑框 1519 100000 ← 编辑框的默认内容 就这些。两组功能: ...