卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章11201本站已运行3223

Xshell、Xftp 免费版去除退出弹窗提示-新手实战

这两款软件免费版功能跟付费版一致,除了不能商用和退出弹窗,已经很不错了。有个几秒的退出弹窗提示,其实是可以接受的,一直这样用了一年多了,问题不大。

正好自己也要用到 Xshell 和 Xftp,加上之前在站内看了不少去广告弹窗的教程和实例,想亲自动手实战一下。我自己也是新手上路,文中有错误或不当的地方,还望各位坛友们批评指正,不胜感激!

本次修改需要用到 x64dbg 反编译调试,难度大概在入门级别,需要一定的基础和耐心。

新手朋友或者嫌麻烦的坛友们,咱电梯直达 修补方法 ?

应用软件下载 https://www.xshell.com/zh/free-for-home-school/

如果之前安装的是付费版,需要先卸载,里面配置的连接信息看个人需求是否导出保存!!!文件->导出

如果同样是免费版,最新版的安装包会自动识别目录,进行升级安装,不用卸载旧版本,亲自试过了。

x64dbg 下载 https://x64dbg.com/

基础认识
x64dbg零基础使用教程
x64dbg使用技巧与实用插件合集
汇编常用指令
汇编命令及OD常用命令及断点设置


上面的文章帖子看不懂没关系的,我也没完全看懂,大概了解一下,别因为参考文章没看明白就放弃了!



插件选一些自己需要的安装即可,比如:ScyllaHide(反反调试)、E_ApiBreak(常用断点)、x64dbg_tol(中文搜索支持)。

本次实战需要先安装 ScyllaHide(反反调试) 插件,因为程序有反调试会报异常退出。其他插件暂时没有用到,看个人情况安装。



开始
关键操作点:

设置反反调试,程序能调试运行,事半功倍
设置弹窗断点,定位弹窗入口
调用堆栈定位,找出程序级别调用弹窗的关键代码


设置反反调试
安装 ScyllaHide(反反调试) 插件

建议直接下载 x64dbg使用技巧与实用插件合集 插件合集,下载解压后,将 plugins 复制到自己安装的 x64dbg 对应目录。
ScyllaHide GitHub 下载,可能访问不了,我有权限放附件的话,就放一个。


安装不上插件也没关系,只是不能调试定位,但还可以通过搜索关键词字符串定位关键代码。先按 F9 让程序运行到入口(EntryPoint)处,再按 Shift+D,在当前模块中搜索字符串。比如本次修改,搜索 exit,就能直接定位到关键代码。



配置插件参数

因为软件是 32 位的,所以打开 x32dbg.exe, 配置插件参数,运行调试。

 复制代码 隐藏代码
VMProtect x86/x64
Obsidium x86/x64
Themida x86/x64
上面三个配置对本次修改的程序都可以反反调试,主要区别在于内部的配置项勾选。

具体配置项名称含义和作用,可以参考 ScyllaHide 在 GitHub 上的 说明文档,英文的,想要深入了解反反调试的可以研究一下。由于本人也是业余选手,就没仔细研究了。

VMProtect x86/x64 勾选的配置项在三个里面最少,且能正常运行调试,本次参数配置就选它了。确认后会提示重新载入目标程序后生效。




设置弹窗断点
参考站内 去除WinRAR广告弹窗 帖子,大概知道了弹窗函数是 CreateWindowExW,在 x32dbg 界面下方的命令输入框,输入 bp CreateWindowExW 回车即可打上断点。


如果以后遇到的弹窗不是 CreateWindowExW 这个弹窗断点,怎么办呢?那可以参考 E-ApiBreak 插件里面的 对话框,选择其他弹窗断点。具体函数概念和效果可以自行搜索了解一下。

E-ApiBreak 很实用,目前只找到 32 位的插件,64 位的就自己参照名称,手动下断点了。

E-ApiBreak 插件站内下载

调用堆栈定位
知道了弹窗函数入口,可以通过调用堆栈找到是哪里调用了这个 CreateWindowExW 窗口函数。

有个注意的事项, CreateWindowExW 窗口函数在程序中可能会被调用很多次,因为其他正常窗口加载也会调用这个函数。所以,断点设置之后,先禁用,等到程序进入主界面,在你准备退出程序之前,再启用断点,这样就能准确断在退出弹窗的调用链上。

在退出程序之前,如果程序界面卡着没反应,查看是否卡在断点代码了,点击 → 运行即可,因为在手动退出之前的断点不在修改范围。点击关闭按钮,或命令行输入 exit 之后的断点才是要关注的地方。(可能有人会卡在这,不知道怎么回事)

准备退出程序之前,启用窗口函数断点,退出程序,发现确实断在了 CreateWindowExW 窗口函数,堆栈调用信息如下:

堆栈最上方自然是 CreateWindowExW  入口,往下找到最近一次主程序调用点 xshell.008F5D85,可能你的地址不一定是这个,只要前面是 xshell 主程序标识即可。

双击 xshell.008F5D85 即可跳转过去,F2 打上断点,点击 → 运行,发现弹窗出现几秒消失后才进到断点,说明断点位置靠后了。

在断点的上方发现一个 call 调用,有 NSLICENSE_PersonalNotify 字样,运气不错,这里很可能就是弹窗代码。

在 call 上方的任意一个 push 按 F2 下断点,比如在 push 0 处。


停止本次调试,点击重新运行,发现好多不需要关注的 CreateWindowExW  断点,先把 CreateWindowExW  断点禁用,在退出之前再启用。(别被 CreateWindowExW  断点一会禁用一会启用搞晕了,你可以试着一直启用,你就会发现问题)

重新运行,退出程序,调试断在了 CreateWindowExW 调用之前,可以逐步调试,确认 call 函数内部是否为创建窗口相关的代码。

由于 call 里面的代码实在是太多了,一步一步看下去头都晕了。后来才发现代码都不在 xshell 主程序,其实不用细看了。


关键操作来了,只要跳过这个 call 相关的代码,直接走到 Exit xshell 对应的地址 008F5D88,就可以干掉弹窗了。

其实弹窗代码上方正好有一个判断,je xshell.8F5D88,你的反编译地址可能不一样,但 je xshell.XXXXXX 操作是一样的。(前提是都用的 x64dbg,用 OD、IDA 可能反汇编指令会不同,但最终效果是一样的)

Xftp.exe 的关键代码定位,也是这个流程。

尝试修改


代码界面在刚修改的 jmp xshell.8F5D88 按 G 转为流程图看修改(G切换流程图或代码),因为主程序还没有打补丁,流程图还是原本的。改成 jmp 之后,就只有一条指向 Exit xshell 的路线了,修改还是比较完好的,改动很少。

Xftp.exe 的关键修改:

打补丁
在代码修改行(代码区域都行),右键-补丁,选中主程序 xshell.exe 的修改,这里只有一个补丁。


注意,修补文件为 xshell.exe,需要先手动备份一份,以便出错后重新来过,不用重装软件。

直接修补 xshell.exe 会报错,因为程序正在运行调试,那就选择修补刚备份的程序文件,自己清楚哪个是修补之后的即可。

修补后,停止调试,把原本的  xshell.exe 改为  xshell.exe.bak ,修补的主程序文件改为  xshell.exe 。

Xftp.exe 打补丁方法流程也是一样的。注意备份!

验证效果
点关闭按钮退出,或是在命令行输入 exit,退出后,没有再弹窗提示,任务管理器里面的进程正常退出,修改完成。

手动修补二进制文件

010Editor 官网下载 https://www.sweetscape.com/010editor/
前提是软件版本得一致!如果版本不同,请自行按帖子步骤操作。

下载 010Editor 二进制修改工具,免费试用30天,够用了,反正很多人改完之后基本也不会打开这个软件,也不用激活,下次再用,重新安装试用即可。(站内有 010Editor 的破解教程)

注意先备份!010Editor 打开 xshell.exe,全局搜索 74 11 6A 00 6A 07 6A 01(别复制符号),把开头的 74 改成 EB 保存即可,注意把输入法设置为大写。为什么搜索这么长?确保全局只搜到一处,精确定位。

修改前后对比,整个程序文件就一处不同。

跟打补丁之后的程序文件是一样的,运行正常,退出没有弹窗。

Xftp.exe 手动修补:

注意先备份!

010Editor 打开 Xftp.exe,全局搜索 75 10 6A 00 6A 07 50 6A,把开头的 75 改为 EB 保存即可。
卓越飞翔博客
上一篇: 小e通付费课程最新已购视频下载方法
下一篇: 引流公众号密码分析
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏