检测代码如何变化?

时间:2014-06-26 10:32:58

标签: python

让我们假设一些代码如下:

class X:
   def myfunc(self):
      print "orig"

def new_myfunc(self):
   print "new"

X().myfunc()
X.myfunc = new_myfunc
X().myfunc()

其中新功能由作弊者注入。
有些功能可以改变,有些则不能改变。
我想知道如何检测此代码更改 例如,我可以创建一个包含原始功能代码的dict(带有“func_code”),然后检查它们是否被更改
但我如何在每次“导入”时运行检查?有一种方法可以在python中编辑自动加载器吗?

编辑:这是我想做的,但是每次导入都会自动执行,

protection = {'X':'myfunc'}
f = {}

class X:
def myfunc(self):
    print "orig"

def new_myfunc(self):
print "new"

#system check
for key,value in protection.iteritems():
protectedFunc = getattr(eval(key), value)
f[key] = { value : protectedFunc.func_code}

#cheater code
X.myfunc = new_myfunc

#system check
for key,value in protection.iteritems():
protectedFunc = getattr(eval(key), value)
if f[key][value] != protectedFunc.func_code:
    print 'detected'

#call by my app 
X().myfunc()

1 个答案:

答案 0 :(得分:0)

我知道你的任务的几种方法。例如,您可以check md5或其他。作为变体,您可以使用diff。 Python支持onetwo