分类:
2010-10-13 18:15:17
顺便说下载入:
将apk文件复制到tools目录下
启动emulator
执行 adb shell ***.apk 即可 这种载入实际上是载入到内存中了 tmp不是永久性的
要反编译一个apk译文件,需要做以下几步:
1.找到apk安装文件
2.找到安装软件的*.dex译文件
3.dump dex文件
4.分析dex文件获取想要的代码
1.找到apk安装文件
这个比较容易,把手机或者模似器安装好后,可以在eclipse的File Explorer下找到安装程序的apk译文件,也可以通过adb命令找到:
$ adb shell
# cd /system/app
cd /system/app
# ls
2.找到安装软件的*.dex译文件
运行安装软件后,会在android文件系统下生成一个*.dex文件,一般在目录/data/dalvik-cache下,也可以通过adb命令找到:
$ adb shell
# cd /data/dalvik-cache
cd /data/dalvik-cache
# ls
3.编译软件对应的dex文件,通过以下指令:
adb shell dexdump -d -f -h /data/dalvik-cache/data@app@be.citylive.twitpic.apk@classes.dex > twitpic.text
指令参数解释:
-d : disassemble code sections
-f : display summary information from file header
-h : display file header details
-C : decode (demangle) low-level symbol names
-S : compute sizes only
4.获取需要的代码:
打开刚才得到的编译出来的text文件,会看到形如以下的代码:
Class #0 header:
class_idx : 32
access_flags : 196625 (0x30011)
superclass_idx : 61
interfaces_off : 0 (0x000000)
从这个译文件里我们很容易得到代码信息
下一步就要读懂这个txt文件了,先从header中可以看清楚这个应用的总体信息,有几个类,包括内部类
,header只是了解概况。要详细去分析下面的每一个class才能真正理解这个软件的设计过程。最好的方法是一边研究里面的opcode一边打开
api来查看里面调用到的类和方法,减少误解的机率。。
opcode就是介于高级编程语言和二进制代码之间的一层中间码,operation
code 叫操作码。读懂opcode主要是熟悉里面的逻辑跳转以及一些个别助记符的含义。。
通过opcode你就可以清晰的知道里面每个方法资源的调用过程和逻辑跳转过程。做过的例子都有点复杂,就不举例了。。当然,要破解整个apk最好是翻译
opcode和应HexWorkShop查看资源文件相结合比较合理和轻松,尤其是ManiFest.xml这个文件,一定要看清楚里面的
activity和service receiver,permissions 这几个部分的信息,这可能会成为整个破译流程的关键部分 。。。