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

15 Jun 2009
Posted by spirit

На сайті 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:  | 
 
 
 

Contacts

Роман Хоменко aka PresidentUA
mail/jabber: spirt40@gmail.com

Creative Commons License