繁体   English   中英

Android上的Dalvik字节码混淆

[英]Dalvik Bytecode Obfuscation on Android

我最近阅读了Android上的Dalvik字节码混淆

我还从https://github.com/thuxnder/dalvik-obfuscator/blob/master/injector.py下载了源代码。

我知道该技术的作用是迭代所有方法,在代码块中插入垃圾字节,并在代码块前面插入无条件分支(以确保永远不会执行该代码块)。

但是我不熟悉Python脚本,因此我很难理解第204至212行的代码块,这会导致Exception:

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
struct.pack_into('I', obfuscator, 14, payloadlen)

该行在char数组obfuscator中的偏移量14处将payloadlen写为unsigned int。 例如,如果该值为负,则将超出范围。 如果应允许使用负值,请将'I'更改为'i'表示带符号的int。

另请参见struct模块文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM