-
-
[求助]用DLL劫持实现API HOOK 使软件绿化 碰到的问题。
-
发表于: 2010-2-1 20:26 4887
-
这软件就是 mediamonkey 什么都好。就是配置保存到系统盘的ProgramData下面的。 目的是保存到其他分区
分析后软件是通过 读取注册表找到 ProgramData 所在位置的。于是想到 HOOK RegQueryValueEx 来实现。
为防止软件更新后补丁也要更新。用了DLL劫持。
HOOK RegQueryValueEx 代码:
function RegQueryValueEx_Proc(Hkey:HKEY;pValueName:PWideChar;lpReserved:Pointer;lpType:Pdword;lpData:Pbyte;lpcbData:Pdword):integer; stdcall;
begin
result:=RegQueryValueEx_Next(fhkey,pValueName,lpReserved,lpType,lpData,lpcbData);
DoEdit(pValueName,'只是一个测试',lpData,lpcbData);
.......................
Procedure DoEdit(Key,Str_val:widestring;val:PByte;len:Pdword);
var Flen:dword;
begin
Flen:=Length(Str_val)*2;
Move(str_val[1],val^,flen);
len^:=FLen;
end;
问题:
软件读取同一个键值用了 2次 RegQueryValueEx 前一次可能是判断键值是否存在。
按上面修改后。发现软件得到值的长度 不是 len^:=FLen;(这里是12) 取出来的值是 大于6个字的。 这是为什么呢。
分析后软件是通过 读取注册表找到 ProgramData 所在位置的。于是想到 HOOK RegQueryValueEx 来实现。
为防止软件更新后补丁也要更新。用了DLL劫持。
HOOK RegQueryValueEx 代码:
function RegQueryValueEx_Proc(Hkey:HKEY;pValueName:PWideChar;lpReserved:Pointer;lpType:Pdword;lpData:Pbyte;lpcbData:Pdword):integer; stdcall;
begin
result:=RegQueryValueEx_Next(fhkey,pValueName,lpReserved,lpType,lpData,lpcbData);
DoEdit(pValueName,'只是一个测试',lpData,lpcbData);
.......................
Procedure DoEdit(Key,Str_val:widestring;val:PByte;len:Pdword);
var Flen:dword;
begin
Flen:=Length(Str_val)*2;
Move(str_val[1],val^,flen);
len^:=FLen;
end;
问题:
软件读取同一个键值用了 2次 RegQueryValueEx 前一次可能是判断键值是否存在。
按上面修改后。发现软件得到值的长度 不是 len^:=FLen;(这里是12) 取出来的值是 大于6个字的。 这是为什么呢。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
赞赏
雪币:
留言: