• 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里我们会看到打印出的当当电子书日志。

    总算有点进步了。

  • 相关阅读:
    qemu+chroot构建arm aarch64虚拟机
    <转>Linux环境下段错误的产生原因及调试方法小结
    <转>PCA的数学原理
    博客分类整理
    detectron2 配置记录
    如何读取部分的预训练模型
    重新配置语义分割实验环境遇到的坑
    pytorch 调整tensor的维度位置
    seg代码配置的踩坑记录
    Alienware R8外星人台式机安装双系统(WIN10+Ubuntu)的总结
  • 原文地址:https://www.cnblogs.com/feiyunruyue/p/3127051.html
Copyright © 2020-2023  润新知