吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13833|回复: 34
收起左侧

[Android 原创] Android逆向-java代码基础(1)

[复制链接]
BubblePig 发表于 2018-1-23 17:24

[TOC]

0x00 简述

好久没有动过java代码的样子,都是在Android开发中使用一下,今天假装自己是一个初学者来温习一下吧。当然现在的行当是逆向,那么逆向是不能少的。之前学习都是使用Eclipse的,现在使用javac进行编译,找点新鲜感,有所进步和学习还是很好的。

链接

Android逆向-java代码基础(2)

0x01 本次内容

1.编写第一个java代码

public class first
{
        public static void main(String[] args)
        {
                        System.out.println("I Love Zhuzhu!");

        }
}

代码很简单,就是输出一串字符,我就不输出HelloWorld了,想输出什么随你开心。

2.使用javac进行编译。

普及一下什么是javac:
简单的说javac 是java语言编程编译器。如果想要深入了解请:自行百度。
编译

javac first.java

这里写图片描述
生成文件first.class。(使用的时候配置环境变量)
给一个传送门吧: http://blog.csdn.net/badboy2008/article/details/41316253

3.使用java命令运行

java first

这里写图片描述
这里我们成功的输出了我们想要输出的元素。

4.结束语

以上就是使用javac进行编译java代码的简单过程,恩。非常简单,但是又必须得知道。以为这里就结束了?恩,就是结束了。

0x02         附加内容(java虚拟机)

1.java虚拟机

(1)首先明确

.class并不是直接运行在系统进程上的,而是通过一个java虚拟机来进行托管。
这里写图片描述

(2)类装载器

类加载指将类的字节码文件(.class)中的二进制数据读入内存,将其放在运行时数据区的方法区内,然后在堆上创建java.lang.Class对象,封装类在方法区内的数据结构。

(3)理解

先把.class文件给JVM,JVM进行运行,如果当该程序结束的时候,JVM也紧跟着一起结束,

(4)结束语

详细的以后会讲到,现在只是一个简单的了解

0x03 附加内容(class文件)

1.简要说明

class文件是一种8位字节的二进制流文件,相邻的项之间没有间隙,class文件中的信息是一项一项排列的, 每项数据都有它的固定长度。

2.class文件的数据项

这里写图片描述

3.class文件的结构

3.1 魔数【magic】

文件开头是4个字节大小的magic,也就是魔数。
所谓的魔数就是校验位,JVM通过判断魔数来判断是不是.class文件。一般通过java编译器编译过的魔数都是:CA FE BA BE。

这里写图片描述

3.2副版本号【minor_version】

副版本号占用第5、6两个字节,一般都为0。

这里写图片描述

3.3主版本号 【major_version】

主版本号占用第7,8两个字节,1.0的jdk 版本号是45,1.7的就是51,对应的十六进制就是0x33。
这里写图片描述

3.4 小技巧

有没有什么办法可以直接查看主版本号和副版本号的吗,当然有了,我们来使用jdk自带的javap来进行查看吧。

javap -v first

这里写图片描述

3.5 常量池计数器(constant_pool_count)

(1)常量池计数器占两个字节,他描述整个class文件的字面信息。
(2)常量池是由一组constant_pool结构体数组组成的,而数组的大小则由常量池计数器指定。
(3)常量池计数器constant_pool_count 的值 =constant_pool表中的成员数+ 1。constant_pool表的索引值只有在大于 0 且小于constant_pool_count时才会被认为是有效的。

这里写图片描述
这里我们看出,常量池计数器是00 1D,也就是说常量池的长度就是

3.6 常量池【constant_pool】

常量池,constant_pool是一种表结构,它包含 Class 文件结构及其子结构中引用的所有字符串常量、 类或接口名、字段名和其它常量、类或接口名、字段名和其它常量。 常量池中的每一项都具备相同的格式特征——第一个字节作为类型标记用于识别该项是哪种类型的常量,称为 “tag byte” 。

4.结束语

class文件结构暂时就只介绍到这里,以后会有章节进行详细解释。

0x04 .class 转换dex

虽说是要复习一下java以及学习java没有学到的知识点,但是呢,还是要侧重一下逆向的嘛。smali是APK逆向之后的常见的东西,代码这种东西就是敲的越多,见的越多,它就和你越熟练。所以把java编译成二进制字节码的class文件,然后再把class文件转化成dex文件就十分重要了。

1.class转dex

编译工具在 Android SDK 的路径如下./build-tools/19.0.1/dx
这里我把这个目录加在了环境变量里,方便我在任何目录进行使用。
使用的命令如下:

 dx --dex --output=first.dex first.class

使用后效果:
这里写图片描述

出现了一个错误:

PARSE ERROR:
unsupported class file version 52.0
...while parsing first.class
1 error; aborting

这个错误的意思就是编译java的jdk版本过高或者是dx的版本太低。解决方法就是降低jdk版本,或者提高dx的版本。在这里我采用降低jdk版本的方式。当然我也不会重新去安装我的jdk。javac自带功能就好。

使用命令:

javac -source 1.6 -target 1.6 first.java

这里写图片描述
这里有一个警告,无视他,dex生成成功。

这里写图片描述

2.dex转smali

这个就非常简单了,丢在工具里,一键搞定,不得不说图形化界面真的省事。
这里写图片描述
稍等一下,就拿到了我们想要的smali文件。
我这里使用sublime Text查看。

sublime Text自己是不会带smali高亮的,需要自己设置关于sublime Text怎样设置smali语法高亮之前有过总结:hxxps://bbs.ichunqiu.com/thread-31148-1-1.html
关于helloworld程序的smali代码分析,之前也有总结,这里就不再赘述:hxxps://bbs.ichunqiu.com/thread-31104-1-1.html

0x05 结尾

这里提供一个关于整篇的全部文件的下载链接:http://download.csdn.net/download/qq_36869808/10191271

免费评分

参与人数 12威望 +1 吾爱币 +18 热心值 +12 收起 理由
一位热心市民 + 1 + 1 谢谢@Thanks!
FENGMUTIAN + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Forbid + 1 + 1 谢谢@Thanks!
gameoverit + 1 + 1 用心讨论,共获提升!
qtfreet00 + 1 + 9 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
不懂夕阳的云 + 1 + 1 我很赞同!
jaffa + 1 + 1 谢谢@Thanks!
建立颗粒 + 1 + 1 用心讨论,共获提升!
Night_月殇 + 1 谢谢@Thanks!
iteamo + 1 + 1 谢谢@Thanks!
tong_wen2504 + 1 谢谢@Thanks!
怖客123 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| BubblePig 发表于 2018-9-17 02:30
weige 发表于 2018-9-14 21:25
学习这套逆向教程要从哪里看起啊,感觉从这里看有点懵

看一半,后一半分析格式,以及java虚拟机的可以不管
Hmily 发表于 2018-1-23 17:28
 楼主| BubblePig 发表于 2018-1-23 17:29
幻狐boke 发表于 2018-1-23 17:35
学习了,谢谢楼主的share
寂寞の灵魂 发表于 2018-1-23 17:50
学习!!!!!!!!
雁字回时月man楼 发表于 2018-1-23 18:28 来自手机
好!!!!!!
糖0穿 发表于 2018-1-23 18:29
又是csdn,
emmmm
 楼主| BubblePig 发表于 2018-1-23 18:47

我改了吧。。。emmmm
zjls9933 发表于 2018-1-23 18:57
这个我还是看不懂啊
LeiSir 发表于 2018-1-23 20:39
不懂,小白白路过
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 22:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表