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下断进行跟进,可能会在 以后对这部分内容的探索做一个总结。
相关文章推荐
- 创建具有管理员权限的Command命令行快捷方式
- vc 创建快捷方式
- VC创建快捷方式
- VC++创建快捷方式文件
- VC 为程序创建快捷方式的详细讲解
- vc 创建桌面快捷方式
- VC创建快捷方式
- VC 为程序创建快捷方式的详细讲解
- VC 为程序创建快捷方式的详细讲解
- VC 为程序创建快捷方式的详细讲解
- 给应用程序创建快捷方式VC实现
- VC创建快捷方式
- VC学习资料收集(23):创建快捷方式
- VC学习资料收集(24):在应用程序中创建快捷方式
- VC 如何创建自身快捷方式
- VC 创建快捷方式和得到桌面路径
- vc 创建快捷方式
- VC 为程序创建快捷方式的详细讲解
- vc 创建桌面快捷方式
- VC创建快捷方式