【实用工具】 Xshell7 / Xftp7 免费版去除关闭时弹窗

该工具可用于去除 Xshell7 / Xftp7 免费版本在关闭时出现的弹窗。

本质上这是一个用 C 语言实现的二进制文件编辑器,能够实现“对二进制文件在编辑前的备份”“对特定序列的搜索与替换”等功能。

使用指南

运行截图

使用时将目标程序拖放到本程序上:

去除弹窗成功后的提示:

使用方式

  1. 下载编译好的程序。

    出于安全性考虑,提供了两种版本,其中,Xshell7_Xftp7_Mod_UAC.exe 默认请求了管理员权限,而 Xshell7_Xftp7_Mod_NoUAC.exe 支持以普通用户身份运行。

  2. (可选) 检查所下载的文件的 Hash 信息。

  3. 打开 Xshell 或 Xftp 的安装目录,将 Xshell.exe 或者 Xftp.exe 拖放到下载好的程序上。(将文件路径以命令行参数传入)

    注意,如果使用的是 Xshell7_Xftp7_Mod_NoUAC.exe,由于没有管理员权限,无法对 C:\Program Files 进行写入,故需要将待修改的文件手动复制到一个普通一点的目录,拖放修改后再覆盖回去。

  4. 出现 Modify OK! 对话框为成功。

注意事项

  • 请不要修改 Xshell.exe / Xftp.exe 的文件名,本程序会根据文件名选择不同的修改模式。
  • 请确保待修改程序所在的路径长度小于 195 字符。

开发指南

为了方便大家一起交流此类文件编辑器程序的实现,以下是对开发思路的简略整理。

实现原理

通过编辑 Xshell / Xftp 可执行文件,将特定位置的机器码替换,从而改变程序行为。

对于 Xshell :je (0x74) -> jmp (0xEB)

对于 Xftp :jne (0x75) -> jmp (0xEB)

至于如何找到关键的机器码,可见 52 上的帖子:Xshell、Xftp 免费版去除退出弹窗提示-新手实战

运行流程

(代码说明)

程序运行后将依次执行如下步骤:

  1. 处理命令行参数,获取待修改的程序的路径。

  2. 通过路径中的文件名判断需要修改的是 Xftp 还是 Xshell,从而将指针指向不同的数组,实现修改模式的切换(两个程序的机器码不同)。

  3. 以二进制模式(rb+)打开待修改的程序。

  4. 为路径添加 ".bak" 后缀,以二进制模式(wb)打开一个新文件,写入原程序作为备份。

  5. 重设文件位置为文件开头,搜索特征机器码,并返回相对文件头的偏移量。

    对于数据的搜索,有两种办法:

    其一是一次性将文件内容全部读入内存然后查找,但所需内存资源开销较大;

    其二是每次读取固定长度到缓冲区,在缓冲区中查找(类似移位寄存器),不过会稍慢一些。

    这里采用第二种方法,实现思想如下(从 StackOverFlow 借鉴得到,感觉比较有价值):

    • 每次读取文件的 8 字节
    • 设置一个 16 字节的缓冲区(确保是每次读取的大小的2倍以上)
    • 将每次读取的内容填入缓冲区的后半部分
    • 搜索缓冲区内是否含有特征机器码(分别将缓冲区的 0~7 位、1~8 位... 7~14 位与特征码比较)
    • 如果没有比中,将后半部分拷贝到前半部分,进行下一轮读取
    • 如果比中,当前文件指针的位置减16,再加上特征码首字在缓冲区的位置,即为偏移量。
  6. 根据偏移量,使用新机器码覆盖原有机器码。

CLion 环境配置

本程序使用 CLion 作为 IDE 开发,MSVC 为编译器,分享配置如下:

  1. 打开 文件 - 设置 - 构建、执行、部署 - CMake

  2. 点击“加号”新增几个配置文件(Debug、Release)。

  3. 对每个配置文件,作如下设置:

    • 工具链:选择 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

本次程序为博主首次尝试进行二进制文件编辑的试手作,若有更好的思路欢迎交流指正!