突然想起它: [[noteOfjava]]
三板斧 - apktool #
java -jar apktool.jar d -f -o outputDir yourApp.apk
// 或
./apktool d -f -o outputDir yourApp.apk
文件目录说明:
| 目录/文件名 | 用途 | 内容 |
|---|---|---|
| original | 保存 Apktool 无法直接处理的原始文件 | AndroidManifest.xml 和签名信息目录 META-INF |
| res | 包含应用程序的资源文件 | drawable (图片资源), layout (布局文件), values (字符串等), menu (菜单定义), xml (其他 XML 资源) |
| smali | 包含反编译后的字节码文件 | .smali 文件,每个对应一个 Java 类的方法 |
| assets | 存放原始文件资源,不经编译处理 | 音频、视频、HTML、字体等文件 |
| lib | 存放 native 库(.so 文件) | 不同平台架构的 .so 文件 |
| AndroidManifest.xml | 应用的清单文件,定义应用名称、包名、版本、权限等 | XML 格式的配置信息 |
| apktool.yml | Apktool 的配置文件,存储解码和重建参数 | 框架版本、资源位置、编码设置等 |
| 注意事项: |
- 修改资源或代码后,使用 Apktool 重新打包 APK。
确保遵守法律法规和使用协议。
Smali 是一种用于 Android 应用程序的DEX(Dalvik Executable)文件的汇编语言。它是DEX代码的反汇编表示,类似于Java的字节码。Smali 语法具有特定的结构和规则,以下是一些基本概念和语法:
Smali语言 #
基本结构 #
一个 Smali 文件通常包含以下部分:
- 头部信息:包括文件版本、创建日期等。
- 类定义:以
.class开头,后跟类名和父类名。 - 字段定义:以
.field开头,定义类的字段。 - 方法定义:以
.method开头,定义类的方法。 - 指令:方法内部的操作码,执行具体的操作。
类定义 #
.class public Lcom/example/MyClass;
.super Ljava/lang/Object;
.source "MyClass.java"
.class:定义一个类,public表示访问权限,Lcom/example/MyClass;是类的全限定名。.super:指定父类,这里是Ljava/lang/Object;,表示继承自Object类。.source:指定源文件的名称。
字段定义 #
.field private static myField:I
.field:定义一个字段,private static表示访问权限和静态属性,myField是字段名,:I表示字段类型为int。
方法定义 #
.method public static main([Ljava/lang/String;)V
.method:定义一个方法,public static表示访问权限和静态方法,main是方法名,[Ljava/lang/String;表示参数类型为字符串数组,V表示返回类型为void。
指令 #
在方法内部,你会找到一系列的指令,它们用于执行操作:
aload_0 // 将局部变量0的引用推送到操作数栈
invoke-static {p0}, Lcom/example/MyClass;->myMethod(Ljava/lang/String;)V // 调用一个静态方法
const/4 v0, 0x1 // 将整数1推送到局部变量v0
return-void // 从当前方法返回void
aload_0:加载引用类型局部变量到操作数栈。invoke-static:调用一个静态方法,{p0}是参数,Lcom/example/MyClass;->myMethod(Ljava/lang/String;)V是方法的全限定名和描述符。const/4:将一个小的整数值推送到局部变量。return-void:从方法返回。
注释 #
Smali 文件中也可以包含注释,使用 # 开头的行是注释。
# This is a comment
数据类型 #
Smali 使用特定的符号来表示数据类型:
V:voidZ:booleanB:byteS:shortC:charI:intJ:longF:floatD:doubleLfully/qualified/Class;:对象类型
这只是 Smali 语法的一个简要概述。由于 Smali 是一种低级语言,它包含许多复杂的指令和结构,理解它需要时间和实践。
https证书 #
Android #
mount -o remount,rw /system
mv /sdcard/c8750f0d.0 /system/etc/security/cacerts/
chmod 644 /system/etc/security/cacerts/*
chcon u:object_r:system_file:s0 /system/etc/security/cacerts/*
mount -o remount,ro /system
the perms & selinux context labels, so everything is as readable as before # Delete the temp cert directory & this script itself