首页
社区
课程
招聘
[讨论][原创]win32汇编编译成带盾符号的exe
发表于: 2014-4-18 21:48 5768

[讨论][原创]win32汇编编译成带盾符号的exe

2014-4-18 21:48
5768
编译器: masm32 v11
系统: win7 64

刚才想写一个补丁程序,于是起了一个Patch.asm的文件名,结果使用makefile编译之后竟然出现了带盾的图标,这让我感觉很惊讶

我测试了一下如下情况:

1)同样的程序,换一个文件名,编译结果,没有带盾

2)Patch.asm文件名,程序只有一个基本框架,什么代码都没写,编译结果,带盾

不知道哪位能解释一下,这是什么原因?

1.为啥只要是Patch.asm这个文件名就会编译带盾

2.还有谁能讲讲,用win32汇编,编译出带盾文件的通用方法

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 1904
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
把文件放到FAT32格式的分区看看还有没有盾牌,以前碰到过,我也不知道是咋回事。与文件名没关系,可能与文件创建时属性有关系吧!我测试过把文件以资源的方式编译到其他程序中,再写到硬盘上盾牌就没了!文件没有改变一个字节。
2014-4-18 22:00
0
雪    币: 49
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我刚在一个fat32的U盘试了一下,新建了一个文件,然后命名为Patch.asm,编译带盾,换成别文件名的没有盾。。。

然后我以资源形式捆绑了patch.exe文件, 然后把捆绑了Patch.exe的exe文件放在U盘中,运行,释放了带盾patch.exe文件
上传的附件:
2014-4-18 22:31
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
带盾与否取决于你的文件名
例如patch.exe setup.exe update.exe 只要是这名字的 都带盾
好像还有flash update相关的
2014-4-18 22:32
0
雪    币: 10
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
有点意思
2014-4-19 00:47
0
雪    币: 49
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢啊,setup.exe update.exe 这两个确实可以,试过了,不过下面的那句话不理解,还有,大神知不知道编译成带盾的是怎么实现的么
2014-4-19 12:18
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
你去找找看系统flash控件升级程序的文件名 这个文件名也会变成带盾的
再一个就是 编译成任意文件名都带盾的需要往你的exe资源里添加一个manifest就行了
2014-4-19 16:14
0
雪    币: 49
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
好了,开始结贴,谢谢Morgion大神的指导,总结一下,设置成任意文件名带盾的步骤

1.先建立一个xxx.exe.manifest的文件,并把下面的内容复制到这个文件内,里面的
level="requireAdministrator",这句话就是请求管理员权限

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
            </requestedPrivileges>
        </security>
    </trustInfo>
</assembly>    


2.正常编译文件, 编译之后exe会出现带盾图标,但是把exe复制到别的文件夹,盾就没有了,那是因为xxx.exe.manifest没有复制过去,好像系统是先根据那个manifest文件的内容确定exe该怎么执行,具体的google去吧

3.把xxx.exe.manifest嵌入到文件内的方法

在编译之后使用mt命令,把xxx.exe.manifest嵌入到exe文件

mt.exe -manifest "Foobar.exe.manifest" -outputresource:"Foobar.exe"


如果是DLL

mt.exe -manifest "Foobar.dll.manifest" -outputresource:"Foobar.dll"


mt.exe, masm32 里没有,需要去vc里找,我在附件中,打包了

我是直接把这句写进makefile里面了

MANIFEST = $(EXE).manifest
$(EXE): $(OBJ)
	link $(LINK) $** && mt -manifest $(MANIFEST) /outputresource:$(EXE)


这样子编译之后的exe,就不再需要manifest那个文件了,拷贝到哪都是带盾的

参考资料;http://www.codeproject.com/Articles/17968/Making-Your-Application-UAC-Aware

感谢大家的帮忙,特别感谢Morgion
上传的附件:
2014-4-19 19:06
0
雪    币: 3725
活跃值: (624)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
9
太高级了, 我用的XP,编译出来还是一个白框框的图标...没有变化.
关注,跟踪学习中.
2014-4-24 16:44
0
游客
登录 | 注册 方可回帖
返回
//