读取.dex文件中的所有字符串

import struct
import os
#这里定义一个读取字符串长度的函数
def DecUnsignedLEB128(file):
    result = struct.unpack("i", file.read(4))[0]#读取4字节中的第一个字节
    result = result&0x000000ff
    file.seek(-3, 1) #倒退回前面的第三个字节  # 不能直接从1字节强转为4字节,所以先取4字节,再清空3字节
    if (result > 0x7f):
        next = struct.unpack("i", file.read(4))[0]
        next = next&0x000000ff #第一位是个位
        file.seek(-3, 1)
        result = (result&0x7f) | (next&0x7f)<<7
        if(next > 0x7f):
            next = struct.unpack("i", file.read(4))[0]
            next = next&0x000000ff  #加入十位
            file.seek(-3, 1)
            result = result | (next&0x7f)<<14
            if(next > 0x7f):
                next = struct.unpack("i", file.read(4))[0]
                next = next&0x000000ff
                file.seek(-3, 1)
                result = result | (next&0x7f)<<21
                if(next > 0x7f):
                    next = struct.unpack("i", file.read(4))[0]
                    next = next&0x000000ff
                    file.seek(-3, 1)
                    result = result | next<<28

    #print "result:", result
    return result

dex = open("imissTest.dex", 'rb')   #rb的意思是 read and write in binary file
dex.seek(0x38, 0)#string table的偏移
tmp = dex.read(8)
string_count, string_table_off = struct.unpack("II", tmp)  #"II"是分别读取的意思
print ("size:", string_count, " off:", string_table_off)
dex.seek(string_table_off, 0)
DexStrOffList = []
count = 0
while(count<string_count):
    DexStrOffList.append(struct.unpack("i", dex.read(4))[0])#unpack返回一个tuple 取第0个元素
    count+=1
DexStrList = []
nonullcount = 0
for stroff in DexStrOffList:
    dex.seek(stroff, 0)
    strlen = DecUnsignedLEB128(dex)
    if(strlen == 0):
        continue
    input = dex.read(strlen)
    DexStrList.append(struct.unpack(str(strlen)+"s", input)) #解析不定长的字符串
    nonullcount+=1
outputfile = open("string.txt", "w")
count = 0
print ("string:",string_count)

for i in DexStrList:
    outputfile.write('%s\n'%i) #将元组中的元素写入文件
outputfile.close()
dex.close()

时间: 2024-10-07 14:01:53

读取.dex文件中的所有字符串的相关文章

使用Resources 来读取xml 文件中的保存字符串的 内容 mContext.getResources().getStringArray

用上下文 得到Resource 使用mContext.getResources().getStringArray(R.array.yile_lesson2_words_mp3_array);方法得到如下xml中 包含的字符串 final String[] pictureArray = mContext.getResources().getStringArray( R.array.yile_lesson2_words_mp3_array);取得字符串的名称就可以拼凑出文件的名称 String st

json数据处理:读取文件中的json字符串,转为python字典

方法1: 读取文件中的json字符串, 再用json.loads转为python字典 import json str_file = './960x540/config.json' with open(str_file, 'r') as f: print("Load str file from {}".format(str_file)) str1 = f.read() r = json.loads(str1) print(type(r)) print(r) print(r['under_

winform中读取App.config中数据连接字符串

1.首先要在工程引用中导入System.Configuration.dll文件的引用. 2.通过System.Configuration.ConfigurationManager.ConnectionStrings["connectionstring"].ToString(); 就能得到App.config中的数据库连接字符串 而不能通过ConfigurationSettings.AppSettings["connectionstring"].ToString();

Asp.Net 读取xml文件中Key的值,并且过滤掉注释内容代码

/// <summary> /// 读取配置文件keys /// </summary> /// <returns></returns> public string _GetKeys() { string filename = Server.MapPath("/") + @"web.config"; XmlDocument xmldoc = new XmlDocument(); XmlReaderSettings set

统计JAR包DEX文件中的方法数目

 前段时间做Android项目中,一直出现方法数超过65535的问题,如果混淆后代码中的方法数目没有超过65535,可以通过 在project.properties文件中加上一行dex.force.jumbo=true,解决这个问题. 后来自己参考了网上的一些方法,写了个小工具用来统计JAR包和DEX文件中的方法数目.主要原理就是利用DEX的文件结构的文件头中有个method_ids_siz来统计方法数目. 现在分享出来,代码如下,直接拷贝编译成JAR包,然后控制台:java -jar XXX.

黑马程序员——IO——读取一个文件中的文字输出到控制台上

读取一个文件中的文字输出到控制台上 import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; //读取一个文件中的文字 ,输出到控制台上 //读取的是字符文字,因此可以使用字符流来操作 public class FileReaderDemos { public static void main(String[] args) { // TODO Auto-generate

读取Excel文件中的单元格的内容和颜色

读取Excel文件中的单元格的内容和颜色 先创建一个Excel文件,在A1和A2中随意输入内容,设置A1的字体颜色为红色,A2的背景为黄色.需要 using Excel = Microsoft.Office.Interop.Excel;或者using Microsoft.Excel; string file = @"E:\test.xls"; //测试文件 Excel.Application excel = null; Excel.Workbook wkb = null; try {

涛哥的Python脚本工具箱之批量替换目录所有指定扩展名的文件中的指定字符串

今天发布刚完成的涛哥的Python脚本工具箱之批量替换目录所有指定扩展名的文件中的指定字符串,命令行参数处理改用目前比较好用的argparse库,Python代码如下: #!/usr/bin/python2.7 # -*- encoding: UTF-8 -*- # Copyright 2014 [email protected] """replace old string with new string from all files in path 批量替换目录所有指定扩展

把txt文件中的json字符串写到plist文件中

- (void)json2Plist { NSString *filePath = [self applicationDocumentsDirectoryFileName:@"json"]; NSMutableArray *tempArray = [[NSMutableArray alloc] initWithContentsOfFile:filePath]; //第一次添加数据时,数组为空 if (tempArray.count == 0) { tempArray = [NSMuta