开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 251|回复: 8
打印 上一主题 下一主题
收起左侧

[易语言] 想要一个拦截修改软件获取本地时间的的功能

[复制链接]
结帖率:83% (55/66)
跳转到指定楼层
楼主
发表于 4 天前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式   江西省吉安市
14精币
实现类似RunAsDate的功能需要通过API钩子(Hook)技术拦截目标进程的时间相关API(如 GetLocalTime 、 GetSystemTime 等),并返回指定的时间。


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:86% (6/7)

签到天数: 14 天

沙发
发表于 4 天前 | 只看该作者   广东省肇庆市
修改时间,打开软件,恢复时间,或 DLL注入
回复

使用道具 举报

结帖率:100% (1/1)

签到天数: 15 天

板凳
发表于 4 天前 | 只看该作者   广东省佛山市
写hook dll 注入进程
回复

使用道具 举报

结帖率:83% (55/66)

签到天数: 18 天

地板
 楼主| 发表于 3 天前 | 只看该作者   江西省吉安市
moosoo 发表于 2025-7-19 23:11
修改时间,打开软件,恢复时间,或 DLL注入

帮忙写一个呗
回复

使用道具 举报

结帖率:83% (55/66)

签到天数: 18 天

地下
 楼主| 发表于 前天 16:40 | 只看该作者   江西省吉安市
po1718 发表于 2025-7-19 23:27
写hook dll 注入进程

帮忙写一个例子呗
回复

使用道具 举报

结帖率:96% (47/49)

签到天数: 5 天

6
发表于 19 小时前 | 只看该作者   河北省秦皇岛市
  
' 声明原始API函数指针类型
.类型 原_GetLocalTime, 子程序指针, , (lpSystemTime)
.类型 原_GetSystemTime, 子程序指针, , (lpSystemTime)
.类型 原_GetSystemTimeAsFileTime, 子程序指针, , (lpSystemTime)
' 声明原始API函数变量
全局变量名类 型数组公开备 注
原_GetLocalTime函数原_GetLocalTime  
原_GetSystemTime函数原_GetSystemTime  
原_GetSystemTimeAsFileTime函数原_GetSystemTimeAsFileTime  
' 声明要Hook的API
DLL命令名返回值类型公开备 注
VirtualProtect逻辑型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
公开
参数名类 型传址数组备 注
lpAddress整数型
dwSize整数型
flNewProtect整数型
lpf噜阿噜dProtect整数型
DLL命令名返回值类型公开备 注
memcpy整数型 
DLL库文件名:
msvcrt.dll
在DLL库中对应命令名:
公开
参数名类 型传址数组备 注
dest整数型
src整数型
count整数型
' 自定义时间(示例:2025年7月23日 12:00:00)
全局变量名类 型数组公开备 注
伪造年整数型 
伪造月整数型 
伪造日整数型 
伪造时整数型 
伪造分整数型 
伪造秒整数型 
伪造毫秒整数型 
' 系统时间结构体定义
数据类型名公开备 注
SYSTEMTIME 
成员名类 型传址数组备 注
wYear整数型  
wMonth整数型  
wDayOfWeek整数型  
wDay整数型  
wHour整数型  
wMinute整数型  
wSecond整数型  
wMilliseconds整数型  
.数据类型结束
数据类型名公开备 注
FILETIME 
成员名类 型传址数组备 注
dwLowDateTime整数型  
dwHighDateTime整数型  
.数据类型结束
' 写入内存函数
子程序名返回值类型公开备 注
写入内存整数  
参数名类 型参考可空数组备 注
地址整数型
偏移量整数型
整数型
写内存整数 (地址 + 偏移量, 值)
返回 ()
' 系统时间转文件时间
子程序名返回值类型公开备 注
SystemTimeToFileTime  
参数名类 型参考可空数组备 注
lpSystemTime整数型
lpFileTime整数型

DLL命令名返回值类型公开备 注
SystemTimeToFileTime逻辑型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
SystemTimeToFileTime
参数名类 型传址数组备 注
lpSystemTime整数型
lpFileTime整数型
返回 (SystemTimeToFileTime (lpSystemTime, lpFileTime))
' 自定义GetLocalTime函数
子程序名返回值类型公开备 注
新_GetLocalTime  
参数名类 型参考可空数组备 注
lpSystemTime整数型
' 填充自定义时间
写入内存整数 (lpSystemTime, 0, 伪造年)        ' wYear
写入内存整数 (lpSystemTime, 2, 伪造月)        ' wMonth
写入内存整数 (lpSystemTime, 4, 0)            ' wDayOfWeek
写入内存整数 (lpSystemTime, 6, 伪造日)        ' wDay
写入内存整数 (lpSystemTime, 8, 伪造时)        ' wHour
写入内存整数 (lpSystemTime, 10, 伪造分)       ' wMinute
写入内存整数 (lpSystemTime, 12, 伪造秒)       ' wSecond
写入内存整数 (lpSystemTime, 14, 伪造毫秒)     ' wMilliseconds

返回 ()
' 自定义GetSystemTime函数
子程序名返回值类型公开备 注
新_GetSystemTime  
参数名类 型参考可空数组备 注
lpSystemTime整数型
' 填充自定义时间(UTC时间,需根据时区调整)
写入内存整数 (lpSystemTime, 0, 伪造年)        ' wYear
写入内存整数 (lpSystemTime, 2, 伪造月)        ' wMonth
写入内存整数 (lpSystemTime, 4, 0)            ' wDayOfWeek
写入内存整数 (lpSystemTime, 6, 伪造日)        ' wDay
写入内存整数 (lpSystemTime, 8, 伪造时)        ' wHour
写入内存整数 (lpSystemTime, 10, 伪造分)       ' wMinute
写入内存整数 (lpSystemTime, 12, 伪造秒)       ' wSecond
写入内存整数 (lpSystemTime, 14, 伪造毫秒)     ' wMilliseconds

返回 ()
' 自定义GetSystemTimeAsFileTime函数
子程序名返回值类型公开备 注
新_GetSystemTimeAsFileTime  
参数名类 型参考可空数组备 注
lpFileTime整数型
.局部变量 st, SYSTEMTIME

' 填充自定义系统时间
st.wYear = 伪造年
st.wMonth = 伪造月
st.wDay = 伪造日
st.wHour = 伪造时
st.wMinute = 伪造分
st.wSecond = 伪造秒
st.wMilliseconds = 伪造毫秒

' 转换为文件时间
SystemTimeToFileTime (取变量地址 (st), lpFileTime)

返回 ()
' API钩子函数(使用JMP指令替换原始函数入口)
子程序名返回值类型公开备 注
HookAPI  
参数名类 型参考可空数组备 注
原函数地址整数型
新函数地址整数型
.局部变量 旧保护, 整数型
.局部变量 JMP指令, 字节集, , "5"
.局部变量 相对地址, 整数型

' 修改内存保护
VirtualProtect (原函数地址, 5, 0x40, 旧保护)

' 构建JMP指令(E9 + 相对地址)
JMP指令 = { 0xE9, 0x00, 0x00, 0x00, 0x00 }
相对地址 = 新函数地址 - 原函数地址 - 5

' 写入相对地址(4字节)
字节集_替换 (JMP指令, 1, 4, 到字节集 (相对地址))

' 写入JMP指令到原函数地址
写内存字节集 (原函数地址, JMP指令)

' 恢复内存保护
VirtualProtect (原函数地址, 5, 旧保护, 0)
返回 ()
' 解除API钩子
子程序名返回值类型公开备 注
UnhookAPI  
参数名类 型参考可空数组备 注
原函数地址整数型
备份字节字节集
.局部变量 旧保护, 整数型

' 修改内存保护
VirtualProtect (原函数地址, 5, 0x40, 旧保护)

' 恢复原始指令
写内存字节集 (原函数地址, 备份字节)

' 恢复内存保护
VirtualProtect (原函数地址, 5, 旧保护, 0)
返回 ()
' 获取函数地址
子程序名返回值类型公开备 注
取地址  
参数名类 型参考可空数组备 注
模块名文本型
函数名文本型

DLL命令名返回值类型公开备 注
GetProcAddress整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
GetProcAddress
参数名类 型传址数组备 注
hModule整数型
lpProcName文本型
DLL命令名返回值类型公开备 注
GetModuleHandleA整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
GetModuleHandleA
参数名类 型传址数组备 注
lpModuleName文本型
返回 (GetProcAddress (GetModuleHandleA (模块名), 函数名))
' DLL入口函数
子程序名返回值类型公开备 注
DllMain  
参数名类 型参考可空数组备 注
hDll整数型
fdwReason整数型
lpvReserved整数型
如果 (fdwReason = 1)  ' DLL_PROCESS_ATTACH
' 保存原函数地址
原_GetLocalTime函数 = 取地址 ("kernel32.dll", "GetLocalTime")
原_GetSystemTime函数 = 取地址 ("kernel32.dll", "GetSystemTime")
原_GetSystemTimeAsFileTime函数 = 取地址 ("kernel32.dll", "GetSystemTimeAsFileTime")

' Hook API
HookAPI (原_GetLocalTime函数, &新_GetLocalTime)
HookAPI (原_GetSystemTime函数, &新_GetSystemTime)
HookAPI (原_GetSystemTimeAsFileTime函数, &新_GetSystemTimeAsFileTime)

返回 (1)   


i支持库列表   支持库注释   
eAPI应用接口支持库


  
DLL命令名返回值类型公开备 注
CreateRemoteThread整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
公开
参数名类 型传址数组备 注
hProcess整数型
lpThreadAttributes整数型
dwStackSize整数型
lpStartAddress整数型
lpParameter整数型
dwCreationFlags整数型
lpThreadId整数型
DLL命令名返回值类型公开备 注
VirtualAllocEx整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
公开
参数名类 型传址数组备 注
hProcess整数型
lpAddress整数型
dwSize整数型
flAllocationType整数型
flProtect整数型
DLL命令名返回值类型公开备 注
WriteProcessMemory逻辑型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
公开
参数名类 型传址数组备 注
hProcess整数型
lpBaseAddress整数型
lpBuffer文本型
nSize整数型
lpNumberOfBytesWritten整数型
DLL命令名返回值类型公开备 注
OpenProcess整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
公开
参数名类 型传址数组备 注
dwDesiredAccess整数型
bInheritHandle逻辑型
dwProcessId整数型
DLL命令名返回值类型公开备 注
CloseHandle逻辑型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
公开
参数名类 型传址数组备 注
hObject整数型
DLL命令名返回值类型公开备 注
GetProcAddress整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
公开
参数名类 型传址数组备 注
hModule整数型
lpProcName文本型
DLL命令名返回值类型公开备 注
GetModuleHandleA整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
公开
参数名类 型传址数组备 注
lpModuleName文本型
DLL命令名返回值类型公开备 注
GetWindowThreadProcessId整数型 
DLL库文件名:
user32.dll
在DLL库中对应命令名:
公开
参数名类 型传址数组备 注
hWnd整数型
lpdwProcessId整数型
DLL命令名返回值类型公开备 注
FindWindowA整数型 
DLL库文件名:
user32.dll
在DLL库中对应命令名:
公开
参数名类 型传址数组备 注
lpClassName文本型
lpWindowName文本型

子程序名返回值类型公开备 注
获取进程ID整数型 
参数名类 型参考可空数组备 注
进程名文本型

DLL命令名返回值类型公开备 注
CreateToolhelp32Snapshot整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
CreateToolhelp32Snapshot
参数名类 型传址数组备 注
dwFlags整数型
th32ProcessID整数型
DLL命令名返回值类型公开备 注
Process32First逻辑型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
Process32First
参数名类 型传址数组备 注
hSnapshot整数型
lppe整数型
DLL命令名返回值类型公开备 注
Process32Next逻辑型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
Process32Next
参数名类 型传址数组备 注
hSnapshot整数型
lppe整数型

.局部变量 快照句柄, 整数型
.局部变量 进程信息, 进程信息_EX, , "296"
.局部变量 结果, 整数型

' 创建进程快照
快照句柄 = CreateToolhelp32Snapshot (2, 0)

如果 (快照句柄 != 0)
' 获取第一个进程
进程信息.dwSize = 296
如果 (Process32First (快照句柄, 进程信息))
判断循环首 ()
如果 (到文本 (进程信息.szExeFile) = 进程名)
结果 = 进程信息.th32ProcessID
跳出循环 ()

' 获取下一个进程
如果 (Process32Next (快照句柄, 进程信息) = )
跳出循环 ()

判断循环尾 ()

' 关闭快照句柄
CloseHandle (快照句柄)

返回 (结果)
子程序名返回值类型公开备 注
_按钮注入_被单击  
变量名类 型静态数组备 注
进程ID整数型 
进程句柄整数型 
DLL路径文本型 
内存地址整数型 
LoadLibraryA地址整数型 
线程ID整数型 
' 获取目标进程ID(从编辑框获取进程名)
进程ID = 获取进程ID (编辑框1.内容)
如果 (进程ID = 0)
信息框 ("未找到目标进程!", 0, )
返回 ()

' 打开目标进程
进程句柄 = OpenProcess (0x1F0FFF, 假, 进程ID)
如果 (进程句柄 = 0)
信息框 ("无法打开目标进程!可能需要管理员权限。", 0, )
返回 ()

' 获取DLL路径
DLL路径 = 取运行目录 () + "\TimeHook.dll"

' 在目标进程中分配内存
内存地址 = VirtualAllocEx (进程句柄, 0, 取文本长度 (DLL路径) + 1, 0x1000, 0x40)

' 写入DLL路径到目标进程内存
WriteProcessMemory (进程句柄, 内存地址, DLL路径, 取文本长度 (DLL路径) + 1, 0)

' 获取LoadLibraryA函数地址
LoadLibraryA地址 = GetProcAddress (GetModuleHandleA ("kernel32.dll"), "LoadLibraryA")

' 创建远程线程,执行LoadLibraryA加载我们的DLL
CreateRemoteThread (进程句柄, 0, 0, LoadLibraryA地址, 内存地址, 0, 线程ID)

' 释放内存
VirtualAllocEx (进程句柄, 内存地址, 0, 0x8000, 0)

' 关闭进程句柄
CloseHandle (进程句柄)

信息框 ("DLL注入成功!目标进程的时间已被修改。", 0, )
子程序名返回值类型公开备 注
_按钮设置时间_被单击  
变量名类 型静态数组备 注
新时间文本型 
时间数组文本型6"  ' 年、月、日、时、分
' 从编辑框获取时间(格式:YYYY-MM-DD HH:MM:SS)
新时间 = 编辑框2.内容

' 分割时间字符串
时间数组 = 分割文本 (新时间, "-")
如果 (取数组成员数 (时间数组) < 3)
信息框 ("时间格式错误!请使用YYYY-MM-DD HH:MM:SS格式。", 0, )
返回 ()

' 解析时间
全局变量_伪造年 = 到整数 (时间数组 [1])
全局变量_伪造月 = 到整数 (时间数组 [2])

时间数组 = 分割文本 (时间数组 [3], " ")
全局变量_伪造日 = 到整数 (时间数组 [1])

时间数组 = 分割文本 (时间数组 [2], ":")
全局变量_伪造时 = 到整数 (时间数组 [1])
全局变量_伪造分 = 到整数 (时间数组 [2])
全局变量_伪造秒 = 到整数 (时间数组 [3])

信息框 ("时间设置成功!下次注入将使用新时间。", 0, )   


i支持库列表   支持库注释   
eAPI应用接口支持库

回复

使用道具 举报

结帖率:83% (55/66)

签到天数: 18 天

7
 楼主| 发表于 8 小时前 | 只看该作者   江西省吉安市
2224848 发表于 2025-7-23 03:35
[e=1].版本 2
.支持库 eAPI

非常感谢,有源代码上传么
回复

使用道具 举报

结帖率:96% (47/49)

签到天数: 5 天

8
发表于 8 小时前 | 只看该作者   河北省秦皇岛市
wowopipi 发表于 2025-7-23 14:30
非常感谢,有源代码上传么

代码已经发上去了,你照着写一下就行了,昨天写的我没保存。
回复

使用道具 举报

结帖率:83% (55/66)

签到天数: 18 天

9
 楼主| 发表于 1 小时前 | 只看该作者   江西省吉安市
2224848 发表于 2025-7-23 14:35
代码已经发上去了,你照着写一下就行了,昨天写的我没保存。

好吧,因为我粘贴进去,各种报错,所以
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表