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

一:引子

    今天遇到一个问题,创建一个带有启动参数的快捷方式,但打开快捷方式时,
    有时启动参数会传入进来,有时不会传入进来,以前是偶现,但今天是必现的情况,
    这对于调试来说无疑是个好时机。
    研究后,发现用管理员权限启动可以正常将启动参数传入,从网上搜索了很多关
    于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下断进行跟进,可能会在
以后对这部分内容的探索做一个总结。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值