V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
OceanSea
V2EX  ›  程序员

各位大佬,有没有办法通过重命名所有变量的方式保护代码?

  •  
  •   OceanSea · Aug 28, 2019 · 4189 views
    This topic created in 2435 days ago, the information mentioned may be changed or developed.
    我们课题组维护着一个研究用的程序(C语言程序,主要在 linux 上运行),最近想拿到另一个实验室去编译和运算,因为他们有更高性能的计算机。但是我们并不想分享代码,目前的想法是将代码中的所有变量名重命名为随机名称,这样就能有效地保护原始版本的代码。请问各位大佬,有没有这样的工具? 

    原计划是想编译一个通用 linux 可执行文件给他们。由于程序依赖一些外部库,尽管尝试多次,在本地编译的文件不能在他们远程服务器上运行。
    Supplement 1  ·  Aug 29, 2019
    感谢各位大佬的回复,最终采用最简单的技术保护了代码。

    具体过程如下:
    ( 1 )采用 Stunnix-CXX-Obfus-4.7-Linux-trial 版本提取了代码中的变量名,宏名和函数名。
    ( 2 )采用 python 生成了一系列的随机变量名称。
    ( 3 )结合 bash 采用 sed 完成了对程序中重要符号名称的重命名。

    这里的替换变量名的主要目的是防止程序被用于进一步开发。再次感谢大家提供的思路。
    23 replies    2019-08-29 15:47:59 +08:00
    95Q75rQb83nwn2gF
        1
    95Q75rQb83nwn2gF  
       Aug 28, 2019   ❤️ 1
    这不就是安卓的代码混淆?
    OceanSea
        2
    OceanSea  
    OP
       Aug 28, 2019
    @Dex7er 多谢回复,帮助很大!有什么好用的混淆工具吗?
    yulgang
        3
    yulgang  
       Aug 28, 2019
    静态编译?
    cheng6563
        4
    cheng6563  
       Aug 28, 2019 via iPhone
    做个 docker 镜像?
    ChristopherWu
        5
    ChristopherWu  
       Aug 28, 2019
    》由于程序依赖一些外部库,尽管尝试多次,在本地编译的文件不能在他们远程服务器上运行。

    为什么不解决这个问题呢
    zeroDev
        6
    zeroDev  
       Aug 28, 2019 via Android
    @ChristopherWu 这个东西应该交叉编译可以解决吧?
    ChristopherWu
        7
    ChristopherWu  
       Aug 28, 2019
    @zeroDev #6 是的。依赖的库就不清楚他是啥意思了
    lff0305
        8
    lff0305  
       Aug 28, 2019
    静态链接依赖的库
    在你的机器上和别人的机器上用 ldd 查看具体的依赖,哪些缺少了
    yoshiyuki
        9
    yoshiyuki  
       Aug 28, 2019
    可以交付一个 docker 容器镜像呀
    jackleeforce3615
        10
    jackleeforce3615  
       Aug 28, 2019
    docker 正解
    jim9606
        11
    jim9606  
       Aug 28, 2019
    如果可以用 docker,你的问题就不存在了,要求是两边环境都能装 docker(kernel 3.10+)而且不需要 GUI。
    如果只能用裸程序,可以将程序放到 glibc 版本相同或更低的环境编译(基本上都是因为这个才用不了),编译时设置 rpath,然后将程序和所有用 ldd 找到的所有依赖打包搬过去
    exip
        12
    exip  
       Aug 29, 2019 via Android
    appimage 不知能解决不?
    locoz
        13
    locoz  
       Aug 29, 2019 via Android
    前面说的其实就是代码混淆…但是 C 程序无所谓吧…编译器应该自带一些反逆向工程的东西。
    后面的问题,建议 docker 解决,方便快捷。
    ipwx
        14
    ipwx  
       Aug 29, 2019
    Docker
    luozic
        15
    luozic  
       Aug 29, 2019 via iPhone
    docker 等各种 image,并且编译应该可选支持把库搞进去啊。
    yegle
        16
    yegle  
       Aug 29, 2019
    不能装 docker 的话可以搞个 chroot 环境,然后打个 tar 给对方啊
    b00tyhunt3r
        17
    b00tyhunt3r  
       Aug 29, 2019 via iPad
    需要哪些外部库手动链接试下
    waruqi
        18
    waruqi  
       Aug 29, 2019 via Android
    没用,即使编译完的 binary image 都可以逆向回来
    itskingname
        19
    itskingname  
       Aug 29, 2019 via iPhone
    ooooooooooo = 1
    ooooooooooo = ooooooooooo + 1
    MonoLogueChi
        20
    MonoLogueChi  
       Aug 29, 2019 via Android
    @locoz 混淆的目的就是让你看不懂逆向的东西啊
    chinuno
        21
    chinuno  
       Aug 29, 2019 via Android
    打包成 appimage 吧,这样不同 Linux 环境都能运行
    zdd2389
        22
    zdd2389  
       Aug 29, 2019
    ollvm
    RV0n
        23
    RV0n  
       Aug 29, 2019
    这不就是混淆加密
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1197 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 23:13 · PVG 07:13 · LAX 16:13 · JFK 19:13
    ♥ Do have faith in what you're doing.