飘云阁安全论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

查看: 566|回复: 5

[Python] MacOS签名脚本一枚

[复制链接]
  • TA的每日心情
    开心
    13 小时前
  • 签到天数: 676 天

    [LV.9]以坛为家II

    发表于 2021-1-28 20:34:19 | 显示全部楼层 |阅读模式
    [Python] 纯文本查看 复制代码
    #! /usr/bin/env python3
    #! coding = utf-8
    import os
    import subprocess as commands   # replace commands with subprocess in python3
    import optparse
    
    #use command "security find-identity -v" to list your developer ID.
    DEVELOPER_ID = "Apple Development: Your Email (XXX......)"
    
    def signWithPath(path):
        signCommand = "codesign --force --sign \"%s\" %s" % (DEVELOPER_ID, path)
        retCode, result = commands.getstatusoutput(signCommand)
        if retCode != 0:
            print(result)
            print("code sign failed")
        return retCode
    
    
    def validateWithPath(path):
        signCommand = "codesign --verify --deep --verbose=3 %s" %path
        retCode, result = commands.getstatusoutput(signCommand)
        if retCode == 0:
            print(result)
            print("Accepted!")
            return 0
        else:
            print(result)
            print("Rejected!")
            return -2
    
    def sign(APP_PATH):
        print("> signing frameworks & dylibs...")
    
        if not os.path.exists(APP_PATH):
            print("where's your app?!")
            return
    
        frameworkDir = os.path.join(APP_PATH, "Contents/")
    
        
        for root, dirs, files in os.walk(frameworkDir):
            for f in files:
                if f.endswith(".dylib"):
                    print("signing", f)
                    dylibPath = os.path.join(root, f)
                    signWithPath(dylibPath)
    
        # sign frameworks
        for root, dirs, files in os.walk(frameworkDir):
            for d in dirs:
                if d.endswith(".framework"):
                    print("signing", d)
                    frameworkPath = os.path.join(root, d, "Versions/A")
                    signWithPath(frameworkPath)
    
    
        print("> singing app...")
        print("singing", APP_PATH)
        signWithPath(APP_PATH)
    
        print("> validate code sign...")
        if validateWithPath(APP_PATH) == 0:
            print("Code sign completed!")
        else:
            print("Dohhh!")
    
    def main():
        import sys
        parser = optparse.OptionParser(usage='"Codesign [options] path"')
        parser.add_option('-s', '--sign',help='Sign and valid the app in the path.')
        parser.add_option('-v', '--valid',help='Only valid signature with app in the path.')
    
        options, args = parser.parse_args()
    
        if len(sys.argv) != 3:
            parser.print_help()
            sys.exit(1)
    
        if options.valid is not None:
            validateWithPath(options.valid)
    
        if options.sign is not None:
            sign(options.sign)
    
    
    if __name__ == '__main__':
        main()

    评分

    参与人数 2威望 +2 飘云币 +2 收起 理由
    dryzh + 1 + 1
    不破不立 + 1 + 1 感谢发布原创作品,PYG有你更精彩!

    查看全部评分

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 1409 天

    [LV.10]以坛为家III

    发表于 2021-1-29 20:08:39 | 显示全部楼层
    收藏备用,谢谢楼主提供
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2021-10-10 14:37
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2021-1-29 20:10:31 | 显示全部楼层
    收藏备用,PYG有你更精彩!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-9 22:48
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    发表于 2021-2-1 11:34:27 | 显示全部楼层
    666,学习python 执行命令检查命令回复状态源码
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-11-17 14:37
  • 签到天数: 21 天

    [LV.4]偶尔看看III

    发表于 2021-10-26 10:15:09 | 显示全部楼层
    收藏备用,谢谢楼主分享
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 快速注册

    本版积分规则

    快速回复 返回顶部 返回列表