3

我正在寻找设计自毁 Cocoa 应用程序的方法。这个想法是在启动时检测应用程序是否正在进行逆向工程(这总是在多次尝试中完成)并删除/损坏它以防万一。当然,热心的黑客可以重新下载并重新设计破坏过程,但这会让它变得非常烦人和痛苦!

为了检查代码完整性,可执行文件上的哈希和应该可以解决问题。

关于损坏过程,我很确定应用程序在运行时无法编辑其包。我有一个想法:

- 产生一个专门用于破坏的“中间应用程序”,在退出第一个时启动它。它会起作用吗?

- 会在退出之前生成一个 Shell 脚本(它将等待应用程序终止)吗?

欢迎任何想法!

编辑:关于 Cocoaster 链接:

1.剥离调试符号:很容易跟踪“验证”方法,即使没有明确的方法名称,主要是通过查找 NSString 调用(@“validated”,@“license”)

2.PT_DENY_ATTACH :无论如何都有附加方法,但是打破 ptrace() 并修改返回值(如果我能在我的基本逆向工程培训中找到这一点,任何人都可以)。

3.检查校验和,否则退出:这正是我要避免的事情:使用 gdb 很容易跟踪对 [NSApplication shouldTerminate:] 的调用)并修改测试(或有效的 MD5 字符串)以通过它。重点是,黑客不仅需要重新加载 gdb,还需要再次下载/安装它(从而使该过程非常耗时)。

想象一下:

1.在启动时,mainApplication 创建一个 shell/bash 脚本,类似于:

 wait(decent time)
 rm /*Dynamic Application Path*/Contents/MacOS/exe

或更好 :

  sed -i 's/a/b/g' /*Dynamic Application Path*/Contents/MacOS/exe
//Will completly screw the code

2.如果校验和失败,启动脚本并安静地终止应用程序。我的问题是: NSTask 依赖于应用程序(我可以启动 NSTask 并退出启动它的应用程序)吗?

4