use*_*635 5 c++ string passwords obfuscation
如果我有一个包含字符串的C++代码,可以是密码或任何东西,那么混淆它们以使逆向工程变得非常困难的最佳方法是什么?我在网上找到了一些工具,但都不是开源的.
假设您的应用程序使用Web服务"www.example.com"并使用密码"letmein"进行身份验证.编译程序,并检查它strings,objdump或者什么:
$ make $ objdump -j .rodota -s program a.out: file format elf64-x86-64 Contents of section .rodata: 4005f8 01000200 7777772e 6578616d 706c652e ....www.example. 400608 636f6d00 6c65746d 65696e00 com.letmein. $ strings program /lib64/ld-linux-x86-64.so.2 __gmon_start__ ... www.example.com letmein
这很简单.如果你对它进行模糊处理,你仍然需要在使用它之前将纯文本放在内存中,因此攻击者会执行以下操作之一:
请注意,混淆工具只会让那些已经在艰难处理的攻击者变得更难.那是什么意思?你所做的就是让攻击者从你的可执行文件中获取密码需要15分钟,而不是说5分钟.因为这是你能做的最好的事情,所以不要太努力.只需将密码与一些简单的模式进行异或,并希望攻击者非常懒惰或愚蠢.
C-3PO:卢克大师,先生.请原谅我,但如果我们在这里被发现,R2和我应该怎么做?
卢克:锁上门.
Han Solo:希望他们没有爆破.
C-3PO:这不是很让人放心.
(你可能最终会花费更多的时间来攻击这个攻击者.)
另一方面:如果您试图阻止非root用户访问受信任系统上的密码,则可以使用权限和setuid二进制文件来执行此操作.
脚注:混淆器的目的一般是隐藏程序代码,而不是数据.例如,如果您的应用程序使用的是商业秘密算法,那就是您希望使用混淆器的时候.