昨天,我的经理让我找到并删除了我们为我们在几周内推出的产品生成的二进制文件中出现的“以前的公司化身”的所有引用。这让我想知道为什么,在编译的独立二进制文件中,有如此多的人类可读的内容,以及是否有一种简单的方法来阻止它,以便程序的内部结构不会在公开场合闲置,可以这么说(在至少对于使用文本编辑器打开它的人或greps文件内容)。以下是我的意思的一些例子:
"WGL_3DFX_multisample À @ ð>Unknown OpenGL error
GL_INVALID_FRAMEBUFFER_OPERATION"
“由于未终止语句无法关闭而不是错误SQL逻辑错误或缺少数据库访问权限被拒绝回调请求查询中止数据库被锁定数据库表被锁定内存尝试写入只读数据库中断磁盘I / O错误数据库磁盘映像是格式错误的数据库或磁盘已满无法打开数据库文件表包含没有数据数据库架构已更改字符串或BLOB超出大小限制约束失败数据类型不匹配“
"flowChartDelay flowChartDisplay flowChartDocument flowChartExtract flowChartInputOutput flowChartInternalStorage flowChartMagneticDisk"
这个文件的大部分是人类难以理解的东西,这是我对二进制文件的期望:
"âÀÿ? ‰•þÿÿÇ…”þÿÿ ë‹…”þÿÿƒÀ‰…”þÿÿ‹”þÿÿ;Mà}`‹U‹‚¨ ‹”þÿÿ¶ƒúuF‹E‹ˆ° ‹•”þÿÿ·Q¯…ŒþÿÿÁ艅Œþÿÿ‹M"
我发现我可以简单地进行搜索并替换“我们不想要的字符串”并将其替换为相同长度的随机文本,程序运行正常,这可能比编辑500次更容易我们的来源是将公司的当前状态作为一个法律实体更新(有一吨称为name_of_previous_company_foo())
的函数,并且比尝试将一些奇特的混淆实用程序集成到我们复杂和有用的构建中更容易系统,但它不是一个特别优雅的解决方案,我仍然想知道是否有办法让我们的二进制文件更像一个黑盒子,有人不能用文本编辑器打开它,看看我们的功能和班级名称。
答案 0 :(得分:0)
人们为“商业软件”构建源代码混淆工具,这些工具可以加扰字符串和标识符,因此它们不容易从二进制文件中读出,但仍然可以用作它们打算使用的字符串。
这种混淆器往往是特定于语言的,因为它们必须处理语言结构的细节。
谷歌“源代码混淆器”,你会发现很多。