前言
其实这篇文章已经在我的草稿箱里呆了有大半年了,不过过几天电脑就要卖掉了,赶紧连夜憋了出来。
上来先上一波维基百科:
Nvidia NVENC is a feature in its graphics cards that performs video encoding, offloading this compute-intensive task from the CPU. It was introduced with the Kepler-based GeForce 600 series in March 2012.
简单来说就是一个让视频转换得更快的好东西,不过,世上没有免费的午餐,刀法如神的老黄自然不会放过此等亮刀的机会,NVEnc
在非专业卡下只能同时对两条视频流转换,在亮机卡GT1030
/MX150
上干脆阉割掉了:
不过,贫苦群众们当然不会就此罢休,Linux 上已经有人做出了傻瓜式补丁,wget
然后跑一下就完事了,然而不同于赤裸裸的 Linux,得益于 Windows10 复(坑)杂紧(爹)扣的安全验证体系,想要对限制做手脚还得先费一番功夫……
不过,还是先上一张成功演示吧,7 条视频流同时编码,保证质量过得去(约等于 x264 slow crf26)的同时拥有极高的编码速度:
准备
首先我们需要一张能跑 nvenc 的显卡,以及安装正常的驱动(废话),然后去微软商店下载WinDBG Perview
,以及准备一个十六进制编辑器,这里推荐HxD Editor
。
由于破解 nvenc 需要修改驱动,因此如果不进入调试模式,就算是管理员权限也无法获得内核修改权的,接下来根据你的电脑设置有两种选择,在未开启 Bitlocker 启动的前提下,可以直接修改启动设置,以内核调试模式启动即可,如果开启了 Bitlocker,那么每次开机都需要重新启动内核调试模式
大部分超极本/二合一笔记本
以及平板电脑
都已默认开启,为了安全性不建议手动关闭,会降低你电脑的安全性,当然如果你电脑里装了各种辣鸡国产杀软,那开不开都没啥区别了
以管理员打开命令行并运行
bcdedit -debug on
bash然后重启即可
由于在启用了 Bitlocker 后,Windows10 启用所有安全机制,以尽量确保你的电脑无法在不经人手的前提下对系统进行修改,因此只有在用户知情的前提下,才能临时启用调试模式,以下的复杂操作你可以视为一个“确认知情”的过程
由于 Bitlocker 可以通过多种途径启动,对应解密流程也不一样,这里只针对默认已启用
的情况进行说明,对于手动启动的朋友,自行启用调试模式应该不成问题吧?
首先插入一个 U 盘,然后打开设置(Win 键+I),在搜索框里输入 Bitlocker,然后打开 Bitlocker 设置
然后点击系统驱动器里的备份恢复密钥
在新窗口里点击保存到文件,保存后可以关闭设置窗口,然后把保存得到的 txt 文件打开,一般内容如下:
BitLocker 驱动器加密恢复密钥
要验证这是否为正确的恢复密钥,请将以下标识符的开头与电脑上显示的标识符值进行比较。
标识符:
xxxxxxxxxxxxxxxxxxx
如果以上标识符与电脑显示的标识符匹配,则使用以下密钥解锁你的驱动器。
恢复密钥:
xxxxxxxxxxxxxxxxxxx
如果以上标识符与电脑显示的标识符不匹配,则该密钥不是解锁你的驱动器的正确密钥。
请尝试其他恢复密钥,或参阅 https://go.microsoft.com/fwlink/?LinkID=260589 以获得其他帮助。
ini把其中的恢复密钥(即上面高亮的那行)记下来后删除 txt
这个文档可以用来解密你的硬盘并得到其中的数据,切记不要保存在会被他人看到的地方
接下来按住 Shift 键并点击开始菜单中的重启,稍等片刻进入到全屏蓝色的恢复界面,接下来点击疑难解答
->高级设置
->启动设置
->重启
。
可以使用方向键移动光标,如果移动不了可以用 Tab 键
之后系统自动重启,进入 Bitlocker Recovery 界面,此时会提示由于系统引导被修改,需要输入 Bitlocker 恢复密钥,根据提示选择输入后,直接输入前面保存下来的恢复密钥中的数字即可,横杠会自动补全,无需手动输入。
如果你有多个分区或硬盘,可能会提示你输入多次密钥,你只要在提示解密操作系统驱动器
的时候输入即可。
输入完成后系统继续引导,进入到一个新的蓝色界面,提示选择高级启动选项,此时请按对应数字选择启用调试
即可,稍等片刻后系统顺利启动,进入到登陆界面。
修改
经过漫长的准备(其实熟练的话几分钟就能搞好了),终于要开始修改限制了,我们先以管理员权限打开 WinDBG。
然后点击窗口左上角的文件
->Attach to kernel
->Local
,然后点击OK
加载完成后默认是没有符号文件的,在窗口中间的命令输入框中输入
.sympath srv*https://msdl.microsoft.com/download/symbols
.reload /f
bash输入一行回车一下,之后开始自动加载符号文件,网速不好的话可能要等很久,这时候我们先把注意力转移到驱动文件上。
先搜索到 nvlddmkm.sys,用十六进制编辑器打开,然后搜索"75 07 B8 69 00 00 00",并记下偏移量。
记下偏移量并切回 WinDbg,输入u nvlddmkm+0x偏移量
,譬如上图是 1a7b19,就应该输入u nvlddmkm+0x1a7b19
,下图是旧版驱动的图,所以偏移量不一样。
然后再输入!pte nvlddmkm+0x偏移量
获取实际的物理页地址:
我们需要用图中的数据计算出物理地址,首先 pte 的 pfn 为 0x10041,然后乘 0x1000 得到物理页地址 0x10041000,然后加 0xbed(即取后三位,因为内存一页为 4k,即 0x1000),最后检查下内容一致:
然后就可以修改内容了:!eb 10041BED eb
,修改后在读一下物理内存看看是否成功:
现在在重启之前,修改都不会失效,enjoy your self!