|
|
本帖最后由 cutebe 于 2026-4-30 21:56 编辑
模仿以下贴子写一个: 办公软件WPS的JSA中,读取.DLL库文件的字符串资源
PowerShell怎么读取dll文件中的字符串?
- function 读取库文件的字符串资源测试(){
- //对应字符串:需要管理员特权 //@%SystemRoot%\System32\ActionCenterCPL.dll,-6
- let 库与字符串资源代号="@%SystemRoot%\\System32\\ActionCenterCPL.dll,-6";
- let 库文件="C:\\Windows\\System32\\ActionCenterCPL.dll"; //@要去除,变量%SystemRoot%要转为实际值
- let 字符串代号=6; //代号是正数,要去掉符号。代号还可以是1,2,3,……
- console.clear();
- let 模块句柄=以数据方式加载库(库文件);
- console.log("模块句柄:"+模块句柄);
- let 字符串=读取库中字符串资源(模块句柄,字符串代号);
- console.log("读取动态库文件中的字符串资源:\n"+库与字符串资源代号+"\n读出字符串:"+字符串)
- 释放库(模块句柄);
- }
- function 以数据方式加载库(库文件){
- let 数据方式=0x2;
- const 执行宏调用=ExecuteExcel4Macro;
- let 模块句柄=执行宏调用(`CALL("Kernel32","LoadLibraryExA","JFJJ","${库文件}",0,${数据方式})`);
- if(!模块句柄){console.log("错误代码:"+执行宏调用(`CALL("Kernel32","GetLastError","I")`));}
- return 模块句柄;
- }
- function 读取库中字符串资源(模块句柄,字符串代号){
- const 执行宏调用=ExecuteExcel4Macro;
- let 字节数=255;
- let 内存地址=申请虚拟内存(字节数+1);
- let 字符串长度=执行宏调用(`CALL("User32","LoadStringA","JJJJJ",${模块句柄},${字符串代号},${内存地址},${字节数})`);
- let 字符串=内存读取字符串(内存地址);
- 释放虚拟内存(内存地址);
- return 字符串;
- }
- function 读取库中字符串资源二(模块句柄,字符串代号){
- const 执行宏调用=ExecuteExcel4Macro;
- let 字符串字节数=255;
- let 内存地址=申请虚拟内存(字符串字节数+1);
- let 字符串=执行宏调用(`CALL("User32","LoadStringA","3JJFJ",${模块句柄},${字符串代号},${内存地址},${字符串字节数})`);
- 释放虚拟内存(内存地址);
- return 字符串;
- }
- function 释放库(模块句柄){
- const 执行宏调用=ExecuteExcel4Macro;
- let 结果=执行宏调用(`CALL("Kernel32","FreeLibrary","AJ",${模块句柄})`);
- return 结果;
- }
- function 内存读取字符串(内存地址){ //返回字符串
- const 执行宏调用=ExecuteExcel4Macro,段长度=127;
- const 总字节=执行宏调用(`CALL("Kernel32","lstrlenA","JJ",${内存地址})`); //内存文本字节数
- let 偏移字节=0,文本字符串=分段文本='';
- while(偏移字节<总字节){ //返回字符串F。 //返回超255字节时,也需要分段操作
- 分段文本=执行宏调用(`CALL("Kernel32","lstrcpynW","FFJJ","",${内存地址+偏移字节},${段长度})`);
- 偏移字节+=分段文本.replace(/[^\x00-\xff]/g,'xx').length; //计算字符串字节数
- 文本字符串+=分段文本;
- }
- return 文本字符串;
- }
- function 申请虚拟内存(字节数){ //返回内存地址
- const 执行宏调用=ExecuteExcel4Macro;
- const 内存地址=执行宏调用(`CALL("Kernel32","VirtualAlloc","JJJJJ",0,${字节数},${0x3000},4)`);
- return 内存地址;
- }
- function 释放虚拟内存(内存地址){
- const 执行宏调用=ExecuteExcel4Macro;
- 执行宏调用(`CALL("Kernel32","VirtualFree","JJJJ",${内存地址},0,${0x8000})`);
- }
复制代码 |
|