Surge v4 partial crack (MacOS, only main features)
Find a file
2022-01-27 12:22:34 +08:00
README.md readme updated 2022-01-14 21:21:09 +08:00
Resources.zip.enc fixed an error when crack 2022-01-27 12:22:34 +08:00
screenshot.png added all files 2022-01-14 21:15:11 +08:00

Surge v4 full crack.

仅学习用途,请勿挪作他用

FOR STUDY PURPOSES ONLY

敏感信息已模糊处理

基本类型

license type

  • 1: Trial
  • 2: Licensed
  • 3: Revoked

过反调试

程序开头使用ptrace反调试可以静态/动态patch过掉参见

https://cardaci.xyz/blog/2018/02/12/a-macos-anti-debug-technique-using-ptrace/

伪造license

license在~/Library/Application\ Support/com.nssurge.surge-mac/的xattr中被签过名。

  • 在0x000000000处将1改为2licensed该函数用于判定license类型并赋值给一个license type的全局变量0x000000000
  • 0x000000000处的函数验证了license的签名patch该函数可以过掉签名验证然后license随便写
  • 验证签名使用EVP算法尝试劫持本地公钥伪造license和签名

应用重签名

应用有签名,使用

codesign -s - -fv path

重新Ad-Hoc签名后应用联网出现问题控制变量进行实验发现只要重签名就出问题因此推测程序内存在某种检查。使用dtrace检查syscall发现程序执行过程中读到了自己的embedded code signature因此使用dtrace监控stacktrace

#!/usr/sbin/dtrace -s

syscall::pread:entry
/ pid == $1 && arg3 == 0x000000000 /
{
    ustack(50);
}

结合结果进行检查发现函数0x000000000调用了和codesign有关的函数提取了当前应用的codesign信息中的teamIDSurge公司的ID为XXXXXXXX并求出各位的和

sum(map(lambda x: ord(x), "XXXXXXXX"))

在0x000000000的函数中这个和被用于计算出某个关键网络地址重新签名后patch上述函数应用成功联网。

来自helper的二次验证

上述步骤完成后发现Surge主程序不定时闪退调试发现收到SIGKILL使用dtrace监控

#!/usr/sbin/dtrace -s

syscall::kill:entry
/ (args[0] == $1 && args[1] == 9) /
{
    printf("[%s - %d - %d] sent SIGKILL\n",
           execname, pid, tid);
}

发现信号来自helper因此分析helper发现有检查

  1. patch一下将SecCode检查过掉
  2. 对helper进行重签名注意先使用lipo将help strip成单一架构的binary否则codesign重签名后验证依然不通过因为只签了当前架构的
  3. 使用codesign -d -r- path命令查看helper和主程序的designated requirement据此修改helper和主程序的Info.plist的SMPrivilegedExecutables域并重签名,直至使用 https://raw.githubusercontent.com/keybase/client/master/osx/Helper/SMJobBlessUtil.py 校验通过。

破解结果如下,程序稳定运行: