飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 16932|回复: 38

[macOS] BetterZip For macOS 破解实战(Patch公钥、黑名单检测、签名校验、Keygen等)

    [复制链接]
  • TA的每日心情
    开心
    2016-6-16 14:07
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2017-8-10 19:14:07 | 显示全部楼层 |阅读模式
    BetterZip For macOS 破解实战(Patch公钥、黑名单检测、签名校验、KeyGen等) // 适用于目前最新4.x版
    飘云/P.Y.G
    www.chinapyg.com
    特别感谢 @creantan版主

    所需工具:
    • IDA Pro/Hopper Disassembler

    • lldb

    • 010 Editor

    • openssl

    • 最爱的Go







    寻找切入点:


    • 通过IDA搜索关键字,锁定一个可疑函数

    图片1.png

    • lldb下断、在注册界面随便输入注册码,如期断下:
    图片2.png

    算法分析:
    • 解码RSA公钥:
    图片3.png
    这里可以看到RSA公钥的base64解码过程、以及确定使用了OpenSSL库

    • RSA公钥解密注册码
    图片4.png

    这里可以看到用了RSA公钥解密注册码,从mov edi, 80h 可以推断出使用了RSA1024


    • 注册码第一部分:起始特征字
    图片5.png
    ★★★ 注册码开头必须为:__MAS_BetterZp2_、__MIB_BZ-Friend_、__MIB_BetterZip_ ★★★

    • 注册码第二部分:7字节整数
    图片6.png

    这里看到从第0x10字节开始取了7字节,然后转换为int值,黑名单检测稍后分析


    • 注册码第三部分:4字节整数
    图片7.png
    这里看到从第0x23字节开始取了4字节,然后转换为int值

    • 注册码第4部分:任意可视字符
    图片8.png
    这里看到从第0x29字节开始,取得剩下的字符串,根据后面分析可知,是用户名

    • 最后的显示部分
    图片9.png
    显示注册码部分,有3处分支,我们选取了显示参数最多的一处,略显逼格,哈!!

    • 算法总结

    第一部分 __MAS_BetterZp2_、__MIB_BZ-Friend_、__MIB_BetterZip_  占0x10字节
    留空1字节
    第二部分  [0x10, 7]  7字节整数  随机生成(需要避免黑名单)
    留空1字节
    第三部分  [0x23, 4] 4字节整数 随机生成即可
    留空1字节
    第四部分 [0x29, …] 用户名 自己看着办

    因为下标从0开始,根据取值区间来看,需要留空一个字节

    样本注册内容:__MIB_BetterZip_0999999 2017-08-19 9999 www.chinapyg.com

    黑名单检测:
    • 检测点:
    图片10.png
    可以看到这里取了算法第二部分的7位整数,进行黑名单检测

    • 黑名单列表:
    图片11.png

    Patch公钥:
    • 生成公私钥对:
    私钥:openssl genrsa -out rsa_private_key.pem  1024
    -----BEGIN RSA PRIVATE KEY-----
    MIICXQIBAAKBgQDB7kiHY0omkKpzU9sDnaNwLQ6llxGbz+4mr1SIVVJtEA5YEQi+
    SVD1ALS2hZkpOjHUtLfiirz5sA+fhN0ngln12NjPc0z8u3FuZ2aH4ffMlrWr9ysW
    0uvnkBlNXVF/g21l0H/Lt1HSVZmTBDMELeVlWIHLHPRxEbVkjFhGliq13QIDAQAB
    AoGBAKCKTtZtVpwYVFKGj58tp3gchKyGI9iVyDOUH2mBIGwSx50V9OP5s6Auxmr2
    q/UaLNhGBpfufERDAJvwlFe5rBfKv4H9tWiR82KFHZPQK+Cd3mlre0c2jB5aimIu
    fiAmNZmlyudBm0eN45c/t8jcbeK2UXvseN5d9fdqnPs8XKjBAkEA+sej2nyG5YAJ
    dUa5fLE1H45j9FikpXqIWZi/aVe9vwSUoXbzYqv/DssaZt5HejKzqYkf3f86O65u
    wVN5sjmqzQJBAMX3tH9jb1nCF69tCB6tUTrTWX+wHVsvCHs3VQJXp5iaU2DewmL4
    k0Dddis6xcBThywfbAMA/1Thn+DOubxgV1ECQEcCUo4iJpxDdeokPY9mKhGmYv0k
    QHKu0H72NnTgqFS3OlLB+MaexxjsP6yTEhAy3RaLQl+8zkNp7+iD93iUxZ0CQQDF
    mJbax98u0iJeARAnvorjkm00nA7RIsLuaa46Jk+sa+1pNS8FJmOkTOhUAde8PiMf
    kUV4QhiZGpNAClcthWPhAkAa1L9X9J9ng8MaIDXMpjNAlFlnEuJ25wXbgiDWrfJY
    QAMiDzc8qm0iB/9i86rCGnwFf1sO53L9gjiq13VjjLQg
    -----END RSA PRIVATE KEY-----

    公钥:openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
    -----BEGIN PUBLIC KEY-----
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDB7kiHY0omkKpzU9sDnaNwLQ6l
    lxGbz+4mr1SIVVJtEA5YEQi+SVD1ALS2hZkpOjHUtLfiirz5sA+fhN0ngln12NjP
    c0z8u3FuZ2aH4ffMlrWr9ysW0uvnkBlNXVF/g21l0H/Lt1HSVZmTBDMELeVlWIHL
    HPRxEbVkjFhGliq13QIDAQAB
    -----END PUBLIC KEY-----

    图片12.png

    • 对公钥进行base64编码
    图片13.png

    LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FEQjdraUhZMG9ta0twelU5c0RuYU53TFE2bApseEdieis0bXIxU0lWVkp0RUE1WUVRaStTVkQxQUxTMmhaa3BPakhVdExmaWlyejVzQStmaE4wbmdsbjEyTmpQCmMwejh1M0Z1WjJhSDRmZk1scldyOXlzVzB1dm5rQmxOWFZGL2cyMWwwSC9MdDFIU1ZabVRCRE1FTGVWbFdJSEwKSFBSeEViVmtqRmhHbGlxMTNRSURBUUFCCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQ==

    • 替换公钥
    图片14.png

    签名校验:
    • 通过对公钥的交叉引用,我们发现了一处签名校验
    图片15.png

    非常简单的验证公钥的第0x40字节,如果不等于0x55 则over!
    经@creantan版主分析,此处不为0x55的概率非常低 ,所以几乎可以忽略此签名校验

    KeyGen:

    • Go Go Go!!

    图片16.png

    [Golang] 纯文本查看 复制代码
    package main
    
    import (
            "log"
            "keygen/codec"
    )
    
    const (
            g_PRIVATE_KEY = `-----BEGIN RSA PRIVATE KEY-----
    MIICXQIBAAKBgQDB7kiHY0omkKpzU9sDnaNwLQ6llxGbz+4mr1SIVVJtEA5YEQi+
    SVD1ALS2hZkpOjHUtLfiirz5sA+fhN0ngln12NjPc0z8u3FuZ2aH4ffMlrWr9ysW
    0uvnkBlNXVF/g21l0H/Lt1HSVZmTBDMELeVlWIHLHPRxEbVkjFhGliq13QIDAQAB
    AoGBAKCKTtZtVpwYVFKGj58tp3gchKyGI9iVyDOUH2mBIGwSx50V9OP5s6Auxmr2
    q/UaLNhGBpfufERDAJvwlFe5rBfKv4H9tWiR82KFHZPQK+Cd3mlre0c2jB5aimIu
    fiAmNZmlyudBm0eN45c/t8jcbeK2UXvseN5d9fdqnPs8XKjBAkEA+sej2nyG5YAJ
    dUa5fLE1H45j9FikpXqIWZi/aVe9vwSUoXbzYqv/DssaZt5HejKzqYkf3f86O65u
    wVN5sjmqzQJBAMX3tH9jb1nCF69tCB6tUTrTWX+wHVsvCHs3VQJXp5iaU2DewmL4
    k0Dddis6xcBThywfbAMA/1Thn+DOubxgV1ECQEcCUo4iJpxDdeokPY9mKhGmYv0k
    QHKu0H72NnTgqFS3OlLB+MaexxjsP6yTEhAy3RaLQl+8zkNp7+iD93iUxZ0CQQDF
    mJbax98u0iJeARAnvorjkm00nA7RIsLuaa46Jk+sa+1pNS8FJmOkTOhUAde8PiMf
    kUV4QhiZGpNAClcthWPhAkAa1L9X9J9ng8MaIDXMpjNAlFlnEuJ25wXbgiDWrfJY
    QAMiDzc8qm0iB/9i86rCGnwFf1sO53L9gjiq13VjjLQg
    -----END RSA PRIVATE KEY-----`
    
            g_PUBLICK_KEY = `-----BEGIN PUBLIC KEY-----
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDB7kiHY0omkKpzU9sDnaNwLQ6l
    lxGbz+4mr1SIVVJtEA5YEQi+SVD1ALS2hZkpOjHUtLfiirz5sA+fhN0ngln12NjP
    c0z8u3FuZ2aH4ffMlrWr9ysW0uvnkBlNXVF/g21l0H/Lt1HSVZmTBDMELeVlWIHL
    HPRxEbVkjFhGliq13QIDAQAB
    -----END PUBLIC KEY-----
    `
    )
    
    func main() {
            pubErr, priErr := codec.RSA.Init(g_PUBLICK_KEY, g_PRIVATE_KEY)
            log.Println("init error:", pubErr, priErr)
            str, _ := codec.RSA.String("__MIB_BetterZip_0999999 2999-12-31 9999 [url=https://www.chinapyg.com]www.chinapyg.com[/url]", codec.MODE_PRIKEY_ENCRYPT)
            log.Println("prikey encrypt:", str)
            str, _ = codec.RSA.String(str, codec.MODE_PUBKEY_DECRYPT)
            log.Println("pubkey decrypt:", str)
    }
    


    对应注册码:
    vAMODxE4yMO3fDmddGCXqdLsFdf5tt1yJWXxT4YuZ9Tfcr1TrfcNtFgNT0xg3VFuMIqFXiZCO3/j6siQo4p2frWFt2Ph/LK1BMqmq7gzS/aLGoKi+Sw3+VjJSFxLRTOeArZnyRqy+FWSZ8OdsP1LfWXsLaoOtpiNcObbko9bsNE=

    KO.png



    keygen_src.zip

    11.74 KB, 下载次数: 36, 下载积分: 飘云币 -2 枚

    售价: 5 枚飘云币  [记录]

    注册机源文件

    评分

    参与人数 19威望 +164 飘云币 +136 收起 理由
    Dweling + 4 很给力!
    帽子戏法 + 4 PYG有你更精彩!
    nyanyh + 4 很给力!
    dryzh + 4 很给力!
    wjzzhtgp + 4 很给力!
    0xcb + 4 + 4 赞一个!
    不破不立 + 20 + 20 PYG有你更精彩!
    酒醒黄昏 + 4 很给力!
    九层楼 + 20 + 20 PYG有你更精彩!
    小范 + 5 赞一个!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    发表于 2017-8-10 19:38:19 | 显示全部楼层
    [size=44.5284px]前排学习
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-17 22:44
  • 签到天数: 132 天

    [LV.7]常住居民III

    发表于 2017-8-10 20:27:20 | 显示全部楼层
    前排学习,非常强大,自己动手试试
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 09:38
  • 签到天数: 2577 天

    [LV.Master]伴坛终老

    发表于 2017-8-10 20:45:38 | 显示全部楼层
    不懂也支持,学习!!!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-3 12:48
  • 签到天数: 141 天

    [LV.7]常住居民III

    发表于 2017-8-11 09:00:09 | 显示全部楼层
    支持飘云大大。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2022-9-4 21:29
  • 签到天数: 1756 天

    [LV.Master]伴坛终老

    发表于 2017-8-11 10:00:52 | 显示全部楼层
    老大出手,前排膜拜
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-12-11 09:09
  • 签到天数: 734 天

    [LV.9]以坛为家II

    发表于 2017-8-11 10:20:05 | 显示全部楼层
    超级给力,学到新知识了。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-9 08:20
  • 签到天数: 869 天

    [LV.10]以坛为家III

    发表于 2017-8-11 12:11:03 | 显示全部楼层
    飘总威武啊!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2024-3-10 19:49
  • 签到天数: 473 天

    [LV.9]以坛为家II

    发表于 2017-8-11 13:09:15 | 显示全部楼层
    在学mac中,谢谢飘哥
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-3-20 15:56
  • 签到天数: 617 天

    [LV.9]以坛为家II

    发表于 2017-8-11 14:32:57 | 显示全部楼层
    来也飘云,去也飘云。飘总厉害。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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