V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OceanSea
V2EX  ›  程序员

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

  •  
  •   OceanSea · 2019-08-28 15:09:29 +08:00 · 3500 次点击
    这是一个创建于 1914 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我们课题组维护着一个研究用的程序(C语言程序,主要在 linux 上运行),最近想拿到另一个实验室去编译和运算,因为他们有更高性能的计算机。但是我们并不想分享代码,目前的想法是将代码中的所有变量名重命名为随机名称,这样就能有效地保护原始版本的代码。请问各位大佬,有没有这样的工具? 

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

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

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

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