我最近讀到這篇文章Dalvik Bytecode Obfuscation on Android的Dalvik字節碼混淆在Android
我也下載了源代碼,在https://github.com/thuxnder/dalvik-obfuscator/blob/master/injector.py
我明白什麼該技術的作用是通過各種方法進行迭代,插入junkbytes在代碼塊和代碼塊前面的無條件分支(以確保代碼塊從不執行)。
但是我不熟悉的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
你會得到什麼例外?請發佈回溯。 –
回溯在編輯部分 – Krypton