Android 静态分析 smali

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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.youkuaiyun.com/lpohvbe/article/details/7981386

           注:invoke-static:调用静态方法,invoke-direct:调用私有或者构造函数,invoke-virtual:调用public或者protected方法。


二、工程源码目录       

         

       在Android混淆机制这篇文章中,http://blog.youkuaiyun.com/jltxgcy/article/details/22670651,对于上面的CrackApk工程,根据不同的proguard-project.txt的不同规则,导出两个混淆后的apk,一个是CrackApk01.apk,一个是CrackApk02.apk。

       CrackApk01.apk没有保留内部类isRegistered方法,CrackApk02.apk保留了内部类isRegistered方法。


   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值