作者:sunsjw
使用工具:x32dbg
目标软件:Xshell 6.0.175 Plus
这是自己寻找软件漏洞时的一些记录,高手可以略过,如果有侵权,还忘指出,我会及时处理。转载请保留版权。
下载plus版本的,如何下载可以自己问度娘
下载完成后,使用激活码180505-117501-020791来安装,为什么用这个激活码,我也不知道,我是在度娘上找到的。
安装完成后,第一次启动显示
Registered
版,再启动显示未激活版,在关于对话框里显示(Not Activated)
也有可能显示(Registered),但是过程都一样。
使用x32dbg打开xshell.exe主程序
查找字符串 Not Activated,找到两个,我们选择最完整匹配的一个。也就是下面这条指令
push xshell.4677f8
往上看两条指令
CMP DWORD PTR DS:[EAX+0x12C],0x0
JE xshell.39F278
在CMP那条指令下断点,然后修改地址:【EAX+0x12C】的值为1,直接运行。程序显示已经Activated了。
显然EAX+0x12C存放的是激活检查的结果,程序激活检查肯定会在某一个地方来修改这个值。
重新加载程序,F9运行至CMP这条指令片,然后在命令行下硬件访问断点
SetHardwareBreakpoint eax+0x12c,rw,4
再次重新加载程序,然后F9运行,程序断在硬件断点处。上面的一条指令就是关键的指令
我们可以把这条指令改为
MOV DWORD PTR DS:[0x0048C16C], 0x1
经过实践这只是初始化,真正激活验证的地方还会对这个地方进行修改。我们F9继续运行,程序会断在下面
现在EAX值是0,也就是这个地方把
0x0048C16C 这个内存地址给置0了。
上面的CALL xshell.3A0420,就是关键的CALL了,只要让上面的CALL不要返回0就可以了。
进入上面那个CALL里,然后在第一条指令处下断点,把以前设置的硬件指令都删除了。
重新加载程序,运行程序会断下面,然后按Ctrl+F9远行至返回
把上面XOR EAX,EAX 改为NOP指令,然后Ctrl+P补丁程序
至此破解成功。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2019-11-21 19:22
被sunsjw编辑
,原因: