我是Apple设备上逆向工程的新手,出于学习目的,我开发了一个非常简单的破解工具!一切正常,但是当我在IDA中打开二进制文件并更改条件指令并应用补丁时,我的应用在启动时开始失败!
我可以通过2种方式破解代码,一种是将条件语句从JNZ更改为JZ,另一种是将JMP函数置于JNZ指令下面,以NOP处理。
__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和其他我具有逆向工程经验的语言中,这些解决方案将起作用。任何人都不知道这是怎么回事吗?
编辑这是我迅速破解我的代码!
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 { } } }
解这是其二进制文件中的代码签名问题。我认为当我们应用补丁程序并更改二进制文件时,操作系统不允许执行该应用程序。所以我只是辞职了,现在它已经可以正常工作了。