Android逆向实战
本文由 Luzhuo 编写,转发请保留该信息.
原文: https://blog.csdn.net/Rozol/article/details/88755130
反编译工具
相关工具
- apktool: Java编写, 且开源. 用于反编译apk, 能得到smali(Android虚拟机执行指令, 与dex可相互转化)源码和资源文件
- Jadx: 直接可视化apk的Java代码
- Github: https://github.com/skylot/jadx
- Xposed框架: hook应用, 能得到应用运行时数据, 并能修改运行时数据
- 工具 Xposed框架
- Xposed需要root权限, VirtualXposed不需要root权限
- IDA: 能动态调试java 和 so
另外还需要一些基础知识: smali语法、arm指令、NDK开发
apktool
反编译:
使用该工具最好是去Github下去源码, 放到Eclipse里执行, 一旦反编译报错可以立即修改源码解决问题.
1.下载源码: https://github.com/iBotPeaches/Apktool
2.Eclipse安装Gradle插件
- 安装Gradle: https://gradle.org
- 安装Gradle插件: Help -> Eclipse Marketplace -> 输入
buildship
-> 搜索 -> Install -> 重启Eclipse - 配置Gradle: Eclipse -> Project -> Properties -> Gradle -> Gradle user home配置Gradle路径 -> OK
3.导入项目
- File -> Import -> Existing Gradle Project(Gradle) -> 选择apktool -> Finish
- 如果你还没有配置Gradle的情况下导入了apktool, 那么你只需右键项目 -> Gradle -> Refresh Gradle Project 即可.
4.运行apktool
在brut.apktool包下的Main类下的main入口函数手动构建一个命令, 然后运行即可.
args = new String[]{
"d", "C:\\apk\\xxx.apk", "-o", "C:\\apk\\xxx"};
回编译:
1.进行回编译:
args = new String[]{
"b", "C:\\apk\\xxx1", "-o", "C:\\apk\\xxx_build.apk"};
2.签名:
jarsigner -verbose -keystore "C:\apk\case.key.jks" -signedjar "C:\apk\xxx_build_ok.apk" "C:\apk\xxx_build.apk" key0
-signedjar
参数:
- 1.签名后apk存放路径
- 2.未签名apk路径
- 3.证书别名
3.安装
逆向操作
打开调试开关
想要调试应用, 打开调试开关这是破解步骤的第一步.
不反编译的情况下:
Android配置信息放在 /system/build.prop
文件里
C:\Users\LZLuz>adb shell
shell@S658t:/ $ su
root@S658t:/ # cat /system/build.prop |grep ro
# begin build properties
ro.build.id=KOT49H
ro.build.display.id=VIBEUI_V2.0_1512_7.17.1_ST_S658t
ro.build.version.incremental=VIBEUI_V2.0_1512_7.17.1_ST_S658t
ro.custom.build.version=VIBEUI_V2.0_1512_7.17.1_ST_S658t
ro.build.version.sdk=19
ro.build.version.codename=REL
ro.build.version.release=4.4.2
ro.build.date=Mon Feb 9 21:38:28 CST 2015
ro开头的属性表示只读, 不可修改
可以通过命令单独获取某值
root@S658t:/ # getprop ro.product.model
Lenovo S658t
默认配置信息
root@S658t:/ # cat default.prop
#
# ADDITIONAL_DEFAULT_PROPERTIES
#
ro.secure=1
ro.allow.mock.location=0
persist.mtk.aee.aed=on
ro.debuggable=0
ro.adb.secure=1
这里的ro.debuggable=0
为0表示判断应用中的AndroidManifest.xml文件中manifest标签是否有android:debuggable="true"
属性, 有则可以调试; 若为1, 表示所有程序均可调试.
接下来我们想办法修改这个值, 改为1:
我们使用ptrace注入到init进程, 修改内存中的属性值, 只要该进程不重启就会一直有效, 即使重启了, 再操作一遍即可.
1.下载mprop工具
2.拷贝到设备中
adb push C:\Code\mprop /sdcard/