作者:I春秋作家——HAI_

0×00 前言

看这篇可以先看看之前的文章,进行一个了解。
Android逆向-java代码基础(1)
Android逆向-java代码基础(2)

之前看到有大佬用smali写了一个demo,是一个加法程序。这篇也主要是讲一下关于java的基本的计算,毕竟这个是基础。可能要同时写一下Android基础。

文章里的内容可以选读,里面会有一些问题的解决方式。也可以读一下。

0×01 java 加法运算

这个运算和数学里运算一样,这里写一个简单的demo。

1.int加法

1.1 简单的demo

public class add{
    public static void main(String[]args)
    {
        int a=10;
        int b=11;
        b=a+b;
        System.out.println(b);
    }
}

1.2 编译运行输出结果。

1.3 class文件探索。

1.3.1 这里是上两节讲的常量池。

1.3.2 访问标志(access_flags)

(1)ACC_ENUM标志位

首先来看这个,如果定义了枚举类,那么JVM虚拟机就会把access_flags的第二位为1。

(2)ACC_ANNOTATION标志位

看单词的含义ANNOTAION注释,这里就是如果有注解类,KVM就会把access_flags的第三位置为1

(3)ACC_SYNTHETIC标志位

如果不是JVM编译器编译的,是用户自己的就会把第四位置为1。

(4)ACC_ABSTARACT标志位

定义某一个类的时候,JVM会把ACC_ABSTARACT标志位置为1。

(5)ACC_INTERFACE标志位

定义接口的时候,JVM会把ACC_INTERFACE标志位置为1。

(6)ACC_SUPER标志位

对于定义的类,JVM会把ACC_SUPER标志位置为1。

(7)ACC_FINAL标志位

如果类被声明了final类型,如果是,就会把ACC_FINAL标志位置为1。

(8)ACC_PUBLIC标志位

如果类被声明了public类型,JVM就会把ACC_PUBLIC标志位置为1。

1.3.3 该文件探索

1.4 更简单的查看方式。

javap -v name;

直接查看即可。

1.5 smali文件分析

这里就不详细介绍,class文件是怎样转换成smali文件的方法了。详细请参考
Android逆向-java代码基础(1)

1.5.1这个是smali代码的整体情况。

1.5.2必备的一个

1.5.3 main函数

2 float加法

2.1 demo

public class add{
    public static void main(String[]args)
    {
        float a=1.1f;
        System.out.println(a+a);
    }
}

2.2 class文件分析

2.3 smali文件分析

2.3.1 必备

2.3.2main

add-float/2addr vx,vy  #Adds vy to vx. 

也就是说把vx和vy的值相加。
其他的语法我们都是见过的,而且在Android逆向-java代码基础(2)中非常详细的讲解过,这里就不赘述了。

3尝试使用smali写一段代码。

3.1demo

.class public Ladd;
.super Ljava/lang/Object;
.source "add.java" .method public constructor <init>()V
    .registers 1     .prologue
    .line 1
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V     return-void
.end method .method public static main([Ljava/lang/String;)V
    .registers 3     .prologue #start
    const v0,0x3f8ccccd     const v1,0x4f8ccccd     sget-object v2,Ljava/lang/System;->out:Ljava/io/PrintStream;     add-float/2addr v0,v1     invoke-virtual {v2,v0},Ljava/io/PrintStream;->println(F)V     return-void
.end method

3.2jar编译

0×02 结束语

1.又写了一天,很多东西等着我去学习,在学习的过程中,越理解明白的就越多。今天勉强算是完成了一个应该完成的东西。smali文件的结构也差不多可以了。我觉得同步Android Studio学习可以开始了。
2.当然java还是要接着复习的,不过以我现在的这种进度,真的是有一点慢呢。不过慢归慢,还是可以学到之前没有学到的东西。
3.准备每一天破解一个简单的apk,虽然是简单,但是也可以增强自己对APP的了解。至于破解的教程就不进行说明了。
不过可能会进行一个资料的收集。

微博:HAI_AI_ZHUZHU

>>>>>>黑客入门必备技能   带你入坑,和逗比表哥们一起聊聊黑客的事儿,他们说高精尖的技术比农药都好玩!

Android逆向-java代码基础的更多相关文章

  1. js调用android本地java代码

    js调用android本地java代码 当在Android上使用WebView控件开发一个Web应用时,可以创建一个通过Javascript调用Android端java代码的接口.也就是可以通过Jav ...

  2. Android在java代码中设置margin

    我们平常可以直接在xml里设置margin,如: <ImageView android:layout_margin="5dip" android:src="@dra ...

  3. Android视频通话Java代码

      近期学习Android平台下跨平台音视频通信开发,尽管网上有非常多开源项目供我们參考学习.但音视频效果非常一般,还有非常多不稳定的因素,毕竟是开源嘛.在国内我找到了一个比較好音视频通信解决方式(百 ...

  4. Unity 中调用Android的JAVA代码

    首先我们要创建一个android项目 因为项目需要使用Unity提供的接口,所以需要将接口classes.jar引入至当前工程但中.接口包的所在地,打开Finder->应用程序->Unit ...

  5. Android中用Java代码实现zip文件解压缩

    如果需要下载的文件有很多是中文名的,解压时有中文名的文件出现乱码,试了很多方法不能解决问题.据说有一个Java插件包,用这个插件包可以解决中文名乱码的问题,但不知解压的文件是否要用它提供的类压缩后的文 ...

  6. Android动态Java代码调整window大小

    Android调整window大小 举一个例子,设置当前的APP所需要的屏幕高度为设备高度的一半: Window window = getActivity().getWindow(); WindowM ...

  7. android 用java代码设置布局、视图View的宽度/高度或自适应

    在achat项目中,对话内容的长宽设置为自适应.可是假设文本内容太多,则宽度几乎相同布满,若自己说的和对方说的都非常多内容.则满屏都是文字.则不easy分辨出是来自别人说的还是自己说的.那么须要对本身 ...

  8. Android逆向系列文章— Android基础逆向(6)

    本文作者:HAI_ 0×00 前言 不知所以然,请看 Android逆向-Android基础逆向(1) Android逆向-Android基础逆向(2) Android逆向-Android基础逆向(2 ...

  9. Android逆向-Android基础逆向(5)

    本文作者:i春秋作家——HAI_ 0×00 前言 不知所以然,请看 Android逆向-Android基础逆向(1)Android逆向-Android基础逆向(2)Android逆向-Android基 ...

随机推荐

  1. iOS.AddFont

    为iOS App 添加定制字体 http://www.developers-life.com/how-to-include-ttf-fonts-to-ios-app.html http://blog. ...

  2. 我的UI启蒙之路

    为什么叫UI启蒙之路呢? 我没有学过美术,也不懂设计,但是有的时候也许就是一种命中注定吧,让我知道了UI,并且一发不可收拾的爱上了它. 具体情况是这样的: 我毕业于电力学校,是一名不折不扣的工科生,专 ...

  3. 项目解析1、登录验证用户是否存在 储备知识 Python 之 decorator装饰器

    下面是我对 装饰器 这一小节的总结, 以及自己的理解. 注:[本文中的代码参考上述教程] 很多时候我会把Python的很多语法与C++相融合,在C++中,函数的名称即为函数的地址,我们可以通过定义成为 ...

  4. 构造函数constructor 与析构函数destructor(一)

    构造函数定义:构造函数c++中在创建对象时自动调用,用来初始化对象的特殊函数. (1)构造函数的名字必须与类的名字相同,不能有返回值,哪怕是void 也不行. (2)通常情况下构造函数应声明为公有函数 ...

  5. 如何通过cmd命令进入到某个硬盘的文件夹

    1.使用快捷键win+R打开运行窗口,并输入cmd回车 2.进入到某个磁盘:在命令提示符中输入d:(代表的的是进入D盘的根目录)并回车 3.接着在cmd中输入dir(dir是directory目录的简 ...

  6. 2018.10.23 NOIP模拟 行星通道计划(bit)

    传送门 卡常题. 成功卡掉了作死写树套树的zxy. 然而对我的二维bit无能为力. 直接维护两棵bit. bit1[i][j]bit1[i][j]bit1[i][j]表示左端点小于等于iii,右端点小 ...

  7. 2018.09.11 bzoj3629: [JLOI2014]聪明的燕姿(搜索)

    传送门 一道神奇的搜索. 直接枚举每个质因数的次数,然后搜索就行了. 显然质因数k次数不超过logkn" role="presentation" style=" ...

  8. noexcept(c++11)

    1.概念 1)c++中的异常处理是在运行时而不是编译时检测的,为了实现运行时检测,编译器可能会创建额外的异常处理代码,然而这会妨碍程序优化 2)noexcept说明符:若修饰函数(紧跟在参数列表后面) ...

  9. 继承方法-->一级一级继承

    Grand.prototype.lastName = 'ji'; function Grand(){}; var grand = new Grand(); Father.prototype = gra ...

  10. Python是什么

    Python是一种编程语言,它的名字来源于一个喜剧.也许最初设计Python这种语言的人并没有想到今天Python会在工业和科研上获得如此广泛的使用.著名的自由软件作者Eric Raymond在他的文 ...