用于去除 Xshell7 / Xftp7 免费版本在关闭时出现的弹窗。
-
在 Release 页面下载编译好的程序。
出于安全性考虑,提供了两种版本,其中,
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)
(详细逆向过程请参考:Xshell、Xftp 免费版去除退出弹窗提示-新手实战)
(代码说明)
程序运行后将依次执行如下步骤:
-
处理命令行参数,获取待修改的程序的路径。
-
通过路径中的文件名判断需要修改的是 Xftp 还是 Xshell,从而将指针指向不同的数组,实现修改模式的切换(两个程序的机器码不同)。
-
以二进制模式(rb+)打开待修改的程序。
-
为路径添加 ".bak" 后缀,以二进制模式(wb)打开一个新文件,写入原程序作为备份。
-
重设文件位置为文件开头,搜索特征机器码,并返回相对文件头的偏移量。
对于数据的搜索,有两种办法,其一是一次性将文件内容全部读入内存然后查找,但所需资源开销较大;其二是每次读取固定长度到缓冲区,在缓冲区中查找(类似移位寄存器)。这里采用第二种方法,实现**如下:
- 每次读取文件的 8 字节
- 设置一个 16 字节的缓冲区(确保是每次读取的大小的2倍以上)
- 将每次读取的内容填入缓冲区的后半部分
- 搜索缓冲区内是否含有特征机器码(分别将缓冲区的0
7位、18位...7~14位与特征码比较) - 如果没有比中,将后半部分拷贝到前半部分,进行下一轮读取
- 如果比中,当前文件指针的位置减16,再加上特征码首字在缓冲区的位置,即为偏移量。
-
根据偏移量,使用新机器码覆盖原有机器码。
本程序使用 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 服务)。
-