window 让程序获取的系统时间为自己设定的时间
最近发现很多使用 winmm.dll这个绕过限制,有一些试用版软件提示过期,并不时的获取系统时间进行过期判断。就想又没人做dll放到程序目录下,程序获取系统时间是自己指定的时间。 这个是dll劫持。。。软件读取dll的时候会按照以下顺序读取(参见微软文档)
1.程序所在目录
2.程序加载目录(SetCurrentDirectory)
3.系统目录即 SYSTEM32 目录
4.16位系统目录即 SYSTEM 目录
5.Windows目录
6.PATH环境变量中列出的目录
其中,Know DLLs注册表项里的DLL列表在应用程序运行后会自动读取,
注册表项的路径为HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs
这里的可以理解为不能修改的dll(1是权限问题,2是修改后可能造成其他软件读取时异常)
所以其他一些常用系统函数的dll就可能用来劫持了,比如winmm.dll比如VERSION.dll
具体的可以找一些dll劫持的例子 涛之雨 发表于 2023-1-19 19:18
这个是dll劫持。。。
软件读取dll的时候会按照以下顺序读取(参见微软文档)
感谢大神的解答,昨天我也找了相关的知识,这种劫持dll, 核心就是当这个程序在调用某个系统函数时,可以劫持了返回自己的设定值。目前c++这块的,比如劫持dll存在两个问题,一个是公布的函数的需要都要进行做跳转,另一个就是要确定需要的函数在哪里,像系统时间应该在kernel32中,数据体也是一种问题。 我看还有种处理方式是外部劫持,就是获取启动进程的pid,然后hook系统函数,进行数据返回。 我这边想处理下比如:只处理某个程序获取到的系统时间是设定的时间,然后真实系统时间不受影响,以上两种方式都能实现,编码过程种太多问题:'(weeqw 有个更简单的办法,就是自己写个dll,只有一个获取系统时间函数,返回固定时间,然后加到pe文件里,把原来获取系统时间函数的api替换成自己dll的相应函数,
页:
[1]