How to remove strings from a compiled binary (.so)

前端 未结 4 1682
野性不改
野性不改 2021-02-04 06:45

How do I remove strings from / obfuscate a compiled binary? The goal is to avoid having people read the names of the functions/methods inside.

It is a dynamic library (.

4条回答
  •  梦谈多话
    2021-02-04 07:07

    There are some commercial obfuscators which accomplish this. Basically, they re-write all of the symbols on the go. Something like this:

    void foo()
    

    becomes

    void EEhj_y33() // usually much, much longer and clobbered
    

    Variable names are also given the same treatment, as are members of structures / unions (depending on what level of obfuscation you set).

    Most of them work by scanning your code base, establishing a dictionary then substituting garbled messes for symbol names in the output, which can then be compiled as usual.

    I don't recommend using them, but they are available. Simply obfuscating meaningful symbol names is not going to stop someone who is determined to discover how your library / program works. Additionally, you aren't going to be able to do anything about someone who traces system calls. Really, what's the point? Some argue that it helps keep the 'casual observer' at bay, I argue that someone running ltrace strace and strings is typically anything but casual.

    Unless you mean string literals , not symbols ? There's nothing you can do about them, unless you store the literals in an encrypted format that you code has to decrypt before using. That is not just a waste, but an egregious waste that provides no benefit whatsoever.

提交回复
热议问题