PHP 破解 Sublime Text 3 x64, 支持3176-3211

版本要求: 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"

最终运行结果:

PHP 破解 Sublime Text 3 x64, 支持3176-3211_第1张图片
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;
}
}

你可能感兴趣的:(PHP 破解 Sublime Text 3 x64, 支持3176-3211)