沐泽 发表于 2026-4-7 21:00

X64DLL单判断

本帖最后由 沐泽 于 2026-4-13 21:54 编辑

解决了

khuntoria 发表于 2026-4-8 16:18

baseaddress=0x180000000
回答你的疑问
1.为什么你改时间没有用?,因为程序在180003593和18000359C已经判断完毕,你更改的时间只是程序调用信息框时显示的时间。
180003593判断的是读取的到期时间是否为空,18000359C则是读取的到期时间和本地时间进行比较。
2.你看到的到期时间读取成1970,本质上还是因为读取不到到期时间的原因,因为读取不到数据,程序把0传入180002F50函数转换成时间,于是就有了你看到的1970-01。
3.在你搜索字符串的时候就应该看到了\\\\.\\pipe\\SLQN,这类似的字符串就是进程中的管道通信,根据我的分析,程序在18000357A读取管道中的数据,其中应该是一个文本的时间戳字符串转换成整数,之后调用GetSystemTimeAsFileTim获取本地时间戳,最后就像我第一点说的那样,先判断是否为空,在判断是否过期。

解决方案:
1.直接在180003593和18000359C地址处nop即可。
2.往管道里面写入时间戳数据,管道名称为\\\\.\\pipe\\SLQN,之后程序会自动读取,下面附上我的代码。答案不唯一!!!。


.版本 2

.局部变量 hPipe, 整数型
.局部变量 ret, 逻辑型
.局部变量 待写数据, 字节集
.局部变量 实际写入字节, 整数型

hPipe = CreateNamedPipeA (“\\.\pipe\SLQN”, 3, 0, 255, 1024, 1024, 0, 0)
.如果真 (hPipe = -1)
    返回 ()
.如果真结束
ret = ConnectNamedPipe (hPipe, 0)
.如果真 (ret = 真 或 GetLastError () = 535)
    待写数据 = 到字节集 (“1875634336”)
    WriteFile (hPipe, 待写数据, 取字节集长度 (待写数据), 实际写入字节, 0)
    FlushFileBuffers (hPipe)
    DisconnectNamedPipe (hPipe)
.如果真结束
CloseHandle (hPipe)

.版本 2

.DLL命令 CreateNamedPipeA, 整数型, "kernel32.dll", "CreateNamedPipeA", 公开
    .参数 lpName, 文本型
    .参数 dwOpenMode, 整数型
    .参数 dwPipeMode, 整数型
    .参数 nMaxInstances, 整数型
    .参数 nOutBufferSize, 整数型
    .参数 nInBufferSize, 整数型
    .参数 nDefaultTimeOut, 整数型
    .参数 lpSecurityAttributes, 整数型

.DLL命令 ConnectNamedPipe, 逻辑型, "kernel32.dll", "ConnectNamedPipe", 公开
    .参数 hNamedPipe, 整数型
    .参数 lpOverlapped, 整数型

.DLL命令 WriteFile, 逻辑型, "kernel32.dll", "WriteFile", 公开
    .参数 hFile, 整数型
    .参数 lpBuffer, 字节集, 传址
    .参数 nNumberOfBytesToWrite, 整数型
    .参数 lpNumberOfBytesWritten, 整数型, 传址
    .参数 lpOverlapped, 整数型

.DLL命令 DisconnectNamedPipe, 逻辑型, "kernel32.dll", "DisconnectNamedPipe", 公开
    .参数 hNamedPipe, 整数型

.DLL命令 CloseHandle, 逻辑型, "kernel32.dll", "CloseHandle", 公开
    .参数 hObject, 整数型

.DLL命令 FlushFileBuffers, 逻辑型, "kernel32.dll", "FlushFileBuffers"
    .参数 hFile, 整数型

.DLL命令 GetLastError, 整数型, "kernel32.dll", "GetLastError", 公开




fafa 发表于 2026-5-7 18:17

用DIE即可
页: [1]
查看完整版本: X64DLL单判断