正版 Label Matrix 限制了可运行的 Windows 版本;在 Win11 上运行提示系统版本过高,要求升级软件
用 Api Monitor 分析后发现程序的 lm800v.dll 调用了系统的 kernel32.dll!VerifyVersionInfoA 函数来判断系统版本,修改参数后成功绕过系统限制。
现在想制作一个可以绕过限制的 dll ,因缺乏相关经验求高人指点😶🌫️
暂时想到的两个办法:
mov dword ptr [ebp+FFFFFF54h],edx
谢谢😊
关键词: C++, Win32 API
1
ysc3839 2022-08-24 12:10:50 +08:00
右键属性兼容性不行吗?
kernel32.dll 里面判断版本相关的函数应该都是从 PEB (Process Environment Block) 里面读版本的,理论上不需要 hook 函数,只需要覆盖掉对应值即可。 |
2
tool2d 2022-08-24 12:17:11 +08:00 2
你都修改了 Im800v.dll ,直接改汇编就可以了啊。
魔改 kernel32.dll 肯定不合适,你又没签名。极其容易被鉴定为病毒。 |
3
cyc616000 OP @ysc3839 兼容性运行没效果
这个函数直接返回判断结果,里面是黑箱操作 https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-verifyversioninfoa |
5
oser 2022-08-24 12:26:33 +08:00 1
你可以先了解一下 Windows 可执行文件的 PE 结构,然后找到 kernel32.dll 中的导出表,从导出表找到 VerifyVersionInfoA ,然后 Hook 这个 API ,返回你想要的值就 OK 了
|
6
codehz 2022-08-24 12:29:26 +08:00 1
@cyc616000 #4 (不如用 ida 的 patch program > assemble 直接改程序*
如果懒得弄得话也可以先把反汇编代码的 hex 弄出来在源 binary 里搜索 hex 并定位后修改 |
7
oser 2022-08-24 12:30:03 +08:00 1
至于怎么内存 patch 这个 dll ,方式太多了,简单的就是用 createremotethread 开一个远程线程到你关注的目标进程运行,然后注入代码,注入 dll 等等
|
8
cyc616000 OP |
10
mxT52CRuqR6o5 2022-08-24 12:47:31 +08:00
没加壳的话,ollydbg 直接改就是了
|
11
yolee599 2022-08-24 13:01:38 +08:00 via Android
你都反汇编出来了,直接 HexEdit 改呗
|
12
ysc3839 2022-08-24 13:16:15 +08:00 1
https://gist.github.com/ysc3839/1f9c505796ec930e7810a86c3255d037
顺手写了一个改 PEB 中版本号的 asi ,需要配合 Ultimate-ASI-Loader 注入 https://github.com/ThirteenAG/Ultimate-ASI-Loader 你可能想问 asi 是什么:asi 就是一个 dll ,Ultimate-ASI-Loader 会加载这个 dll 。原本 asi 是 Miles Sound System 的插件扩展名,Miles Sound System 会自动加载扩展名为.asi 的 dll 。曾经许多游戏使用了 Miles Sound System ,于是大家就利用这个特性来注入 DLL 来实现游戏 Mod 。但是后来出现的许多新游戏没有使用 Miles Sound System 了,于是就有了 Ultimate-ASI-Loader 这个项目,它是利用 DLL 劫持来加载自身,然后再加载 asi 。 我没测试过 asi 注入后是否有效,不过上面的链接还附带了一个 exe 的测试代码,相同的代码是有效的。自行编译 exe 的话,需要带上 manifest ,声明支持 Windows 10 ,否则 VerifyVersionInfo 或 GetVersion 等都会当成 Win8(版本号 6.2)处理,无法看到效果。 |
13
a33291 2022-08-24 13:44:57 +08:00
借楼问下
是否有可以直接从 dll 或 exe 等 pe 格式直接反汇编后并进行对比的工具?对比功能类似 Beyond Compare. .net 的话有 https://www.telerik.com/justassembly,我想找一个支持原生程序且功能类似的工具. |
14
podel 2022-08-24 13:52:54 +08:00
找 JMP 之类的 条件转移点。不管成功还是失败都跳到成功的后续地址就行了。
|
15
32uKHwVJ179qCmPj 2022-08-24 14:00:35 +08:00
@a33291 为什么需要这种工具,同一段代码重新编译不能保证编译出来的汇编是一样的
|
16
a33291 2022-08-24 14:19:03 +08:00 1
@7v9TEc53 主要用来进行分析用,比如微软打了补丁,那么就可以分析他前后的改动来反推修复的问题.
还有比如有时候不放心一些第三方的 patch 工具,此时在虚拟机运行 patch 后,然后需要对比 patch 版本和原版的差异来分析是否可能有恶意代码. 工具找到了,https://github.com/joxeankoret/diaphora |
17
inframe 2022-08-24 14:25:06 +08:00 2
mov dword ptr [ebp+FFFFFF54h],edx
这个填个大一点符合范围立即数 mov dword ptr [ebp+FFFFFF54h],9999h 这种; == 修改使用 IDA Pro+patcher plugin , 比如 52pojie 的这个 IDA Pro 7.7.220118 (SP1) 全插件绿色版 教程应该到处都有 == dll 劫持也是可以做,但不如直接硬改汇编可靠快捷 |
18
32uKHwVJ179qCmPj 2022-08-24 14:26:56 +08:00
@a33291 在没有这个工具的情况下可以用 beyond compare 定位到 patch 的 file offset ,再在反编译工具里面定位到具体代码,不过你这个工具更方便
|