首页
社区
课程
招聘
未解决 [悬赏]Delphi hook GetUserNameEx 20.00雪花
发表于: 2017-6-3 07:34 2850

未解决 [悬赏]Delphi hook GetUserNameEx 20.00雪花

2017-6-3 07:34
2850

function NewGetUserNameEx(NameFormat: DWORD; lpNameBuffer: lptstr; var nSize: DWORD): Boolean; stdcall;

type

   TNewGetUserNameEx=function (NameFormat: DWORD; lpNameBuffer: lptstr; var nSize: DWORD): Boolean; stdcall;

begin                  

 Result:=TNewGetUserNameEx(Hook32[47].BaseAddr32)(NameFormat,lpNameBuffer, nSize);


 // StrPCopy(lpNameBuffer,'111111'); //这样目标文件GetUserNameEx结果是乱码

  // CopyMemory(lpNameBuffer, @Buffer, 4);//这样目标文件GetUserNameEx结果还是原来的值



end;

因为最后返回值在lpNameBuffer里,搞了半天不知道怎么hook这种。用StrPCopy,CopyMemory都不行,要么乱码要么改变不了。求指点



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 602
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
仅仅这点代码别人大约很难帮上忙的,首先你得确认你的Hook正确运行了,在lpNameBuffer里面是有你需要的数据,然后再考虑数据的格式不是与你的参数是否对应,本质上参数就是指针,对了就能得到需要的结果,不对要么改参数类型,要么自己提取转换
2017-6-3 10:16
0
雪    币: 96
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3

能正常执行。
我想问,在执行返回之后怎么覆盖buffer里的值。我试验了copystr结果是乱码。可能是数据类型不对。

2017-6-3 10:39
0
雪    币: 4560
活跃值: (1002)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
与字符串相关的API有两种一种是W结尾宽字符的一种是A结尾窄字符的
所以你的例子里GetUserNameEx就有两个一个是GetUserNameExW一个是GetUserNameExA这个需要区分开
2017-6-3 10:48
0
雪    币: 96
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢兄弟,你们俩说的我都懂,我想问的是,解决方法。
怎么copy安全的,正确的,覆盖buffer
2017-6-3 10:55
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
  g:=    StrPas(lpNameBuffer)      ;
                                        g:=g+'dog';
                                        lpNameBuffer:=PChar(g);  nsize:=length(g);
2017-7-7 18:17
0
雪    币: 631
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
未指定size
2017-7-22 03:54
0
游客
登录 | 注册 方可回帖
返回
//