V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
sciooga
V2EX  ›  Python

Python 有没有什么办法防止被反编译

  •  
  •   sciooga ·
    sciooga · 2017-03-02 10:07:42 +08:00 · 7865 次点击
    这是一个创建于 2815 天前的主题,其中的信息可能已经有所发展或是发生改变。

    昨天看见 最近用 Python 写了个工具,有没有什么办法防止被反编译 讨论 Python 源码保护的问题。

    结果显而易见如帖子 33 楼说的:没什么办法能够完全阻止反编译。给予足够的付出,任何程序都可以逆向出来

    但是略微提高些反编译的门槛的小方法还是有的,现在将一个加密代码用这个办法写了个小 DEMO ,欢迎各位尝试反编译,将此 DEMO 加密后的值: 3518d7401d60a79a22f326ada22f116d 进行解密。

    DEMO: https://pan.baidu.com/s/1nuMV5Ip

    加个小彩头吧~ 第一个给出反编译方法的 支付宝 10 块钱 (穷那...

    第 1 条附言  ·  2017-03-02 23:07:18 +08:00

    可能感兴趣的同学都尝试了一下,不知道思路如何,我说说我的方法吧

    common.pyc 可以直接反编译,这个很简单,但是里面又套了一层 zlib 解压后的对象, marshal.loads() 后是一个 code object

    很多朋友到了这步可能就被卡住了,其实没有什么难的... 这里的 code object 可以直接导出 pyc 参考 示例

    然后将导出的 pyc 再次反编译就可以得到源码了。

    16 条回复    2017-03-13 10:24:27 +08:00
    sciooga
        1
    sciooga  
    OP
       2017-03-02 10:09:44 +08:00
    CC 昨天的楼主 @bozong

    对啦,补充一下,方法直接发楼里就好,反正不是什么严谨的比赛 : )
    RadishWind
        2
    RadishWind  
       2017-03-02 10:16:18 +08:00
    用 ctypes 调用就行吧
    Kisesy
        3
    Kisesy  
       2017-03-02 10:17:11 +08:00
    from Crypto.Cipher import AES
    import base64
    import sys
    from Crypto.Cipher import AES
    from binascii import b2a_hex, a2b_hex

    class prpcrypt:

    def __init__(self):
    global ak
    ak = 'gxu'
    self.mode = AES.MODE_CBC
    self.accs()
    self.eaf()
    self.afd()
    self.fds()

    def accs(self):
    global ak
    ak += 'isCc'

    def eaf(self):
    sciooga
        4
    sciooga  
    OP
       2017-03-02 10:32:07 +08:00
    @Kisesy #3 真快啊,方法是对了的,但是需要解密上面的 token
    Kisesy
        5
    Kisesy  
       2017-03-02 10:44:17 +08:00
    @sciooga 可是解这个跟这个加密有什么关系 V2EX plus
    sciooga
        6
    sciooga  
    OP
       2017-03-02 10:45:29 +08:00
    @Kisesy #5 这样好给你发个小红包呀... 毕竟上面这样写的,你加我微信吧, id 名
    Kisesy
        7
    Kisesy  
       2017-03-02 10:48:22 +08:00
    不用,大家技术交流而已,哈哈,也算是学习一下
    ADUST
        8
    ADUST  
       2017-03-02 10:53:53 +08:00
    研究过一段时间,最终使用 ctypes 将 py 转为 c ,然后 gcc 编译为.o ,入口文件 import .o 就可以了
    sciooga
        9
    sciooga  
    OP
       2017-03-02 10:55:04 +08:00
    @ADUST #8 实际上有简单些的方法
    ADUST
        10
    ADUST  
       2017-03-02 10:58:14 +08:00
    @sciooga 请教下,烦请告知方法哈
    clino
        11
    clino  
       2017-03-02 11:03:49 +08:00
    我有个安全相关的工具,因为 py 容易被反编译,结果最后改成 go 来做,效果不错...
    sciooga
        12
    sciooga  
    OP
       2017-03-02 11:09:31 +08:00
    @ADUST #10 着急的话,微信加我 id 我们讨论下,不着急的话,我晚上在附言也说说我的方法
    henices
        13
    henices  
       2017-03-02 11:16:32 +08:00
    使用定制的 python 主程序,这样别人的反不出你的代码了。但其实也就是增加别人的时间成本罢了。
    sciooga
        14
    sciooga  
    OP
       2017-03-02 23:07:51 +08:00
    @ADUST #10 我的思路已经补充到附言了
    solidx
        15
    solidx  
       2017-03-03 02:24:28 +08:00
    @ADUST 使用 ctypesgen ?
    ADUST
        16
    ADUST  
       2017-03-13 10:24:27 +08:00
    @solidx cython
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2784 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 12:06 · PVG 20:06 · LAX 04:06 · JFK 07:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.