有关于安卓逆向的一篇日记,如何二改&破解软件?来看看这篇很勉强的技术博客吧。

关于安卓逆向,大部分的作用都是用于破解软件 (一些付费的软件),另外的就是二改软件 (软件汉化,反人类的操作修改),当然这里面或多或少是涉及到软件提供商的利益问题的,一切利弊由修改者衡量。
这篇文章本人的入坑笔记,因为是小白,一些见解可能不太正确,如果你也有一点见解,可以在本页评论交流。

注:可能需要一些安卓开发基础知识,可以自行百度
本文由@PangBai原创,转载请注明原地址

# 安卓安卓包

# 目录结构

关于安卓安装包,大部分是以 .apk 为后缀,当然,也有.apks 和.abb, 解压后查看目录大致也相差不大。

apk 文件中有许多已编译的文件 (字节码形式),这些我们自然看不懂
如 AndroidManifest.xml,classes.dex,resources.arsc
既然看不懂,我们就得找翻译吧,使用工具 Apktool 进行反编译,手机上请用 Apktool_M (你一定要用 MT 我也没办法)

以下为反编译后目录内容 (也许会出现其他文件夹,但大多与逆向不会有太大关系)

  • assets
  • lib
  • smali
  • res
  • layout
  • color
  • anim
  • drawable
  • raw
  • xml

assets 是一个储存大型资源的目录,可能占 apk 绝大多的字节大小, 储存其中的资源不会被编译,可以直接修改 ,软件运行时会以压缩文件形式解压出来使用。(根据我的经验,html 形式文件可以通过 ur 定位直接访问而其他形式的文件必须需要解压)

lib 存放已编译的库文件,十分重要,进行逆向时直接忽视它。

smali 存放反编译出的 smali 文件 (来自 classes.dex 文件),是我们进行逆向的主角

res 存放资源文件,如布局,配色,样式,图片,大多为 xml 和 png 形式。
其中 raw 文件夹十分特别,该文件夹下不会被编译 (同 assets 相似,但它还会额外为文件分配一个 id),可以存放任何形式文件。

# Smali

smali 是一种类似于汇编语言的语法,可以打包为 dex 文件运行在 Dalvik 里(Android 虚拟机) 。

# Smali 文件

我们在 smali 文件夹里能看到许多 smali 文件,它们的是按一定规则进行命名的。

每一个 smali 文件都对应对应一个 java 类,如果有一个 activity.java,那么编译后就有 activity.smali。我们也许还可以看到另外的 activity$InnerClass.smali 这样的文件,这说明 activity.java 里面还有一个叫 InnerClass 的内部类。如果出现 activity$a.smali activity$b.smali 这种无意义的内部类名称,那就可能是个匿名内部类。

# Smali 语法

# 数据类型

每种基本数据类型对应一个字母
[+ 数据类型表示一个数组,如 [D 表示一个 double 类型数组。
L + 类路径表示一个对象,如 String 类型数据使用的是 Ljava/lang/String

#

i
.class public abstract LCar; //abstract 表明为抽象类
.super Ljava/lang/Object;
.source "Car.java"
.implements LIFly;

.class 声明一个类并添加修饰
.super 声明继承的父类
.source 声明类来源的文件
.implements 声明类实现的接口

# 方法

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

PangBai 微信支付

微信支付