【发布时间】:2019-07-28 18:47:57
【问题描述】:
我是苹果设备逆向工程的新手,我开发了一个非常简单的破解我来学习!一切正常,但是当我在 IDA 中打开我的二进制文件并更改条件指令并应用补丁时,我的应用程序在启动时开始失败!
有两种方法可以破解代码,第一种是将条件语句从 JNZ 更改为 JZ,另一种方法是在 JNZ 指令下方 NOP 执行 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 和其他语言中,这些解决方案可以工作。有没有人知道这里发生了什么?
编辑
这是我的快速破解密码!
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 {
}
}
}
解决方案
这是其二进制文件中的代码签名问题。我认为当我们应用补丁并更改二进制文件时,操作系统不允许执行应用程序。所以我刚刚辞职了我的应用程序,现在它已经破解并且可以工作了。
【问题讨论】:
-
请不要发布指向外部文件托管商的链接。 Stack Overflow 上的所有问题都必须是独立的。相反,请将您的应用程序的源代码或minimal reproducible example 发布到问题中。
-
@fuz 抱歉,已编辑
-
现在您的问题根本不包含任何项目,并且无法重现。按照我之前说的做,并附上minimal reproducible example(重点是reproducible)。
-
@sci3nt15t 请将解决方案作为答案发布,而不是作为原始问题的一部分。
标签: swift assembly x86-64 disassembly ida