2012-10-29 83 views
1

我最近讀到這篇文章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 
+0

你會得到什麼例外?請發佈回溯。 –

+0

回溯在編輯部分 – Krypton

回答

0
struct.pack_into('I', obfuscator, 14, payloadlen) 

這條線寫入payloadlen爲unsigned int char數組obfuscator在偏移14。例如,如果該值爲負數,它將超出範圍。如果應該允許負值,則將'I'更改爲'i',表示signed int。

另請參見struct module documentation

+0

我想要的不僅僅是這些,作者沒有提供關於他的源代碼的任何細節文檔。我需要了解上面的代碼塊的功能 – Krypton