Opy icon indicating copy to clipboard operation
Opy copied to clipboard

Prevent parameter keyword obfuscation

Open fgarit opened this issue 7 years ago • 4 comments

I have another issue with the tool that may again come from a certain misunderstanding. This time, it requires flash to me installed on the computer.

I've a test.py script:

from flask import Flask

proxy = Flask(__name__)

proxy.run(host='0.0.0.0', port=5000, debug=True, threaded=True)

And my opy_config.txt file

obfuscate_strings = True
obfuscated_name_tail = '_opy_'
plain_marker = '_opy_'
pep8_comments = True

source_extensions = '''
py
pyx
'''

skip_extensions = '''
pyc
'''

skip_path_fragments = '''
opy.py
'''

external_modules = '''
flask
'''

plain_files = '''
opy_config.txt
'''

plain_names = '''
opy
test
'''

The result is the following:

# coding: UTF-8
import sys
l1l1_opy_ = sys.version_info [0] == 2
l11ll_opy_ = 2048
l1l_opy_ = 7
def l1l11_opy_ (l111_opy_):
    global l111l_opy_
    l1lll_opy_ = ord (l111_opy_ [-1])
    l1ll_opy_ = l111_opy_ [:-1]
    l11l_opy_ = l1lll_opy_ % len (l1ll_opy_)
    l11_opy_ = l1ll_opy_ [:l11l_opy_] + l1ll_opy_ [l11l_opy_:]
    if l1l1_opy_:
        l1l1l_opy_ = l11l1_opy_ () .join ([l1_opy_ (ord (char) - l11ll_opy_ - (l1ll1_opy_ + l1lll_opy_) % l1l_opy_) for l1ll1_opy_, char in enumerate (l11_opy_)])
    else:
        l1l1l_opy_ = str () .join ([chr (ord (char) - l11ll_opy_ - (l1ll1_opy_ + l1lll_opy_) % l1l_opy_) for l1ll1_opy_, char in enumerate (l11_opy_)])
    return eval (l1l1l_opy_)
from flask import Flask
proxy = Flask(__name__)
proxy.run(host=l1l11_opy_ (u"ࠫ࠵࠴࠰࠯࠲࠱࠴ࠬࠀ"), port=5000, debug=True, ll_opy_=True)

The interesting part is the change from:

proxy.run(host='0.0.0.0', port=5000, debug=True, threaded=True)

to:

proxy.run(host=l1l11_opy_ (u"ࠫ࠵࠴࠰࠯࠲࠱࠴ࠬࠀ"), port=5000, debug=True, ll_opy_=True)

Checkout https://github.com/pallets/flask/blob/master/flask/app.py def run line 840. It looks like opy knows not to rename the host, port and debug keywords before of the fonction declaration def run(self, host=None, port=None, debug=None, load_dotenv=True, **options):. But to me it's an issue that the threaded keyword is renamed.

I am again wondering if this is the intended behavior and if I'm missing something here.

Thank you

fgarit avatar Feb 26 '18 14:02 fgarit

Hello, here similar dilemma: instructions misunderstandig or bug?

test.py

import tkinter

root = tkinter.Tk()

menu_bar = tkinter.Menu(root)
root.config(menu=menu_bar)

a_menu = tkinter.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="Menu", menu=a_menu)		

root.mainloop()

opy_config.txt

obfuscate_strings = True
obfuscated_name_tail = '_opy_'  
plain_marker = '_opy_'          
pep8_comments = True            
                                
source_extensions = '''
py
pyx
'''

skip_extensions = '''
pyc
'''

skip_path_fragments = '''
test_dummy
'''

external_modules = '''
re
os
sys
errno
keyword
importlib
random
codecs
shutil
tkinter
'''

plain_files = '''
opy_config.txt
'''

plain_names = '''
opy
poly_walker_test
test
'''

obfuscation results in

import sys
l1lllll_opy_ = sys.version_info [0] == 2
l11111l_opy_ = 2048
l11llll_opy_ = 7
def l1_opy_ (l1111l1_opy_):
    global l11l_opy_
    l1l1ll1l_opy_ = ord (l1111l1_opy_ [-1])
    l1ll11l1_opy_ = l1111l1_opy_ [:-1]
    l1ll1l_opy_ = l1l1ll1l_opy_ % len (l1ll11l1_opy_)
    l1lll1ll_opy_ = l1ll11l1_opy_ [:l1ll1l_opy_] + l1ll11l1_opy_ [l1ll1l_opy_:]
    if l1lllll_opy_:
        l1ll11ll_opy_ = l1ll1_opy_ () .join ([l1ll1ll_opy_ (ord (char) - l11111l_opy_ - (l111l1_opy_ + l1l1ll1l_opy_) % l11llll_opy_) for l111l1_opy_, char in enumerate (l1lll1ll_opy_)])
    else:
        l1ll11ll_opy_ = str () .join ([chr (ord (char) - l11111l_opy_ - (l111l1_opy_ + l1l1ll1l_opy_) % l11llll_opy_) for l111l1_opy_, char in enumerate (l1lll1ll_opy_)])
    return eval (l1ll11ll_opy_)
import tkinter
root = tkinter.Tk()
l111lll1_opy_ = tkinter.Menu(root)
root.config(menu=l111lll1_opy_)
l111llll_opy_ = tkinter.Menu(l111lll1_opy_, l11l1111_opy_=0)
l111lll1_opy_.add_cascade(label=l1_opy_ (u"ࠥࡑࡪࡴࡵࠣࢋ"), menu=l111llll_opy_)
root.mainloop()

Running the obfuscated one I get

_tkinter.TclError: unknown option "-l11l1111_opy

because Tkinter module expects the parameter keyword tearoff

Any suggestions?

HumanAgainstMachine avatar May 11 '18 13:05 HumanAgainstMachine

+1

tonysepia avatar Sep 01 '18 13:09 tonysepia

+1

Has there been any progress with this issue?

bbarn3y avatar May 10 '19 13:05 bbarn3y

Not yet. There is a very similar / overlapping request regarding dictionary keys. I'll try to work on these matters sometime in my Opy Fork, where development of Opy remains active.

https://pypi.org/project/opy-distbuilder/ https://github.com/QQuick/Opy/tree/opy_distbuilder

I recommend checking out my "DistBuilder" project. It's only in alpha, but it is a larger scale project that encompasses Opy and adds features over the top of it. Notably, an "OpyPatch" provides a stop gap means for dealing with glitches of this nature.

https://distribution-builder.readthedocs.io/en/latest/ https://distribution-builder.readthedocs.io/en/latest/ConfigClasses/#opypatch https://github.com/BuvinJT/distbuilder https://pypi.org/project/distbuilder/

BuvinJT avatar May 10 '19 14:05 BuvinJT