【实用工具】 Xshell7 / Xftp7 免费版去除关闭时弹窗
该工具可用于去除 Xshell7 / Xftp7 免费版本在关闭时出现的弹窗。
本质上这是一个用 C 语言实现的二进制文件编辑器,能够实现“对二进制文件在编辑前的备份”“对特定序列的搜索与替换”等功能。
使用指南
运行截图
使用时将目标程序拖放到本程序上:
去除弹窗成功后的提示:
使用方式
下载编译好的程序。
出于安全性考虑,提供了两种版本,其中,
Xshell7_Xftp7_Mod_UAC.exe
默认请求了管理员权限,而Xshell7_Xftp7_Mod_NoUAC.exe
支持以普通用户身份运行。(可选) 检查所下载的文件的 Hash 信息。
打开 Xshell 或 Xftp 的安装目录,将
Xshell.exe
或者Xftp.exe
拖放到下载好的程序上。(将文件路径以命令行参数传入)注意,如果使用的是
Xshell7_Xftp7_Mod_NoUAC.exe
,由于没有管理员权限,无法对C:\Program Files
进行写入,故需要将待修改的文件手动复制到一个普通一点的目录,拖放修改后再覆盖回去。出现
Modify OK!
对话框为成功。
注意事项
- 请不要修改
Xshell.exe
/Xftp.exe
的文件名,本程序会根据文件名选择不同的修改模式。 - 请确保待修改程序所在的路径长度小于 195 字符。
开发指南
为了方便大家一起交流此类文件编辑器程序的实现,以下是对开发思路的简略整理。
实现原理
通过编辑 Xshell / Xftp 可执行文件,将特定位置的机器码替换,从而改变程序行为。
对于 Xshell :je
(0x74) -> jmp
(0xEB)
对于 Xftp :jne
(0x75) -> jmp
(0xEB)
至于如何找到关键的机器码,可见 52 上的帖子:Xshell、Xftp 免费版去除退出弹窗提示-新手实战 。
运行流程
(代码说明)
程序运行后将依次执行如下步骤:
处理命令行参数,获取待修改的程序的路径。
通过路径中的文件名判断需要修改的是 Xftp 还是 Xshell,从而将指针指向不同的数组,实现修改模式的切换(两个程序的机器码不同)。
以二进制模式(rb+)打开待修改的程序。
为路径添加 ".bak" 后缀,以二进制模式(wb)打开一个新文件,写入原程序作为备份。
重设文件位置为文件开头,搜索特征机器码,并返回相对文件头的偏移量。
对于数据的搜索,有两种办法:
其一是一次性将文件内容全部读入内存然后查找,但所需内存资源开销较大;
其二是每次读取固定长度到缓冲区,在缓冲区中查找(类似移位寄存器),不过会稍慢一些。
这里采用第二种方法,实现思想如下(从 StackOverFlow 借鉴得到,感觉比较有价值):
- 每次读取文件的 8 字节
- 设置一个 16 字节的缓冲区(确保是每次读取的大小的2倍以上)
- 将每次读取的内容填入缓冲区的后半部分
- 搜索缓冲区内是否含有特征机器码(分别将缓冲区的 0~7 位、1~8 位... 7~14 位与特征码比较)
- 如果没有比中,将后半部分拷贝到前半部分,进行下一轮读取
- 如果比中,当前文件指针的位置减16,再加上特征码首字在缓冲区的位置,即为偏移量。
根据偏移量,使用新机器码覆盖原有机器码。
CLion 环境配置
本程序使用 CLion 作为 IDE 开发,MSVC 为编译器,分享配置如下:
打开
文件
-设置
-构建、执行、部署
-CMake
。点击“加号”新增几个配置文件(Debug、Release)。
对每个配置文件,作如下设置:
工具链
:选择Visual Studio 2022
生成器
:选择Visual Studio 17 2022
CMake选项
:填写-G "Visual Studio 17 2022" -A "Win32"
对于不同构建类型,可以追加一些参数,例如对于 Debug 类型的构建,可以在
CMake选项
追加-DCMAKE_BUILD_TYPE=Debug
(主要是为了 CMakeLists 服务)。
开源地址
Github:Xshell7_Xftp7_Mod
备用成品链接:百度云
END
本次程序为博主首次尝试进行二进制文件编辑的试手作,若有更好的思路欢迎交流指正!