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

关于apphelp.dll

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

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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

9aaK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2X3K9h3I4W2i4K6u0W2L8X3g2@1i4K6u0r3M7s2u0G2j5$3g2K6M7#2)9J5c8X3q4H3M7r3S2W2L8s2m8Q4x3X3g2V1L8r3I4Q4x3X3g2Z5N6r3#2D9

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

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

7dcK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2#2L8X3E0F1L8%4N6F1j5$3S2W2j5i4c8K6i4K6u0W2L8h3g2Q4x3V1k6X3L8%4u0#2L8g2)9J5c8X3y4Q4x3X3c8S2L8X3c8Q4x3X3c8U0i4K6u0V1i4K6u0r3x3e0x3I4x3U0t1%4i4K6u0V1k6$3g2@1M7s2u0G2j5$3q4V1k6s2u0W2M7%4y4Q4x3X3c8J5k6h3c8A6M7X3g2U0N6r3W2F1k6#2)9J5k6r3q4H3M7r3S2W2L8s2m8Q4x3X3c8V1L8r3I4Q4x3X3g2Z5N6r3#2D9



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