nos*_*e25 5 security string encryption cocoa disassembly
我在cocoa中创建一个应用程序,并希望查看其中的某些字符串是否易于访问,因此我在其上运行了OTX,遗憾的是我的所有代码都被找到了.有没有一种方法可以让我的代码更"安全"或者至少加密/隐藏字符串?我想加密字符串的原因是它是服务器的密码.我不需要它真的安全我只是不希望密码很容易找到.
谢谢你的帮助
您永远不应该将密码放入可执行文件中.
这就像将密码放在显示器旁边的便利贴上.如果恶意黑客拥有您的应用程序,他们最终可以提取密码,无论您使用何种语言或API编写密码.
例如,如果我知道您的应用程序连接到受密码保护的服务器但应用程序从不要求输入密码,那么我知道您错误地包含了密码.要查找密码,我只需要监视程序的操作,以查看在连接到服务器时代码的哪些区域是活动的.无论您的应用程序有多大,这都会告诉我在哪里集中搜索密码.然后我跟踪密码只是时间问题.加密密码没有用,因为加密算法也必须在应用程序中,我也可以解开它.
请记住,有很多人可以仅使用原始机器代码解开您的代码.对于那些人来说,使用哪种语言或API并不重要,因为他们最终都会提炼机器代码.那些人是可怕的熟练编程之神,他们嘲笑像你或我这样的凡人.不幸的是,其中一些是邪恶的.
我提到,你应该永远把密码为可执行文件?如果我没有,让我再说一遍,你永远不应该在可执行文件中输入密码.
在您的特定情况下,作为新手程序员,您没有希望将密码隐藏在比您自己更多经验的人身上.这是您永远不应该将密码放入可执行文件的另一个好理由.
1.在安全代码中避免使用ObjC.
因为ObjC的类系统在很大程度上依赖于运行时反射,所以整个接口需要与可执行文件一起包含在内.这使得工具class-dump可以轻松恢复二进制文件的源@interface.
因此,安全代码函数应该写为C函数,而不是ObjC方法.
2.使用strip.
默认情况下,编译器将保留所有私有符号(这允许堆栈跟踪更具可读性).您可以使用strip删除所有这些符号.
3.混淆.
上述步骤只能隐藏代码逻辑.但是,如果密码是常量字符串,则使用该strings实用程序立即可以看到它.您可以通过在运行时构造密码来模糊这一点(例如,将ROT-13中编码的密码存储在文件中.)
或者只是改变你的设计.
无论您的保护系统有多好,因为黑客可以完全控制他们的机器,只要有足够的时间,他们总能获胜.最好修改你的设计,比如为什么密码必须附带可执行文件?或者为什么甚至需要全局密码?
| 归档时间: |
|
| 查看次数: |
696 次 |
| 最近记录: |