Swift MAC 应用程序在被 IDA 修补后启动失败

Swift MAC app failed to laucnh after being patched by IDA

我是 Apple 设备逆向工程的新手,我开发了一个非常非常简单的 crack me 用于学习目的!一切正常,但是当我在 IDA 中打开我的二进制文件并更改条件指令并应用补丁时,我的应用程序在启动时开始失败!

我有两种方法可以破解代码,首先是将条件语句从 JNZ 更改为 JZ,另一种方法是 NOP JNZ 指令下方的 JMP 函数。

__text:0000000100001387                 mov     rdi, [rbp+var_68]
__text:000000010000138B                 call    _objc_release
__text:0000000100001390                 mov     al, [rbp+var_81]
__text:0000000100001396                 test    al, 1
__text:0000000100001398                 jnz     short loc_10000139F// Goes for Correct condition
__text:000000010000139A                 jmp     loc_100001475 //goes for incorrect condition

在我有逆向工程经验的 C 和其他语言中,这些解决方案会 work.does 任何人都知道这是怎么回事吗?

编辑

这是我在 swift!

中的破解代码
import Cocoa

class ViewController: NSViewController {

    @IBAction func btn(_ sender: Any) {

        if(input.stringValue == "!@#><1234")
        {
            let box = NSAlert()
            box.alertStyle = .informational
            box.messageText = "Cool!"
            box.runModal()
        }else{
            let box = NSAlert()
            box.alertStyle = .critical
            box.messageText = "Not Cool!"
            box.runModal()
        }
    }

    @IBOutlet weak var input: NSTextField!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override var representedObject: Any? {
        didSet {

        }
    }
}

解决方案

这是二进制文件中的代码签名问题。我认为当我们应用补丁并更改二进制文件时,OS 不允许执行该应用程序。所以我刚刚放弃了我的应用程序,现在它已经破解并可以正常工作了。

解决方案

这是二进制文件中的代码签名问题。我认为当我们应用补丁并更改二进制文件时,OS 不允许执行该应用程序。所以我刚刚放弃了我的应用程序,现在它已经破解并可以正常工作了。