美文网首页
DEX 格式分析工具,加密特定函数

DEX 格式分析工具,加密特定函数

作者: that_is_this | 来源:发表于2018-03-22 12:29 被阅读113次

    1. leb128 编码解析

        public static byte[] readUnsignedLeb128(byte[] srcByte, int offset){
            List<Byte> byteAryList = new ArrayList<Byte>();
            byte bytes = Utils.copyByte(srcByte, offset, 1)[0];
            byte highBit = (byte)(bytes & 0x80);
            byteAryList.add(bytes);
            offset ++;
            while(highBit != 0){
                bytes = Utils.copyByte(srcByte, offset, 1)[0];
                highBit = (byte)(bytes & 0x80);
                offset ++;
                byteAryList.add(bytes);
            }
            byte[] byteAry = new byte[byteAryList.size()];
            for(int j=0;j<byteAryList.size();j++){
                byteAry[j] = byteAryList.get(j);
            }
            return byteAry;
        }
    
        /**
         * 解码leb128数据
         * 每个字节去除最高位,然后进行拼接,重新构造一个int类型数值,从低位开始
         * @param byteAry
         * @return
         */
        public static int decodeUleb128(byte[] byteAry) {
            int result = 0;
            int a =0;
            int offset = 0;
    
            while (byteAry[a] != 0) {
                result |= ((byteAry[a] & 0x7f) << offset);
                offset += 7;
                if ((byteAry[a] & 0x80) == 0) break;
                a += 1;
            }
            return result;
        }
    

    具体解析可参考:http://blog.csdn.net/liwugang43210/article/details/50475928

    leb128 编码,就是取 7 位数字。第一位为是否继续取的标识

    下面以10000为例,编码过程:
    二进制形式为 10 0111 0001 0000
    以7bits为整体 1001110 0010000
    添加标识组合成新的字节(从后往前,即低bits到高bits) 01001110(0x4E) 10010000(0x90) (最高位标识设置为0,表示没有后续字节)
    LEB128 则为 0x90 0x4F (小端存放)

    解码过程:
    LEB128 0x90 0x4E
    二进制形式 10010000 01001110
    去掉标识信息 0010000(低7bits) 1001110(高7bits)
    组合的结果为 10011100010000 (10000)

    2. 加密特定函数

    可参考:http://www.wjdiankong.cn/archives/553
    里面讲解了对 DEX 文件的分析,但有错误的地方

    3. dex code 编码对照

    http://www.netmite.com/android/mydroid/dalvik/docs/dalvik-bytecode.html

    https://source.android.com/devices/tech/dalvik/dalvik-bytecode Dalvik 字节码
    https://source.android.com/devices/tech/dalvik/instruction-formats Dalvik 可执行指令格式

    相关文章

      网友评论

          本文标题:DEX 格式分析工具,加密特定函数

          本文链接:https://www.haomeiwen.com/subject/lmcaqftx.html