Screencast Python. Самомодифікований код

15 Червня 2009

На сайті Ukrainian security community eLwaux виложив скрипт на PHP, що дає можливість зберігати дані в своєму коді. Я ж вирішив повторити цей маленький скриптик на Python.

В результаті був записаний скрипт і скрінкаст про його створення і використання:


Python. Selfchange script. Screencast from presidentua on Vimeo.
Відео краще дивится на сайті вімео, там можна в hd якості.

Скрипт:

#! /usr/bin/python # -*- coding: utf-8 -*- #begin_data #name1=qwerty #end_data __author__="presidentua" __date__ ="$14.06.2009 19:36:45$" import inspect import sys import re def write_vars(data): f = open( inspect.getsourcefile(sys.modules[__name__]) , 'r') src = f.read() f.close() match = re.search(r"#begin_data(.*?)#end_data",src,re.S) vars = '' for item in data: vars += "\n#%s=%s" % ( item, data[item] ) src = src[:match.start(1)] + vars + src[match.end(1)-1:] f = open( inspect.getsourcefile(sys.modules[__name__]) , 'w') f.write(src) f.close() def read_vars(): f = open( inspect.getsourcefile(sys.modules[__name__]) , 'r') rez = {} status = 0 for str in f.readlines(): if ( str.strip() == '#begin_data' ) or ( str.strip() == '#end_data' ): status += 1 if status == 1: val = re.findall(r'#(.*?)=(.*)',str.strip()) if val: rez[ val[0][0] ] = val[0][1] elif status == 2: break f.close() return rez if __name__ == "__main__": data = read_vars() print "readed all vars: \n\t%s" % data data['new_varr'] = 'new_valueee' write_vars(data) print 'saved all change, and new value: \n\t%s' % data
Tags:  
 
 
 
Роман Хоменко aka PresidentUA
mail/jabber: spirt40@gmail.com