首页
社区
课程
招聘
关于apphelp.dll
发表于: 2018-3-29 20:38 7521

关于apphelp.dll

2018-3-29 20:38
7521
我系统是win10 64位,用的vs2015.编译一个最简单的程序,main里只有一句代码:
printf("%x\n", GetModuleHandleA("apphelp.dll"));
第一次运行时,都能打印一个非零值,以后再运行时就是零了。
换个文件夹再运行,第一次也是打印非零值,以后再运行就是零了.
把EXE改名,第一次运行也是打印非零值,以后再运行就是零了。
我删除了注册表,系统盘与当前的所以与本文件相关的东西,也是这种现象。
请问诸位大牛,这个apphelp.dll是做什么的?为什么会出现这种现象?

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

最后于 2018-3-29 20:39 被华哥huage编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
2
0  说明函数调用失败 
为啥第二次失败呢    可能explorer或者apphelp本身亦或者其它啥根据检测exe名在当前文件夹首次运行会做个flag      试试kernel32? 
2018-3-29 21:14
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
3
GetLastError了解一下?
2018-3-29 21:14
0
雪    币: 68
活跃值: (150)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我用工具看了,第二次运行时,就没有加载apphelp.dll,所以打印了零值,GetLastError()也用过,没错。但第一次就能加载,不知道为什么?楼上大侠,你可知道这个apphelp.dll是干什么用的?
2018-3-29 21:18
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
5
根据flag是否存在  系统给第一次加载    第二次运行不给加载  没接触过这个dll
2018-3-29 21:22
0
雪    币: 68
活跃值: (150)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼上大侠,这个flag,如何去除?是个什么样的东西
2018-3-29 21:29
0
雪    币: 68
活跃值: (150)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我重启了系统,也是这种现象。
2018-3-29 21:33
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
8
不知道  知道这个然并暖  没多大意义    你就把这个apphelp  是windows记录exe运行信息的一个库吧   
2018-3-29 21:48
0
雪    币: 68
活跃值: (150)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
多谢楼上大侠 
2018-3-29 21:55
0
雪    币: 459
活跃值: (166)
能力值: ( LV9,RANK:165 )
在线值:
发帖
回帖
粉丝
10

这个apphelp.dll是做什么的:

抄了个非官方解释:

The genuine apphelp.dll file is a software component of Application Compatibility Client Library by Microsoft.The dynamic link library to support a helper function, this application runs with the Microsoft Application Compatibility Client. It assists Windows applications managed by the Application Compatibility Toolkit. The Application Compatibility Toolkit is a program that assists overall application management in Windows. Founded in 1975, Microsoft's flagship product is the Windows operating system, which is installed on over 90% of workstations worldwide.

https://www.file.net/process/apphelp.dll.html

为什么会出现这种现象?
没有去分析windows对这个dll的加载的具体方式,我暂时也不造。。~望楼下补充

对了lz提一个事,高版本windows sdk中GetProcAddress被动了手脚,调用它来获取user32.dll中的某些导出函数时(e.g.MessageBoxA(W))有时会被redirect到apphelp.dll中的某个函数上,据说是为了保持进程API调用的稳定性,将原有的api调用先挂到apphelp中的某个更能处理错误的函数中进行处理后再传给user32中的原函数,这时候自己实现一个GetProcAddress才可以获取到原函数地址。

https://www.unknowncheats.me/forum/c-and-c-/131227-getprocaddress-redirecting-apphelp-dll.html



最后于 2018-3-30 11:51 被yypEx编辑 ,原因:
2018-3-30 11:45
0
雪    币: 68
活跃值: (150)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
多谢楼上大侠,我根据你的资料看了下,真的是与兼容性相关的东西。大体了解怎么回事了,多谢.
2018-3-30 20:42
0
雪    币: 2375
活跃值: (433)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
华哥huage 多谢楼上大侠,我根据你的资料看了下,真的是与兼容性相关的东西。大体了解怎么回事了,多谢.
知道了有什么用呢?
2018-3-30 21:21
0
雪    币: 68
活跃值: (150)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
就是与兼容性相关的东西。它IAT  hook了一些函数来实现兼容性
2018-4-1 09:49
0
游客
登录 | 注册 方可回帖
返回
//