您的位置:首页 > 其它

VC 创建带有管理员权限的快捷方式

2016-12-22 19:59 232 查看

一:引子

今天遇到一个问题,创建一个带有启动参数的快捷方式,但打开快捷方式时,
有时启动参数会传入进来,有时不会传入进来,以前是偶现,但今天是必现的情况,
这对于调试来说无疑是个好时机。
研究后,发现用管理员权限启动可以正常将启动参数传入,从网上搜索了很多关
于lnk的文件格式的说明,但对于权限启动的说明没有任何资料,以前也做过lnk
恶意查杀的调查,但针对的不是权限问题。
右击快捷方式点击高级,会发现一个复选---> 用管理员身份运行,那么既然该
选项是快捷方式的一个属性,那么在快捷方式的文件格式里必然有一个权限的标志。
思路确定了,那么新建一个快捷方式,然后复制,一个设置用管理员身份运行,
另外一个不设置,此时用二进制查看工具来对比两个文件的不同(这里 beyond
compare,ultraEdit 都不能对lnk文件本身二进制格式进行打开,打开的
都是lnk文件执行的目标文件,这里用的是010Editor来肉眼对比),以前分析
过lnk文件的文件格式,知道有一个flags标志位,果然在0x15的byte位发现
了不同,如下图:
![这里写图片描述](https://img-blog.csdn.net/20161222201226975?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGExMzRoYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

![这里写图片描述](https://img-blog.csdn.net/20161222201241631?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGExMzRoYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
从上图中对比可以发现,有管理员权限的lnk文件0x15位置的值为0x20,而无管
理员权限的文件为0x00;那么就很好解决了。


代码

FILE *hfile = fopen(szLnkPath, "r+");
if(hfile == NULL)
{
return;
}
fseek(hfile, 0x15, SEEK_SET);
BYTE ch = 0x20;
fwrite(&ch, 1, 1, hfile);
fclose(hfile);


ok,验证解决。

后记:其实可以从这个lnk文件格式深入进去探究uac的方案的部分细节,和lnk的加载
处理细节,可以在windbg中对SHELL32!_LoadCPLModule下断进行跟进,可能会在
以后对这部分内容的探索做一个总结。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: