Android逆向入门
- Java语言, smali汇编 dex odex ->android ndk开发
- 加壳与脱壳(vmp技术)
- 一般需要保护的文件就是dex,so文件
APK结构
-
逆向分析工具:
- Android SDK
- APKTool
- jarsigner
- keytool
-
逆向步骤:
- 解压apk和拆卸classes.dex文件
- 在APP上进行静态分析
- 在APP中注入代码
命令行的方式进行操作:
- 首先使用Android studio编译生成apk文件
- 下载apktool文件,并将文件名改为apktool
- 然后将你的apk文件拷贝出来将后缀名改为.zip文件,解压
java -jar apktool.jar d xxx.apk
- 这时候在生成的文件下会有一个smali文件,主要区别就是Java文件全部转换为smali文件,smali文件是个Android虚拟机使用的寄存器语言。
- 在HelloWorld程序中添加以下代码即为Toast语句
invoke-virtual {p0}, Lcom/vogella/android/hackdemo/MainActivity;->getApplicationContext()Landroid/content/Context;
move-result-object v1
const/4 v3, 0x0
invoke-static {v1, v2, v3}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)
Landroid/widget/Toast;
move-resulkt-object v1
invoke-virtual {v1}, Landroid/wiget/Toast;->show()V
- 打包
java -jar apktool.jar b app-debug -o newdebug.apk
- 在同目录下就会出现新的apk文件,但是此APK文件是没有签名的APK 所以安装之后会出现无法进行解析的错误:
- 首先执行查看keystore文件别名:
keytool -list -v -keystore [keystore文件路径] -storepass [keystore文件密码]
2.然后执行签名命令:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 签名文件名 -storepass 签名密码 待签名的APK文件名 签名的别名
3.接着将之前的程序卸载进行安装我们呢刚才通过修改smali代码的apk即可
IDE(AndroidKiller)操作:
-
使用的工具在这里下载
-
直接使用该应用打开APK即可
-
从bin文件下可以看出和上面的原理相同:
-
smali语法简述:
V void
Z boolean
B byte
S short
C char
F float
I int
J long
D double
[ array
比如:
Ljava/lang/String; //String类型
[I //一维int数组
- 方法全名:
Lpackage/name/ObjectName;->methodName(III)Z
(III)Z方法签名
-
方法体:
- BakSmali生成的方法代码以.method指令开始,以.end method指令结束
- 根据方法的类型不同,可以会在方法前加 # 表示方法类型
-
虚方法:
const-class v1, Lcn/woblog/markdowndiary/domain/Note
move-result-object v0
check-cast v0, Lcn/woblog/markdowndiary/domain/Note
return-object v0
- 直接方法:
invoke-direct {p0} ,Ljava/lang/Object;-><init>()V
- 静态方法:
move-result-object
return-object v1
- 字段:
field private static instance:Lcn/woblog/markdowndiary/respository/LocalNoteRepository;