突然想起它: [[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