学习安卓逆向的心得

安卓文件介绍:将apk文件格式改为zip格式,然后解压,就可以得到安卓程序文件夹
lib文件夹:so库存放位置,一般有ndk编译得到的
res文件夹:资源目录
classes.dex java代码编译得到的dalvik vm能执行的文件
AndroidMainfest.xml 安卓工程的基础配置文件

什么是dalvik字节码?
dalvik是Google专门为Android开发的一个虚拟机,不同于jvm基于栈的特点,dalvik vm基于寄存器。

寄存器:在smali中,所有操作都要经过寄存器来进行
本地寄存器:V开头数字结尾的符号来表示,如v0、v1(通常先局部变量,后参数)
参数寄存器:p开头数字结尾的符号来表示,如p0、p1(v0表示局部变量,参数从p0开始)
p0在非静态函数中,作用相当于this,p1代表函数的第一个参数(static中p0才是第一个参数)
寄存器和堆栈的区别:寄存器是在CPU储存器中,栈堆在内存中,所以CPU读取寄存器变量的速度,远远大于读取普通变量的速度,但是jvm和dalvik的数据存取都是基于栈。
对于小于等于32位长度的数据类型,一个寄存器就可以存值,64位长度的,使用相邻寄存器共同存值。

smali学习:首先要了解smali大致的语法
JAVA和Smali数据类型对比:

基本语句

跳转语句

怎么得到smali代码
使用android killer软件,对apk进行反编译,然后得到smali代码

direct method:相当于private函数
vitrual method:相当于public、protected函数
static:静态函数
interface:接口函数

invoke:调用
invoke-direct:调用private函数
invoke-vitrual:调用public函数
invoke-super:调用父类方法,一般用于调用oncreate、ondestroy等方法

循环for:
goto0:
/*
代码
*/
goto:goto0

nop:是空操作指令助记符,值为00,但通常是用来对齐代码,无实际作用。
move:用于数据操作,如move vA,vB:将vB寄存器的值赋给vA寄存器
move-result vAA:将上一个invoke类型指令操作的单字非对象结果赋给vAA,如果是双字,则使用move-result-wide指令
线程锁指令:monitor-enter vAA:获取锁 monitor-exit vAA:释放锁
throw vAA:抛出异常
比较指令:cmpking vAA,vBB,vCC 比较vBB vCC的大小,将结果存入vAA(逆向分析P70)
可用的具体指令有:cmp-long,cmpg-double,cmpl-float等

利用ADB连接安卓机
下载最新的adb工具包,将adb的bin目录加入环境变量,就可以在cmd里面执行adb命令。然后安卓数据线连接手机,用360驱动大师软件扫描安卓的驱动,点击安装。安装完毕后,在cmd命令里输入adb devices,检查手机是否连接成功(手机需要在开发人员选项里打开调试模式)

利用smali破解软件付费
直接在项目里搜索“失败”或“成功”的unicode编码,在搜索的结果定位关于支付、购买等关键词的位置,然后进行逻辑上的分析,替换代码逻辑。也可以通过定位支付成功或者失败的函数,定位到支付相关的决策方法,改变决策逻辑。
动态调试smali代码
动态调试代码的关键是AS能运行该apk的smali代码,通过adb sapk的包名和activity的入口名,进行连接,通过Android Device monitor监控是否连上手机正在运行的软件。

安卓的log输出的作用(感悟较少)
可以通过在smali代码中添加log输出的方式,去监控软件运行留下的轨迹。

so库的编写(如果仅仅是调用so库,可以使用JNA)
编写一个jni类(jni.java),在静态块里使用System.loadLibrary(“加载的so库名”);用来加载so库
类中使用native声明需要调用到的so库的函数接口,可以在类中声明多个接口函数。
将jni类通过javac编译成jni.class
到java文件夹下使用javah -jni 包名.类名生成.h文件,新建一个main.c,将.h内容复制进去。
使用NDK生成so库
so库可以用IDA反编译查看,动态调试

https://bbs.pediy.com/thread-225511.htm 安卓hook app分析
https://bbs.pediy.com/thread-221107.htm 安卓运行检测函数过程(DDMS)
https://www.cnblogs.com/xuan52rock/p/5245145.html DDMS使用详解
https://bbs.pediy.com/thread-226233.htm xposed课微信篇
https://bbs.pediy.com/thread-217587.htm全能hook框架

你可能感兴趣的:(安卓逆向)