一、smali语言简介
1、宏观的介绍:http://source.android.com/devices/tech/dalvik/instruction-formats.html
2、具体的指令:http://source.android.com/devices/tech/dalvik/dalvik-bytecode.html
3、《Android安全与逆向分析》一书
4、具体指令中的meth@BBBB、filed@BBBB、type@BBBB,方法、字段、类型:https://github.com/JesusFreke/smali/wiki/TypesMethodsAndFields
5、具体指令中的vXXX,寄存器,https://github.com/JesusFreke/smali/wiki/Registers
注:非static函数中,p0代指“this”,p1表示函数的第一个参数,p2代表函数中的第二个参数…而在static函数中p0才对应第一个参数(因为Java的static方法中没有this方法)
6、整体的格式(混淆后的,如果没有混淆结构会更详细)
(1)、类:
.class public Lcom/jltxgcy/crack/MainActivity;
.super Landroid/app/Activity; (2)、方法:
# direct methods or vitual methods
.method public constructor <init>()V
.locals 0
invoke-direct {p0}, Landroid/app/Activity;-><init>()V
return-void
.end method 直接方法指构造函数,私有方法,静态方法。虚方法指的是其他的。
(3)、字段
# instance fields or static filelds
.field private a:Landroid/widget/Button; (4)、接口
# interfaces
.implements Landroid/view/View$OnClickListener 7、还可以参考
http://blog.csdn.net/lpohvbe/article/details/7981386
注:invoke-static:调用静态方法,invoke-direct:调用私有或者构造函数,invoke-virtual:调用public或者protected方法。
二、工程源码目录
在Android混淆机制这篇文章中,http://blog.csdn.net/jltxgcy/article/details/22670651,对于上面的CrackApk工程,根据不同的proguard-project.txt的不同规则,导出两个混淆后的apk,一个是CrackApk01.apk,一个是CrackApk02.apk。
CrackApk01.apk没有保留内部类isRegistered方法,CrackApk02.apk保留了内部类isRegistered方法。

本文介绍了smali语言,它是Dalvik虚拟机的汇编语言,用于理解Android应用的字节码。文章从smali的基本概念出发,包括指令格式、指令中的方法、字段和类型、寄存器等,并探讨了混淆后的代码结构。同时,通过对比分析混淆前后的apk,特别是静态方法和直接方法的调用,展示了如何使用apktool反编译并理解smali代码。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



