吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 457|回复: 8
收起左侧

[易语言 转载] version.dll劫持注入模版(支持x64)

[复制链接]
执_念 发表于 2024-11-18 14:57
version.dll劫持是经常用到的技术,但是我用c写劫持dll时总是得把所有导出函数都写一遍
version.dll劫持注入模版_version.dll 劫持源代码-CSDN博客
网上能搜到的只能支持32位
其实这事说简单也简单,没啥技术含量;说难也难,有十几个函数得按着签名写一遍...非常浪费时间,故把通用模板放到论坛上以备我自己和大家取用

.版本 2

.支持库 eAPI

.局部变量 hVersion, 整数型
.局部变量 systemDirectory, 文本型

.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
_临时子程序 ()
返回 (0)  ' 可以根据需要修改返回值

.子程序 _临时子程序
.参数 FuncName, 文本型
.局部变量 funcAddress, 整数型

如果 (hVersion = 0)
获取系统目录 (systemDirectory)
systemDirectory = systemDirectory + “\System32\version.dll”
hVersion = 加载动态链接库 (systemDirectory)
如果 (hVersion = 0)
返回 (假)
结束如果
结束如果

funcAddress = 获取函数地址 (hVersion, FuncName)
返回 (funcAddress)

.子程序 GetFileVersionInfoA, 布尔型, 公开
.参数 lptstrFilename, 文本型
.参数 dwHandle, 整数型
.参数 dwLen, 整数型
.参数 lpData, 整数型
.局部变量 pGetFileVersionInfoA, 整数型

pGetFileVersionInfoA = _临时子程序 (“GetFileVersionInfoA”)
调用DLL函数 (pGetFileVersionInfoA, lptstrFilename, dwHandle, dwLen, lpData)
返回 (取布尔结果 ())

.子程序 GetFileVersionInfoByHandle, 布尔型, 公开
.参数 dwFlags, 整数型
.参数 hFile, 整数型
.参数 pdwLen, 整数型指针
.局部变量 pGetFileVersionInfoByHandle, 整数型

pGetFileVersionInfoByHandle = _临时子程序 (“GetFileVersionInfoByHandle”)
调用DLL函数 (pGetFileVersionInfoByHandle, dwFlags, hFile, pdwLen)
返回 (取布尔结果 ())

.子程序 GetFileVersionInfoExA, 布尔型, 公开
.参数 dwFlags, 整数型
.参数 lpwstrFilename, 文本型
.参数 dwHandle, 整数型
.参数 dwLen, 整数型
.参数 lpData, 整数型
.局部变量 pGetFileVersionInfoExA, 整数型

pGetFileVersionInfoExA = _临时子程序 (“GetFileVersionInfoExA”)
调用DLL函数 (pGetFileVersionInfoExA, dwFlags, lpwstrFilename, dwHandle, dwLen, lpData)
返回 (取布尔结果 ())

.子程序 GetFileVersionInfoExW, 布尔型, 公开
.参数 dwFlags, 整数型
.参数 lpwstrFilename, 文本型
.参数 dwHandle, 整数型
.参数 dwLen, 整数型
.参数 lpData, 整数型
.局部变量 pGetFileVersionInfoExW, 整数型

pGetFileVersionInfoExW = _临时子程序 (“GetFileVersionInfoExW”)
调用DLL函数 (pGetFileVersionInfoExW, dwFlags, lpwstrFilename, dwHandle, dwLen, lpData)
返回 (取布尔结果 ())

.子程序 GetFileVersionInfoSizeA, 整数型, 公开
.参数 lptstrFilename, 文本型
.参数 lpdwHandle, 整数型指针
.局部变量 pGetFileVersionInfoSizeA, 整数型

pGetFileVersionInfoSizeA = _临时子程序 (“GetFileVersionInfoSizeA”)
返回 (调用DLL函数 (pGetFileVersionInfoSizeA, lptstrFilename, lpdwHandle))

.子程序 GetFileVersionInfoSizeExA, 整数型, 公开
.参数 dwFlags, 整数型
.参数 lpwstrFilename, 文本型
.参数 lpdwHandle, 整数型指针
.局部变量 pGetFileVersionInfoSizeExA, 整数型

pGetFileVersionInfoSizeExA = _临时子程序 (“GetFileVersionInfoSizeExA”)
返回 (调用DLL函数 (pGetFileVersionInfoSizeExA, dwFlags, lpwstrFilename, lpdwHandle))

.子程序 GetFileVersionInfoSizeExW, 整数型, 公开
.参数 dwFlags, 整数型
.参数 lpwstrFilename, 文本型
.参数 lpdwHandle, 整数型指针
.局部变量 pGetFileVersionInfoSizeExW, 整数型

pGetFileVersionInfoSizeExW = _临时子程序 (“GetFileVersionInfoSizeExW”)
返回 (调用DLL函数 (pGetFileVersionInfoSizeExW, dwFlags, lpwstrFilename, lpdwHandle))

.子程序 GetFileVersionInfoSizeW, 整数型, 公开
.参数 lptstrFilename, 文本型
.参数 lpdwHandle, 整数型指针
.局部变量 pGetFileVersionInfoSizeW, 整数型

pGetFileVersionInfoSizeW = _临时子程序 (“GetFileVersionInfoSizeW”)
返回 (调用DLL函数 (pGetFileVersionInfoSizeW, lptstrFilename, lpdwHandle))

.子程序 GetFileVersionInfoW, 布尔型, 公开
.参数 lptstrFilename, 文本型
.参数 dwHandle, 整数型
.参数 dwLen, 整数型
.参数 lpData, 整数型
.局部变量 pGetFileVersionInfoW, 整数型

pGetFileVersionInfoW = _临时子程序 (“GetFileVersionInfoW”)
调用DLL函数 (pGetFileVersionInfoW, lptstrFilename, dwHandle, dwLen, lpData)
返回 (取布尔结果 ())

.子程序 VerFindFileA, 整数型, 公开
.参数 uFlags, 整数型
.参数 szFileName, 文本型
.参数 szWinDir, 文本型
.参数 szAppDir, 文本型
.参数 szCurDir, 文本型指针
.参数 puCurDirLen, 整数型指针
.参数 szDestDir, 文本型指针
.参数 puDestDirLen, 整数型指针
.局部变量 pVerFindFileA, 整数型

pVerFindFileA = _临时子程序 (“VerFindFileA”)
返回 (调用DLL函数 (pVerFindFileA, uFlags, szFileName, szWinDir, szAppDir, szCurDir, puCurDirLen, szDestDir, puDestDirLen))

.子程序 VerFindFileW, 整数型, 公开
.参数 uFlags, 整数型
.参数 szFileName, 文本型
.参数 szWinDir, 文本型
.参数 szAppDir, 文本型
.参数 szCurDir, 文本型指针
.参数 puCurDirLen, 整数型指针
.参数 szDestDir, 文本型指针
.参数 puDestDirLen, 整数型指针
.局部变量 pVerFindFileW, 整数型

pVerFindFileW = _临时子程序 (“VerFindFileW”)
返回 (调用DLL函数 (pVerFindFileW, uFlags, szFileName, szWinDir, szAppDir, szCurDir, puCurDirLen, szDestDir, puDestDirLen))

.子程序 VerInstallFileA, 整数型, 公开
.参数 uFlags, 整数型
.参数 szSrcFileName, 文本型
.参数 szDestFileName, 文本型
.参数 szSrcDir, 文本型
.参数 szDestDir, 文本型
.参数 szCurDir, 文本型
.参数 szTmpFile, 文本型指针
.参数 puTmpFileLen, 整数型指针
.局部变量 pVerInstallFileA, 整数型

pVerInstallFileA = _临时子程序 (“VerInstallFileA”)
返回 (调用DLL函数 (pVerInstallFileA, uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, szTmpFile, puTmpFileLen))

.子程序 VerInstallFileW, 整数型, 公开
.参数 uFlags, 整数型
.参数 szSrcFileName, 文本型
.参数 szDestFileName, 文本型
.参数 szSrcDir, 文本型
.参数 szDestDir, 文本型
.参数 szCurDir, 文本型
.参数 szTmpFile, 文本型指针
.参数 puTmpFileLen, 整数型指针
.局部变量 pVerInstallFileW, 整数型

pVerInstallFileW = _临时子程序 (“VerInstallFileW”)
返回 (调用DLL函数 (pVerInstallFileW, uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, szTmpFile, puTmpFileLen))

.子程序 VerLanguageNameA, 整数型, 公开
.参数 wLang, 整数型
.参数 szLang, 文本型指针
.参数 cchLang, 整数型
.局部变量 pVerLanguageNameA, 整数型

pVerLanguageNameA = _临时子程序 (“VerLanguageNameA”)
返回 (调用DLL函数 (pVerLanguageNameA, wLang, szLang, cchLang))

.子程序 VerLanguageNameW, 整数型, 公开
.参数 wLang, 整数型
.参数 szLang, 文本型指针
.参数 cchLang, 整数型
.局部变量 pVerLanguageNameW, 整数型

pVerLanguageNameW = _临时子程序 (“VerLanguageNameW”)
返回 (调用DLL函数 (pVerLanguageNameW, wLang, szLang, cchLang))

.子程序 VerQueryValueA, 布尔型, 公开
.参数 pBlock, 整数型
.参数 lpSubBlock, 文本型
.参数 lplpBuffer, 整数型指针
.参数 puLen, 整数型指针
.局部变量 pVerQueryValueA, 整数型

pVerQueryValueA = _临时子程序 (“VerQueryValueA”)
调用DLL函数 (pVerQueryValueA, pBlock, lpSubBlock, lplpBuffer, puLen)
返回 (取布尔结果 ())

.子程序 VerQueryValueW, 布尔型, 公开
.参数 pBlock, 整数型
.参数 lpSubBlock, 文本型
.参数 lplpBuffer, 整数型指针
.参数 puLen, 整数型指针
.局部变量 pVerQueryValueW, 整数型

pVerQueryValueW = _临时子程序 (“VerQueryValueW”)
调用DLL函数 (pVerQueryValueW, pBlock, lpSubBlock, lplpBuffer, puLen)
返回 (取布尔结果 ())




另外,这里是一个读取文件中函数原型生成形如上的劫持代码的小工具,上面的代码是用这个小工具根据提取的函数原型生成的


.版本 2

.支持库 eAPI
.支持库 eRegEx

.局部变量 funcSig, 文本型
.局部变量 inf, 文件流
.局部变量 exportCode, 文本型
.局部变量 sig, FuncSignature
.局部变量 result, 整数型

.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
打开文件 (inf, “cilp_r.txt”, #只读)
如果 (inf = -1)
调试输出 (“无法打开文件 cilp_r.txt”)
返回 (0)
结束如果

.判断循环首 ()
读入一行 (inf, funcSig)
如果 (funcSig = “”)
跳出循环 ()
结束如果

result = parseFunctionSignature (funcSig, sig)
如果 (result = 0)
抛出异常 (“Invalid function signature.”)
结束如果

exportCode = generateExportFunctionCode (sig)
调试输出 (exportCode)

.判断循环尾 ()

关闭文件 (inf)
返回 (0)

.子程序 parseFunctionSignature, 整数型, 公开
.参数 signature, 文本型
.参数 sig, FuncSignature 参考
.局部变量 re, 正则表达式对象
.局部变量 match, 正则表达式匹配结果集
.局部变量 params, 文本型
.局部变量 paramRe, 正则表达式对象
.局部变量 paramMatch, 正则表达式匹配结果集
.局部变量 paramIterator, 正则表达式迭代器
.局部变量 paramEnd, 正则表达式迭代器

创建正则表达式对象 (re, “(\w+)\s+(\w+)$(.*?)$”)
查找正则表达式 (match, re, signature)
如果 (match.找到 = 假)
返回 (0)
结束如果

sig.returnType = 取子匹配项文本 (match, 1)
sig.funcName = 取子匹配项文本 (match, 2)
params = 取子匹配项文本 (match, 3)

创建正则表达式对象 (paramRe, “(\w+)\s+(\w+)”)
创建正则表达式迭代器 (paramIterator, paramRe, params)
paramEnd = 创建空迭代器 ()

.判断循环首 (比较正则表达式迭代器 (paramIterator, paramEnd) ≠ 真)
获取下一个匹配项 (paramMatch, paramIterator)
加入成员 (sig.paramTypes, 取子匹配项文本 (paramMatch, 1))
加入成员 (sig.paramNames, 取子匹配项文本 (paramMatch, 2))

.判断循环尾 ()

返回 (1)

.子程序 generateExportFunctionCode, 文本型, 公开
.参数 sig, FuncSignature
.局部变量 code, 文本缓冲区
.局部变量 newFuncName, 文本型
.局部变量 i, 整数型

newFuncName = “P_” + sig.funcName

追加文本 (code, “extern \”C\” ” + sig.returnType + “ ” + newFuncName + “(\n”)
.计次循环首 (取数组成员数 (sig.paramTypes), i)
追加文本 (code, “” + sig.paramTypes [i] + “ ” + sig.paramNames [i])
如果 (i < 取数组成员数 (sig.paramTypes) - 1)
追加文本 (code, “,\n”)
否则
追加文本 (code, “\n”)
结束如果
.计次循环尾 ()

追加文本 (code, “) {\n”)
追加文本 (code, “” + sig.returnType + “ (*p” + sig.funcName + “)(")

.计次循环首 (取数组成员数 (sig.paramTypes), i)
追加文本 (code, sig.paramTypes [i])
如果 (i < 取数组成员数 (sig.paramTypes) - 1)
追加文本 (code, “, ”)
结束如果
.计次循环尾 ()

追加文本 (code, “) = (“ + sig.returnType + “(*)(")

.计次循环首 (取数组成员数 (sig.paramTypes), i)
追加文本 (code, sig.paramTypes [i])
如果 (i < 取数组成员数 (sig.paramTypes) - 1)
追加文本 (code, “, ”)
结束如果
.计次循环尾 ()

追加文本 (code, ")) (GetVersionFuncAddress(\"" + sig.funcName + "\"));\n")
追加文本 (code, “return p” + sig.funcName + “(")

.计次循环首 (取数组成员数 (sig.paramNames), i)
追加文本 (code, sig.paramNames [i])
如果 (i < 取数组成员数 (sig.paramNames) - 1)
追加文本 (code, “, ”)
结束如果
.计次循环尾 ()

追加文本 (code, ");\n}\n")

返回 (到文本 (code))

.数据类型 FuncSignature, , 公开
.成员 returnType, 文本型
.成员 funcName, 文本型
.成员 paramTypes, 文本型, , "0"
.成员 paramNames, 文本型, , "0"




读取文件cilp_r.txt示例:



.版本 2

.支持库 eAPI

.局部变量 result, 整数型
.局部变量 dwHandle, 整数型
.局部变量 dwLen, 整数型
.局部变量 lpData, 整数型
.局部变量 hFile, 整数型
.局部变量 lplpData, 整数型指针
.局部变量 pdwLen, 整数型指针
.局部变量 dwFlags, 整数型
.局部变量 lpwstrFilename, 文本型
.局部变量 lpdwHandle, 整数型指针
.局部变量 uFlags, 整数型
.局部变量 szFileName, 文本型
.局部变量 szWinDir, 文本型
.局部变量 szAppDir, 文本型
.局部变量 szCurDir, 文本型
.局部变量 puCurDirLen, 整数型指针
.局部变量 szDestDir, 文本型
.局部变量 puDestDirLen, 整数型指针
.局部变量 szSrcFileName, 文本型
.局部变量 szDestFileName, 文本型
.局部变量 szSrcDir, 文本型
.局部变量 szTmpFile, 文本型
.局部变量 puTmpFileLen, 整数型指针
.局部变量 wLang, 整数型
.局部变量 szLang, 文本型
.局部_variable cchLang, 整数型
.局部变量 pBlock, 整数型
.局部变量 lpSubBlock, 文本型
.局部变量 lplpBuffer, 整数型指针
.局部变量 puLen, 整数型指针

.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行

' 示例调用,实际使用时请根据需要调整参数

' GetFileVersionInfoA
API_GetFileVersionInfoA (“example.dll”, 0, 0, 0)

' GetFileVersionInfoByHandle
hFile = CreateFile (“example.dll”, # GENERIC_READ, # FILE_SHARE_READ, 0, # OPEN_EXISTING, 0, 0)
lplpData = 到整数型指针 (0)
pdwLen = 到整数型指针 (0)
API_GetFileVersionInfoByHandle (# GET_FILE_VER_MAJOR, hFile, lplpData, pdwLen)

' GetFileVersionInfoExA
dwFlags = # GET_FILE_VER_MAJOR
lpwstrFilename = “example.dll”
lpdwHandle = 到整数型指针 (0)
API_GetFileVersionInfoExA (dwFlags, lpwstrFilename, 0, 0, 0)

' GetFileVersionInfoExW
lpwstrFilename = “example.dll”
lpdwHandle = 到整数型指针 (0)
API_GetFileVersionInfoExW (dwFlags, 到Unicode (lpwstrFilename), 0, 0, 0)

' GetFileVersionInfoSizeA
lpdwHandle = 到整数型指针 (0)
dwLen = API_GetFileVersionInfoSizeA (“example.dll”, lpdwHandle)

' GetFileVersionInfoSizeExA
dwLen = API_GetFileVersionInfoSizeExA (dwFlags, lpwstrFilename, lpdwHandle)

' GetFileVersionInfoSizeExW
dwLen = API_GetFileVersionInfoSizeExW (dwFlags, 到Unicode (lpwstrFilename), lpdwHandle)

' GetFileVersionInfoSizeW
dwLen = API_GetFileVersionInfoSizeW (到Unicode (“example.dll”), lpdwHandle)

' GetFileVersionInfoW
API_GetFileVersionInfoW (到Unicode (“example.dll”), 0, 0, 0)

' VerFindFileA
szFileName = “example.dll”
szWinDir = “C:\Windows”
szAppDir = “C:\Program Files”
szCurDir = “”
puCurDirLen = 到整数型指针 (1024)
szDestDir = “”
puDestDirLen = 到整数型指针 (1024)
API_VerFindFileA (0, szFileName, szWinDir, szAppDir, &szCurDir, puCurDirLen, &szDestDir, puDestDirLen)

' VerFindFileW
szFileName = “example.dll”
szWinDir = “C:\Windows”
szAppDir = “C:\Program Files”
szCurDir = “”
puCurDirLen = 到整数型指针 (1024)
szDestDir = “”
puDestDirLen = 到整数型指针 (1024)
API_VerFindFileW (0, 到Unicode (szFileName), 到Unicode (szWinDir), 到Unicode (szAppDir), &szCurDir, puCurDirLen, &szDestDir, puDestDirLen)

' VerInstallFileA
szSrcFileName = “example.dll”
szDestFileName = “example.dll”
szSrcDir = “C:\Source”
szDestDir = “C:\Destination”
szCurDir = “”
szTmpFile = “”
puTmpFileLen = 到整数型指针 (1024)
API_VerInstallFileA (0, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, &szTmpFile, puTmpFileLen)

' VerInstallFileW
szSrcFileName = “example.dll”
szDestFileName = “example.dll”
szSrcDir = “C:\Source”
szDestDir = “C:\Destination”
szCurDir = “”
szTmpFile = “”
puTmpFileLen = 到整数型指针 (1024)
API_VerInstallFileW (0, 到Unicode (szSrcFileName), 到Unicode (szDestFileName), 到Unicode (szSrcDir), 到Unicode (szDestDir), 到Unicode (szCurDir), &szTmpFile, puTmpFileLen)

' VerLanguageNameA
wLang = 1033
szLang = “”
cchLang = 1024
API_VerLanguageNameA (wLang, &szLang, cchLang)

' VerLanguageNameW
wLang = 1033
szLang = “”
cchLang = 1024
API_VerLanguageNameW (wLang, &szLang, cchLang)

' VerQueryValueA
pBlock = 0
lpSubBlock = “\VarFileInfo\Translation”
lplpBuffer = 到整数型指针 (0)
puLen = 到整数型指针 (0)
API_VerQueryValueA (pBlock, lpSubBlock, lplpBuffer, puLen)

' VerQueryValueW
pBlock = 0
lpSubBlock = “\VarFileInfo\Translation”
lplpBuffer = 到整数型指针 (0)
puLen = 到整数型指针 (0)
API_VerQueryValueW (pBlock, 到Unicode (lpSubBlock), lplpBuffer, puLen)

返回 (0)

.子程序 API_GetFileVersionInfoA, 布尔型, 公开, 获取文件版本信息
.参数 lptstrFilename, 文本型
.参数 dwHandle, 整数型
.参数 dwLen, 整数型
.参数 lpData, 整数型
.局部变量 result, 布尔型

result = DLL调用 (“version.dll”, “GetFileVersionInfoA”, lptstrFilename, dwHandle, dwLen, lpData)
返回 (result)

.子程序 API_GetFileVersionInfoByHandle, 布尔型, 公开, 根据文件句柄获取文件版本信息
.参数 dwFlags, 整数型
.参数 hFile, 整数型
.参数 lplpData, 整数型指针
.参数 pdwLen, 整数型指针
.局部变量 result, 布尔型

result = DLL调用 (“version.dll”, “GetFileVersionInfoByHandle”, dwFlags, hFile, lplpData, pdwLen)
返回 (result)

.子程序 API_GetFileVersionInfoExA, 布尔型, 公开, 扩展版本的获取文件版本信息
.参数 dwFlags, 整数型
.参数 lpwstrFilename, 文本型
.参数 dwHandle, 整数型
.参数 dwLen, 整数型
.参数 lpData, 整数型
.局部变量 result, 布尔型

result = DLL调用 (“version.dll”, “GetFileVersionInfoExA”, dwFlags, lpwstrFilename, dwHandle, dwLen, lpData)
返回 (result)

.子程序 API_GetFileVersionInfoExW, 布尔型, 公开, 扩展版本的获取文件版本信息(宽字符)
.参数 dwFlags, 整数型
.参数 lpwstrFilename, 文本型
.参数 dwHandle, 整数型
.参数 dwLen, 整数型
.参数 lpData, 整数型
.局部变量 result, 布尔型

result = DLL调用 (“version.dll”, “GetFileVersionInfoExW”, dwFlags, 到Unicode (lpwstrFilename), dwHandle, dwLen, lpData)
返回 (result)

.子程序 API_GetFileVersionInfoSizeA, 整数型, 公开, 获取文件版本信息大小
.参数 lptstrFilename, 文本型
.参数 lpdwHandle, 整数型指针
.局部变量 result, 整数型

result = DLL调用 (“version.dll”, “GetFileVersionInfoSizeA”, lptstrFilename, lpdwHandle)
返回 (result)

.子程序 API_GetFileVersionInfoSizeExA, 整数型, 公开, 扩展版本的获取文件版本信息大小
.参数 dwFlags, 整数型
.参数 lpwstrFilename, 文本型
.参数 lpdwHandle, 整数型指针
.局部变量 result, 整数型

result = DLL调用 (“version.dll”, “GetFileVersionInfoSizeExA”, dwFlags, lpwstrFilename, lpdwHandle)
返回 (result)

.子程序 API_GetFileVersionInfoSizeExW, 整数型, 公开, 扩展版本的获取文件版本信息大小(宽字符)
.参数 dwFlags, 整数型
.参数 lpwstrFilename, 文本型
.参数 lpdwHandle, 整数型指针
.局部变量 result, 整数型

result = DLL调用 (“version.dll”, “GetFileVersionInfoSizeExW”, dwFlags, 到Unicode (lpwstrFilename), lpdwHandle)
返回 (result)

.子程序 API_GetFileVersionInfoSizeW, 整数型, 公开, 获取文件版本信息大小(宽字符)
.参数 lptstrFilename, 文本型
.参数 lpdwHandle, 整数型指针
.局部变量 result, 整数型

result = DLL调用 (“version.dll”, “GetFileVersionInfoSizeW”, 到Unicode (lptstrFilename), lpdwHandle)
返回 (result)

.子程序 API_GetFileVersionInfoW, 布尔型, 公开, 获取文件版本信息(宽字符)
.参数 lptstrFilename, 文本型
.参数 dwHandle, 整数型
.参数 dwLen, 整数型
.参数 lpData, 整数型
.局部变量 result, 布尔型

result = DLL调用 (“version.dll”, “GetFileVersionInfoW”, 到Unicode (lptstrFilename), dwHandle, dwLen, lpData)
返回 (result)

.子程序 API_VerFindFileA, 整数型, 公开, 查找文件版本
.参数 uFlags, 整数型
.参数 szFileName, 文本型
.参数 szWinDir, 文本型
.参数 szAppDir, 文本型
.参数 szCurDir, 文本型 参考
.参数 puCurDirLen, 整数型指针
.参数 szDestDir, 文本型 参考
.参数 puDestDirLen, 整数型指针
.局部变量 result, 整数型

result = DLL调用 (“version.dll”, “VerFindFileA”, uFlags, szFileName, szWinDir, szAppDir, &szCurDir, puCurDirLen, &szDestDir, puDestDirLen)
返回 (result)

.子程序 API_VerFindFileW, 整数型, 公开, 查找文件版本(宽字符)
.参数 uFlags, 整数型
.参数 szFileName, 文本型
.参数 szWinDir, 文本型
.参数 szAppDir, 文本型
.参数 szCurDir, 文本型 参考
.参数 puCurDirLen, 整数型指针
.参数 szDestDir, 文本型 参考
.参数 puDestDirLen, 整数型指针
.局部变量 result, 整数型

result = DLL调用 (“version.dll”, “VerFindFileW”, uFlags, 到Unicode (szFileName), 到Unicode (szWinDir), 到Unicode (szAppDir), &szCurDir, puCurDirLen, &szDestDir, puDestDirLen)
返回 (result)

.子程序 API_VerInstallFileA, 整数型, 公开, 安装文件版本
.参数 uFlags, 整数型
.参数 szSrcFileName, 文本型
.参数 szDestFileName, 文本型
.参数 szSrcDir, 文本型
.参数 szDestDir, 文本型
.参数 szCurDir, 文本型
.参数 szTmpFile, 文本型 参考
.参数 puTmpFileLen, 整数型指针
.局部变量 result, 整数型

result = DLL调用 (“version.dll”, “VerInstallFileA”, uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, &szTmpFile, puTmpFileLen)
返回 (result)

.子程序 API_VerInstallFileW, 整数型, 公开, 安装文件版本(宽字符)
.参数 uFlags, 整数型
.参数 szSrcFileName, 文本型
.参数 szDestFileName, 文本型
.参数 szSrcDir, 文本型
.参数 szDestDir, 文本型
.参数 szCurDir, 文本型
.参数 szTmpFile, 文本型 参考
.参数 puTmpFileLen, 整数型指针
.局部变量 result, 整数型

result = DLL调用 (“version.dll”, “VerInstallFileW”, uFlags, 到Unicode (szSrcFileName), 到Unicode (szDestFileName), 到Unicode (szSrcDir), 到Unicode (szDestDir), 到Unicode (szCurDir), &szTmpFile, puTmpFileLen)
返回 (result)

.子程序 API_VerLanguageNameA, 整数型, 公开, 获取语言名称
.参数 wLang, 整数型
.参数 szLang, 文本型 参考
.参数 cchLang, 整数型
.局部变量 result, 整数型

result = DLL调用 (“version.dll”, “VerLanguageNameA”, wLang, &szLang, cchLang)
返回 (result)

.子程序 API_VerLanguageNameW, 整数型, 公开, 获取语言名称(宽字符)
.参数 wLang, 整数型
.参数 szLang, 文本型 参考
.参数 cchLang, 整数型
.局部变量 result, 整数型

result = DLL调用 (“version.dll”, “VerLanguageNameW”, wLang, &szLang, cchLang)
返回 (result)

.子程序 API_VerQueryValueA, 布尔型, 公开, 查询版本值
.参数 pBlock, 整数型
.参数 lpSubBlock, 文本型
.参数 lplpBuffer, 整数型指针
.参数 puLen, 整数型指针
.局部变量 result, 布尔型

result = DLL调用 (“version.dll”, “VerQueryValueA”, pBlock, lpSubBlock, lplpBuffer, puLen)
返回 (result)

.子程序 API_VerQueryValueW, 布尔型, 公开, 查询版本值(宽字符)
.参数 pBlock, 整数型
.参数 lpSubBlock, 文本型
.参数 lplpBuffer, 整数型指针
.参数 puLen, 整数型指针
.局部变量 result, 布尔型

result = DLL调用 (“version.dll”, “VerQueryValueW”, pBlock, 到Unicode (lpSubBlock), lplpBuffer, puLen)
返回 (result)



免费评分

参与人数 1热心值 +1 收起 理由
dianlao10 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

redapple2015 发表于 2024-11-18 15:24
文件能不能打包一下?谢谢!
lml0126 发表于 2024-11-18 17:58
zyh5028 发表于 2024-11-19 11:45
PaulYangss 发表于 2024-11-19 12:14
我来试一试
gggjmh 发表于 2024-11-19 18:21
谢谢,期待您C的源码,另外问一下,version.dll win7和win10的导出函数是不是不一样,遇到过win10下劫持成功win7下就非法的。
fre1heit 发表于 2024-11-19 22:40
可以试一下
z65555 发表于 2024-11-20 01:09
有时间再学习一下
左神 发表于 2024-11-24 16:31
这个不是只支持劫持32位吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 17:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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