zoukankan      html  css  js  c++  java
  • Android反编译实战(4)

    接上节那个demo,我们简单学习下smali语法,可以自己去google上搜,看雪论坛的这篇就不错。

    在google code上下载用到的jar包,地址https://code.google.com/p/smali/downloads/list

    java -jar baksmali-2.0b4.jar Hell.dex

    默认在当前目录下生成out 文件夹,里面有Hell.smali文件。

     1 .class public LHell;
     2 .super Ljava/lang/Object;
     3 
     4 # static fields
     5 .field private static final HELL:Ljava/lang/String; = "bupt"
     6 
     7 # direct methods
     8 .method public constructor <init>()V
     9     .registers 1
    10     invoke-direct {p0}, Ljava/lang/Object;-><init>()V
    11     return-void
    12 .end method
    13 
    14 .method public static main([Ljava/lang/String;)V
    15     return-void
    16 .end method
    17 
    18 # virtual methods
    19 .method public sayNothing(Ljava/lang/String;)V
    20     return-void
    21 .end method
    Dalvik字节码类型描述符
    V void
    Z boolean
    B byte
    S short
    C char
    I int
    J long
    F float
    D double
    L Java类类型
    [ 数组类型

    没什么可说的,跟上节的java代码一对比就能懂!

    想找突破口太难了!!反编译完当当读书后,

    经过一番查找,我发现com.dangdang.reader.c 包下有一个a.smali文件,里面有一些android Log调试信息。太好了!!!

    103行定义了一个方法

    public static void a(String, String)

    方法用到了一个局部变量寄存器v0,

    106行得到c的值然后赋给寄存器v0

    108行判断v0是否等于0,如果v0等于0,跳转到cond_0标号处,程序返回,如果v0不等于0,调用android的Log.i("", "")方法。

    我们可以把第108行代码删掉,是程序无条件执行Log方法。或者我们往上找c的值,将c初值设为1.

    很明显,这是构造函数,第31行,我们把const/4 v0, 0x0改为const/4 v0, 0x1

    重新打包、签名,生成新的apk,在ddms里我们会看到打印出的当当电子书日志。

    总算有点进步了。

  • 相关阅读:
    轮播制作
    前端问题总结
    响应式 媒体查询 盒模型
    响应式 字体设置 flex 弹性布局
    C++ STL之set常用指令
    SRM468
    SRM470
    置换及其应用专题
    C++ STL之map常用指令
    C++ STL之pair常用指令
  • 原文地址:https://www.cnblogs.com/feiyunruyue/p/3127051.html
Copyright © 2011-2022 走看看