>课1 安卓逆向学习-android 环境配置与常用工具介绍
1.简单介绍
android应用程序时采用JAVA语言开发的,完成源代码的开发后,首先将JAVA源码转换为字节码,然后通过DX工具,将字节码文件 转化为 .dex文件,最后 将 dex格式 的 文件 在 Dalvik虚拟机上运行。
2.配置 android环境
1)配置 JDK 下载版本 jdk1.7 或 jdk1.7
https://www.52pojie.cn/thread-1016686-1-1.html/
2) 安装Android Stdio
3) 安装 android SDK
4) 安装 android NDK
5) 安装 eclipse
6) 安卓模拟器
7) 调试使用的手机
8) Android killer
>课2 调试方法及smali文件结构
smali文件结构
1) 头文件
.class <访问权限修饰符> [非权限修饰符] <类名>
.super <父类名>
.source <源文件名称>
2)接口实现
#interfaces
.implements <接口名称>
3)类注释
#annotations
.annotation [注解的属性] <注解类名>
[注解字段=值]
...
.end annotation
4)变量定义
静态变量:
#static fields
.field <访问权限> static [修饰词] <字段名>:<变量类型>
普通变量:
#instance fields
.field <访问权限修饰符> [非权限修饰符] <变量名>:<变量类型>
5)方法描述
#direct methods/#virtual methods
.method <访问权限修饰符> [非访问权限修饰符] <方法原型>
<.locals>
[.parameter]
[.prologue]
[.line]
<代码逻辑>
.end
参考网址 : https://blog.csdn.net/lixpjita39/article/details/75193833/
java 代码和 smali 代码一一对应
-
调试方法
源代码修改
一种老旧的调试方法, 使用 apktool 的 -d 选项
1) java -jar apktool.jar d -d 目标.apk -o 结果存放目录
2)修改 Android.mainfest 文件,在application节点中添加 android:debuggable=‘true’
3)在入口点的类的 onCreat 方法中添加
invoke-static{},Landroid/os/Debug;->waitForDebugger()V
4)反编译修改过的apk文件
java -jar apktool.jar b -d 代码目录 -o 目标.apk名字
5)手动对apk文件进行签名
java -jar signapk.jar testkey.x509.pem testkey.pk8 未签名apk名导入apk代码
1)idea/androidStudio File -> open, 选择编译后的文件目录,导入代码
在相应的位置 下断点
2)设置远程调试选项
Run-> Debug Configurations -> Remote Java Application,
Host 填写为 localhost ,端口为 Debug ,开发端口 8700打开目标apk文件
1)打开apk文件,知道看到wati for debugger提示 -
新版本调试方法及smali函数文件修改
AndroidStudio/ idea + smaliidea 插件1)使用apktool/shakapktool 反编译 apk文件
java -jar apktool.jar d apk文件 -o 反汇编目录
或者 使用 android killer 反汇编代码- AS/IDEA 中 导入 源码 ,
3)远程调试选项
Run -> Debug Configurations -> Remote java Application ,
Host: localhost
端口: 8700
4)使用 adb 以 debug 方式 启动 apk
adb shell am start -D -n packageName/ActivityName
5)下好断点 debug
6) 对关注的寄存器 添加watch! - AS/IDEA 中 导入 源码 ,
>课3 JD-Gui 进行代码快速阅读分析
- Android Monitor
AndroidSDK 中 提供 的一款全面监控android系统的应用 , 功能强大 - jd-Gui
把 smail 文件自动 变化为 java代码的工具, 对于 小型的apk有用 - jeb
大型的 smali代码反汇编工具 需要购买
动态调试中 根据 目录信息 找到 关键信息 之后 jeb 中查找字符串 找到关键位置;