Android软件安全与逆向分析笔记(4)

1.使用Apktool反编译apk文件后,会在反编译工程目录下生成一个smali文件夹,里面存放着所有反编译出的smali文件,这些文件会根椐程序包的层次结构生成相应的目录,程序中所有的类都会在相应的目录生成独立的smali文件。

2.android list avd/target-列出当前可用的SDK版本;android create avd -n Android1.5 -t 1并回车;emulator -avd <avd_name>-启动一个Android模拟器;为了达到源码级的反编译效果,可以使用java反编译工具JAD将jar文件转成java源文件。

3.在编译这个阶段,gcc编译器会先要检查代码的规范性,以及是否有语法错误等,最后把代码翻译成ARM汇编语言的代码。而在汇编这个阶段gcc编译器会调用汇编器将汇编代码编成二进制目标文件。在链接这个阶段,编译器会调用链接器将二进制的目标文件链接生成Anroid平台可执行的ARM原生程序。原生程序中动态链接分为动态链接程序与动态链接库。静态链接与动态链接程序的入口子函数相同,动态链接的程序在执行入口函数前需要通过linker进行额外的初始化。

4.LSL(Logical Shift Left)逻辑左移,ASR(Arthmetic Shift Right)算术右移,RRX(Rotate Right eXtended by 1 place),操作数右移一位,左侧空位由CPSR的C填充;LDR R1,[R2];将R2中的数值作为地址,取出此地址中的数据保存在R1中.SWP R1,R1,[R2] ;将R2中的数值作为地址,取出此地址中的数值与R1中的值交换.LDR   ---   Load from memory into a register,STR---Store from a register into memory.

5.软件调试可分为源码级调试与汇编级调试。Android程序的调试分为Android SDK开发的"java"程序调试与Android NDK开发的原生程序调试。"java"程序使用Dalvik虚拟机提供的调试特性来进行调试。--JDWP(Java Debug Wire Protocol,Java调试有线协议)。原生程序则使用传统的Linux程序调试方法如GNU调试服务器来连接进行调试。原生程序分为动态链接库与普通可执行程序两种。

6.DDMS-Dalvik Debug Monitor Service,它提供了设备截屏、查看运行的线程信息、文件浏览、Logcat、Method Profiling、广播状态工具、模拟电话呼叫、接收SMS、虚拟地理坐标等功能。Method Profiling:方法剖析。

7.在smail语法中.registers  指令指定了方法中寄存器的总数,.locals 指令表明了方法中非参寄存器的总数,出现在方法中的第一行。当一个方法被调用的时候,方法的参数被置于最后N个寄存器中;P命名  第一个寄存器就是方法中的第一个参数寄存器。特别说明一下:Long和Double类型是64位的,需要2个寄存器。Android系统保存信息的方法有限,只能是内部存储、外部存储、数据库与SharedProferences等4种方式。

8.这些.o、.a、.so文件都是Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据。优点:程序模块化,容易重新编译,方便升级。分类:静态函数库(对应.a文件)、共享函数库(对应.so文件,类似于Windows的dll文件)、动态加载函数库(对应.o文件,相当于Windows里的.obj文件)。

9.JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。

你可能感兴趣的:(Android软件安全与逆向分析笔记(4))