分类: 嵌入式
2010-04-13 11:18:38
吸取了client/service的思想,apk没有自己的独立入口函数,只是包含一个或者多个component,在进行程序执行时根据 manifest配置文件来确定需要哪些的component。
而conponent的激活是由intent来触发的,intent说穿了就是一个包括了操作和操作数据的action,相当于这个component就是一个服务提供者,intent带来请求,然后它执行请求。而且intent可以指定component 来执行请求,也可以不指定有component根据过滤器的匹配来选择最合适的component来完成请求。
而且还有一个就是在应用 程序层的process是以linux user ID来区分的,每个进程对应一个虚拟机,但一个进程中可以跑多个应用程序,而不仅仅是局限于一个。其实这个也好理解,一个应用程序就是多个 component,多个应用程序可以看做是很多component组成的一个apk。
apk实际是就是一个rar/zip,重命名rar后可以用winrar直接打开
apk文件一般包括如下内容:
META-INF -----没有签名的apk没有这个目录,该目录下包括签名信息
res -----资源文件目录,和工程中的一样
AndroidManifest.xml -----主描述文件,和工程中的一样
classes.dex -----所有的java类编译后的文件,是Dalvik VM需要的字节码
resources.arsc -----res目录的结构,重新组织过的二进制文件,格式未知
汉 化需要将apk中的文件解出来 把所有资源文件 和Mainifest.xml 用Hex WORKSHOP这个可以查看16进制文件,通过过滤一些符号主要是“.” 剩下的就是主要信息。。然后把一些Text类 的信息改成中文就ok。
首先要把apk的class.dex dump出来、 : 具体步骤:1.用winrar或者winzip打开apk,直接拖出来。2.用android sdk1.1版 本以上的一个dexdump工具把class.dex文件 dump成文本:把刚才的class.dex文件放在和dexdump工具同目录 用命令窗口执行 :dexdump.exe -d classes.dex > spk.dump.txt 意 思是将classes.dex dump出来 形成一个txt文件。下一步就要读懂这个txt文件了,先从header中可以看清楚这个应用的总体信息,有几个类,包括内部类 ,header只是了解概况。要详细去分析下面的每一个class才能真正理解这个软件的设计过程。最好的方法是一边研究里面 的opcode一边打开api来查看里面调用到的类和方法,减少误解的机率。opcode 就是介于高级编程语言和二进制代码之间的一层中间码,operation code 叫操作码。读懂 opcode主要是熟悉里面的逻辑跳转以及一些个别助记符的含义。 通过 opcode你就可以清晰的知道里面每个方法资源的调用过程和逻辑跳转过程。做过的例子都有点复杂,就不举例了。当然,要破解整个apk最好是翻译 opcode和应HexWorkShop查看资源文件相结合比较合理和轻松,尤其是ManiFest.xml这个文件,一定要看清楚里面的 activity和service receiver,permissions 这几个部分的信息,这可能会成为整个破译流程的关键部分。