Android逆向工程 初篇
什么是APK?
什么是Dalvik?
什么是Smali?
什么是APK
APK的本质是一个zip的压缩包,用压缩软件打开后就可以看到里面的文件以及结构。
assets/res:都是资源目录,但是二者有区别。
1: Assets
不会再R.java文件里面生成相应的引索,Assets文件夹可以自己随意创建文件夹,用AssetsManager类访问,存放再此目录下的文件都会被打包到Apk里面。
2: lib
so库存放位置,一般由NDK编译得到.
META-INF
存放工程的一下属性文件,例如Manifest.MFMETA-INF
3: res
会在R.java文件生成相应的引索,软件里面使用到的资源文件会在这里生成相对应的引索。res/raw和assets文件夹存不需要编译的二进制文件,比如字体,声音.在res文件夹里面可以定义一下目录:
res/anim:存放动画资源.
res/xml :存放xml文件,利用getResource().getXML()得到资源.
res/raw :该目录下的文件可以直接复制到设备上,不能有子文件夹,编译软件时,这里的数据不需要编译,直接加入到程序安装包中,使用方法是getResource().OpenRawResources(ID),其中参数ID的形式是R.raw.XXX.
4: AndroidManifest.xml
Android工程的基础配置属性文件.
5: Classes.dex
Java代码编译得到的Dalvik VM能执行的文件
6: resources.arsc
里面就是一些资源文件的引索
什么是Dalvik(逆向的基础)
Dalvik是Google专门为Android操作系统设计的一个虚拟机,经过深度优化. Dalvik有专属的文件执行格式dex,而Jvm则执行的是Java字节码. DalvikVM比JVM速度更快,占用控件少.通过Dalvik的字节码我们不能直接看到原来的逻辑代码,这时需要借助ApkTool或者dex2jar jd-gui工具来看java代码.由于Apk在打包之前都会有混淆,所以,基本上很难看出来逻辑处理,除非很简单的逻辑.
什么是Smali(主角,一般人是很难看懂它的语法的,很少人能坚持研究.
先给大家露给脸
上面是一个监听点击事件,点击后关闭窗口并且调用一些方法做某些事情.
从上面可以看到函数声明使用.method开始 .end method结束,
方法定义:
Func-Name(Para-TypePara-Type2Para-Type3…)