扫描二维码关注官方公众号

58 评论

0 收藏

分享

[视频教程] 新手逆向课程之易语言按钮事件 VMP 强壳逆向打补丁教程

 

马上注册,结交更多好友,享用更多功能,让你轻松玩转无忧吧。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
新手逆向课程之易语言按钮事件 VMP 强壳逆向打补丁教程
易语言基础与按钮事件剖析
易语言是一门采用中文作为程序代码的编程语言,对国内编程爱好者,尤其是没有编程基础的新手十分友好。它拥有丰富的支持库,涵盖网络编程、图形界面、数据库操作等众多功能,并且有良好的社区支持,便于新手学习和交流。
在易语言程序中,按钮事件是常见的交互方式,即用户点击按钮后,程序执行相应功能。以一个简单的 “隐藏桌面” 按钮为例,我们可借助 E - Debug 这款辅助调试易语言程序的 OD 插件(仅支持静态编译程序)来分析其事件。首先,用 E - Debug 打开程序,找到 “隐藏桌面” 按钮对应的代码区域。每个按钮在程序代码中都有特定的地址标识,就像每个人都有独一无二的身份证号。通过查找相关资料或在代码中逐步排查,能确定该按钮事件的段首地址。
假设我们找到了 “隐藏桌面” 按钮事件的段首地址为 401337 。接下来,将程序拖入 OD(OllyDbg,一款常用的调试工具),按下快捷键 ctrl + G,在弹出的对话框中粘贴地址 401337 ,回车后便能定位到该地址在 OD 中的位置。在此处双击,即可下一个断点。断点的作用类似在程序执行的道路上设置一个 “关卡”,当程序执行到该位置时,会暂停运行,方便我们观察和分析程序的运行状态。
常规按钮事件逆向分析
下好断点后,按 F8 键(在 OD 中,F8 键用于单步步过,即执行一行代码后暂停),程序会逐步执行。在执行过程中,我们要留意程序的跳转指令。通常,按钮事件的代码逻辑中会存在一些跳转,用于实现不同条件下的功能分支。比如,当按钮被点击且条件满足时,程序跳转到执行隐藏桌面功能的代码段;若条件不满足,则跳转到提示错误信息的代码段。
我们要寻找的是实现按钮功能的关键跳转。当找到一个大跳转(即跳过按钮窗口相关代码,直接进入功能实现部分的跳转)时,这个跳转就是我们关注的重点。正常情况下,该跳转是会被执行的,从而实现按钮功能。但在逆向分析中,我们可以通过修改程序的运行状态,来改变这个跳转的执行结果。例如,在 OD 的寄存器窗口中,找到与跳转相关的标志位(如 ZF 标志位),将其值改成 0 。标志位就像是程序运行的 “指示灯”,不同的值指示程序不同的执行路径。当我们把标志位改成 0 后,原本会执行的跳转就不会实现了。
此外,我们还可以通过 NOP 填充的方式来阻止跳转。在断点处右键,选择 “二进制” - “NOP 填充”。NOP 指令在汇编语言中表示 “空操作”,用 NOP 填充跳转指令,相当于让程序在执行到此处时什么都不做,直接跳过原本的跳转逻辑。填充完成后,我们可以右键点击 NOP 填充的这部分内容,选择 “二进制” - “二进制复制”,将这部分修改后的指令复制下来,以备后续制作补丁使用。
VMP 强壳介绍及影响
VMP 是一款功能强大的加密壳,它采用代码虚拟化技术,能有效保护程序不被恶意修改。很多软件开发者会使用 VMP 对程序进行加壳保护,这给逆向分析带来了很大挑战。当易语言程序被 VMP 强壳保护后,原本清晰的代码结构变得复杂,关键代码被虚拟化,难以直接分析和修改。
例如,我们之前能轻松找到的按钮事件代码,在加壳后可能被隐藏在复杂的加密层之下。而且,VMP 会对程序的内存数据进行校验,一旦检测到程序被调试或关键数据被修改,可能会采取反制措施,如终止程序运行或让程序出现异常行为。所以,在对 VMP 强壳保护的易语言程序进行逆向打补丁时,需要采用特殊的方法和技巧,绕过 VMP 的保护机制。
VMP 强壳逆向与补丁制作
定位关键代码
虽然 VMP 增加了逆向难度,但我们仍可以通过一些方法来定位关键代码。比如,利用 OD 的智能搜索功能,在程序中搜索与按钮功能相关的字符串,如 “已注册”(假设按钮功能与注册相关)。找到该字符串后,点击查看其在代码中的位置,进而找到关键 call(函数调用),在此处下断点。同时,记录下寄存器中存放真注册码的寄存器和关键 call 的地址,这些信息对后续分析和修改程序至关重要。
绕过内存校验与修改跳转
由于 VMP 会进行内存校验,我们不能直接像常规程序那样修改汇编指令。此时,可利用异常机制来绕过内存校验。例如,通过 HOOK API(应用程序编程接口)函数,等待被补丁的地址数据解码。以获取窗口输入文本常用的 API 函数 GetWindowTextA 为例,我们可以 HOOK 这个函数。因为在程序运行过程中,VMP 在对关键代码进行保护和解码时,必然会调用一些 API 函数,我们 HOOK 这些函数,就能在合适的时机对程序进行干预。
当程序执行到关键跳转的起始点时,下断点,然后运行程序(此时可随便输入账号密码,模拟正常操作)。如果跳转正常实现,说明程序处于未破解状态。我们可以通过修改标志位,如将 ZF 标志位设置为 1 (具体根据程序逻辑确定),使跳转不实现,再次运行程序,就可能实现登录或按钮功能。当然,不同的程序可能需要根据具体情况调整标志位的值和修改的方式。
制作补丁
经过上述步骤,我们已经找到了能让按钮功能正常实现的代码修改方式。接下来,就可以制作补丁了。这里我们使用 XH 补丁制作工具,将需要打补丁的程序拖进 XH 工具中。然后,写入之前记录的内存地址(即我们下断点并进行修改的位置)和修改指令(如 NOP 填充后的二进制指令),点击 “添加”,最后点击 “生成补丁”。生成的补丁文件就可以用于破解被 VMP 强壳保护的易语言程序的按钮功能。
在实际操作中,打开被保护的程序,此时按钮功能可能无法使用。接着,运行刚刚生成的补丁,程序会按照我们预先设置的修改方式,对关键代码进行修改,从而使按钮功能得以正常使用。
通过以上步骤,新手朋友们可以初步掌握易语言按钮事件在 VMP 强壳保护下的逆向打补丁方法。当然,逆向工程是一个复杂且不断学习的过程,不同的程序可能会遇到各种不同的问题和挑战,需要我们不断积累经验,深入研究相关技术,才能更好地应对。

无忧技术吧交流群“805881393”
截图202507142203122250.png


例子下载:https://whct.lanzoue.com/ieuyE311tjih



捷云鲸技术社区(bbs.jieyunjing.com)免责声明:
使用本社区服务即视为同意本声明全部条款。
1. 本社区所有技术、工具及内容仅限**学习研究**使用,旨在提升安全技术水平,严禁用于非法、商业及其他不良用途,违规后果由使用者自行承担。
2. 社区内容及资源来源于网络,仅代表发布者个人观点,与本社区无关,相关法律责任由发布者自负。
3. 资源版权归原作者所有,用户下载后须在**24小时内删除**,版权争议与本社区无关。
4. 禁止任何破坏社区正常运营的行为,违规将视情节处理,社区保留追责权利。
5. 本社区坚决支持正版,如涉及侵权,请通过站长邮箱或QQ联系删除。
6. 本社区对本声明拥有最终解释权,可适时修改并公示生效。
站长邮箱:jieyunjingvip@qq.com
站长QQ:4040068
捷云鲸社区bbs.jieyunjing.com
回复

举报 使用道具

全部回复 (58)
查看全部
写的真的很不错
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

过来看看
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

有道理。。。
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

路过,支持一下啦
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

支持一下
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

帮你顶下哈
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

不知该说些什么。。。。。。就是谢谢
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

相当不错,感谢无私分享精神!
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

感谢分享
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

admin 实名认证
管理员
主题 1380
回复 75
粉丝 1

灌水之王 突出贡献 优秀版主 荣誉管理 论坛元老 沙发王 源码大师 在线王 终身成就 机器王 知识库 土豪 活跃会员 最佳新人 热心会员