逆向三板斧

突然想起它: [[noteOfjava]]

三板斧 - apktool #

https://apktool.org/docs/install/#linux

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.ymlApktool 的配置文件,存储解码和重建参数框架版本、资源位置、编码设置等
注意事项
  • 修改资源或代码后,使用 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:void
  • Z:boolean
  • B:byte
  • S:short
  • C:char
  • I:int
  • J:long
  • F:float
  • D:double
  • Lfully/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