Android逆向学习笔记1:Dalvik字节码编程练习(4)

 新建一个文件写入以下代码,保存为HelloWorld.smali

可以使用vscode中的smali插件,有语法高亮显示

.class public LHelloWorld;  #定义类名
.super Ljava/lang/Object;   #定义父类
.method public static main([Ljava/lang/String;)V     #声明静态main方法
    .registers 4    #程序使用四个寄存器,其中v0,v1,v2寄存器和一个参数寄存器
    .prologue   #代码起始指令
    #空指令
    nop
    nop
    nop
    #数据定义指令
    const/16 v0,0x8 #v0值为8
    const/4 v1,0x5  #v1值为5
    const/4 v2,0x3  #v2值为3
    #数据操作指令
    move v1,v2  #将v2的值赋给v1,即现在v1值为3
    #数组操作指令
    new-array v0,v0,[I  #定义一个长度为8(v0值),Int类型,并将其存入v0中
    array-length v1, v0 #获取v0中数组的长度,放到v1中,现在v1为8
    #实例操作指令
    new-instance v1, Ljava/lang/StringBuilder;  #构造一个StringBuilder的新实例,存放到v1中
    #方法调用指令
    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V    #调用实例的直接方法
    #跳转指令
    if-nez v0, :cond_0  #如果v0不为0,进行:cond_0后面的语句
    goto :goto_0
    :cond_0
    #数据转换指令
    int-to-float v2, v2 #将v2中的int类型数据转为float再存入v2
    #数据运算指令
    add-float v2,v2,v2 #将v2中的float值两倍再放到v2中
    #比较指令
    cmpl-float v0, v2, v2 #比较v2和v2的值,应该为相等,v0等于0
    #字段操作指令
    sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;   
    const-string v1, "HelloWorld"   #构造字符串
    #方法调用指令
    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V #v0 is the "this" instance
    #返回指令
    :goto_0

    return-void

.end method

写入完成后

可以在Android Studio安装目录下的\plugins\smali\lib中找到smali.jar文件。

通过以下语句将smali文件转化为dex文件

java -jar smali.jar -o HelloWorld.dex HelloWorld.smali

然后通过adb将这个文件放入手机的sdcard目录下 

adb push HelloWorld.dex /sdcard/

再通过adb执行dex文件 

adb shell dalvikvm -cp /sdcard/HelloWorld.dex HelloWorld

最后如果出现写入的字符串“HelloWorld”即为执行成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【概括介绍】 Dalvik字节码编辑器是一个强大安卓程序修改器,它运行在手机上,并且免费,主要用来汉化破解。 【基本介绍】 使用本工具需要基本编程经验和安卓的程序知识,我们知道安卓上的程序,大部分是用java开发的,编译生成字节码,这就注定程序更易于破解。传统的破解很麻烦,要在pc上进行,搭建开发环境,反编译dex代码回java,修改后,再编译成dex(困难),打包apk Dalvik字节码编辑器则选择了完全不同的技术路线.既然java编译字节码,而字节码的文档是公开的,那就能够直接解释字节码,在程序上进行修改,就不用反编译/编译的繁琐过程,也不用java的复杂开发环境(类的的工具有八神的apk编辑器,要收费) 【使用方法】 首先从Lcom/lonelycatgames/Xplore/Browser;类入手,打开这个类,然后打开on*方法,可发现这段代码 1. 复制代码 这段代码大概意思是,判断软件是不是从安卓商店下载的,如果不是则得到当前系统时间并和作者设定的时间作比较,在设定的范围之内可以用,否则弹出去安卓商店下载之类的提示。如果是从商店下载的则直接跳过时间比较 这样我们只要修改 isInstalledFromMarket方法的返回值就行了,可发现isInstalledFromMarket方法在 Lcom/lonelycatgames/Xplore/BrowserUtils;类里面。 找到该类并打开,找到 isInstalledFromMarket方法打开,在return v2之前加入const/4 v2 1,也就是一直让这个方法返回true,保存.... 破解Total*er 打开Lcom/ghisler/android/Total*er/Total*er;类(也就是到 /com/ghisler/android/Total*er/目录下,打开Total*er), 找到on*方法打开,可发现 2.复制代码 大概意思就是当前时间与作者设定的时间作比较,如果超过设定时间就弹出Dialog提示,且不能继续使用。 看这段代码 if-lez v0 :label_1094这是程序跳转的关键点,判断寄存器v0的值是否 看这段代码 if-lez v0 :label_1094这是程序跳转的关键点,判断寄存器v0的值是否小于等于0,如果成立,跳转到label_1094(也就是可以继续使用)所以只要让v0的值不大于0就行了,在 if-lez v0 :label_1094前面加上const/4 v0 0。保存.... 去除QQ2011升级提示 用dalvik字节码编辑器v1.2版打开QQ2011,之后打开classes.dex/ com/ tencent/ secure/ jni/ SecureEngine/ Methods/<init>里的校验代码,在if-nez v0 :label_19上面加上const/4 v0 1然后 按功能键 保存代码,再按两次返回键,按功能键 保存Dex, 打开META-INF文件夹删除里面的ANDROID.RAS和ANDROID.SF。按功能键 保存。 修改到此完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值