【发布时间】:2012-10-18 12:26:29
【问题描述】:
我最近看了这篇文章Dalvik Bytecode Obfuscation on Android
我在https://github.com/thuxnder/dalvik-obfuscator/blob/master/injector.py也下载了源代码
我了解该技术的作用是遍历所有方法,在代码块中插入垃圾字节并在代码块前面无条件分支(以确保代码块永远不会执行)。
但是我不熟悉 Python 脚本,所以我很难理解第 204 到 212 行的代码块,这会导致异常:
def _obfuscator_arrayDataOverlayIf(self, method):
obfuscator = array.array('c', "\x32\x00\x09\x00\x26\x00\x03\x00\x00\x00\x00\x03\x01\x00\x00\x00\x00\x00")
size = method.getMethodSize()
if size == 0:
print "skip method @ 0x%x" % method._offset
return
payloadlen = size-len(obfuscator)
struct.pack_into('I', obfuscator, 14, payloadlen)
return method.obfuscate(obfuscator)
如果有人能解释一下这段代码的作用,我将不胜感激,以便我能理解作者的想法。
编辑:回溯如下:
Traceback (most recent call last):
File "C:\Apps\EclipsePortable\Data\workspace\DalvikObfuscator\DalvikObfuscator\injector.py", line 216, in <module>
inj.obfuscate()
File "C:\Apps\EclipsePortable\Data\workspace\DalvikObfuscator\DalvikObfuscator\injector.py", line 196, in obfuscate
if reduce(lambda op1,op2: op1 or op2, map(self._obfuscator_arrayDataOverlayIf, method), False):
File "C:\Apps\EclipsePortable\Data\workspace\DalvikObfuscator\DalvikObfuscator\injector.py", line 209, in _obfuscator_arrayDataOverlayIf
struct.pack_into('I', obfuscator, 14, payloadlen)
struct.error: integer out of range for 'I' format code
【问题讨论】:
-
你得到什么异常?请发布回溯。
-
回溯在编辑部分
标签: android python obfuscation bytecode dex