版本要求: Sublime Text 3 Windows x64
使用PHP破解Sublime Text 3,截止,支持3083-3176,3027-3211,理论上支持之后的版本。
// 以下代码是3083-3176,如果是3027-3211则参照下面的版本修改下面的两串字符串
$file = 'D:\Sublime Text\sublime_text.exe';
$pos = filepos($file, "\x45\x8B\xF0\x41\x83\xCE\x04\x38\x5A\x01\x45\x0F\x44\xF0");
if ($pos !== false)
{
$fp = fopen($file, 'cb');
fseek($fp, $pos);
fwrite($fp, "\xC6\x02\x01\x41\xBE\x00\x00\x00\x00\x90\x90\x90\x90\x90");
fclose($fp);
echo 'crack!';
} else
echo 'fail.';
各个版本需要替换的字符串
3083-3176版本: "\x45\x8B\xF0\x41\x83\xCE\x04\x38\x5A\x01\x45\x0F\x44\xF0"
替换为 "\xC6\x02\x01\x41\xBE\x00\x00\x00\x00\x90\x90\x90\x90\x90"
3027-3211版本:"\x38\x18\x0F\x94\xC1\x8D\x14\x09\x38\x58\x01"
替换为"\xC6\x00\x01\x90\x90\x8D\x14\x09\x38\x58\x01"
最终运行结果:
image.png如果用上面的方法,需要的filepos
函数如下:
if (! function_exists('filepos')) {
/**
* 在文件中查找指定的字符串,可用于二进制查找
* 使用strpos做对比,和fopen('r')不同是,\r\n会严格匹配,并不会适配系统
*
* @param string $file 文件路径
* @param string $needle 被查找的字符串
* @return int/bool 返回offset,没找到返回false
*/
function filepos(string $file, string $needle, callable $callback = null)
{
$needleLen = strlen($needle);
$size = intval(1024 * ceil($needleLen / 1024) * 1.5);
$fp = fopen($file, 'rb');
$offset = 0;
$callback = is_callable($callback) ? $callback : function($haystack, $needle) {
return strpos($haystack, $needle);
};
while(!feof($fp)){
fseek($fp, $offset);
$data = fread($fp, $size);
if (($i = $callback($data, $needle)) !== false)
{
fclose($fp);
return $offset + $i;
}
$offset += strlen($data) - $needleLen + 1;
}
fclose($fp);
return false;
}
}
网友评论