【问题标题】:Dalvik Bytecode Obfuscation on AndroidAndroid 上的 Dalvik 字节码混淆
【发布时间】: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


【解决方案1】:
struct.pack_into('I', obfuscator, 14, payloadlen)

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

另见struct module documentation

【讨论】:

  • 我想要更多的东西,作者没有提供任何关于他的源代码的详细文档。我需要了解上面的代码块是做什么的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多