APP name
重打包
重打包完成
开始签名
apktool签名
使用 APKtool 或其他工具生成的签名文件与原始签名文件的区别主要在于它们使用的密钥和证书可能不同。当你使用 APKtool 对 APK 文件进行反编译、修改后再重新打包时,你通常需要使用一个新的密钥和证书对修改后的 APK 文件进行签名,因为你可能没有原始的签名密钥。这种情况下,生成的签名文件与原始的有以下区别:
1. **不同的密钥**:
- 原始的 APK 文件是由开发者或发布者使用他们的私有密钥进行签名的。如果你没有这个私有密钥,你不能生成与原始签名相同的签名文件。
- 使用 APKtool 重新签名时,你将使用一个新的密钥(你自己生成的或者是一个调试密钥)来签名 APK。
2. **不同的证书**:
- 签名文件包含了与私有密钥关联的公开证书。如果你使用一个新的密钥进行签名,那么签名文件中的证书也将是不同的。
3. **安全性和信任级别**:
- 原始签名由应用的开发者或发布者创建,通常与他们的信任和认证相关联。用户和设备通常信任这个签名。
- 使用新密钥签名的 APK 文件可能不会被用户或设备以相同的方式信任,尤其是如果它试图替换一个已经在用户设备上安装的应用。
4. **更新和兼容性问题**:
- 如果一个应用已经安装在用户的设备上,那么只有使用相同的签名密钥签名的更新才能被安装。使用不同的密钥签名的 APK 文件将无法作为更新安装。
5. **应用商店政策**:
- 应用商店,如 Google Play,要求应用使用开发者账户下的密钥进行签名。使用不同的签名密钥可能会违反应用商店的政策。
总的来说,使用 APKtool 生成的签名文件在技术上与原始签名文件不同,因为它们使用了不同的密钥和证书。这种差异在安全性、信任级别和应用更新方面有重要影响。在进行 APK 的修改和重新签名时,应该意识到这些差异,并考虑到相关的法律和安全问题。
1.生成key文件
keytool -genkey -alias new.keystore -keyalg RSA -validity 20000 -keystore new.keystore
指令理解:
这段代码是使用 Java `keytool` 工具的命令行,用于生成一个新的密钥库(keystore)文件,并在其中创建一个新的密钥条目。下面是命令各部分的详细解释:
- `keytool`:这是 Java 开发工具包(JDK)中包含的密钥和证书管理工具。
- `-genkey`:这个选项告诉 `keytool` 生成一个新的密钥对(公钥和私钥)。
- `-alias new.keystore`:这里的 `-alias` 选项后面跟着的是密钥条目的别名。在这个例子中,别名被误写为 `new.keystore`,通常别名应该是一个简单的标识符,比如 `mykey`。
- `-keyalg RSA`:这个选项指定生成密钥对时使用的加密算法,这里使用的是 RSA 算法。
- `-validity 20000`:这个选项设置密钥对的有效期,单位是天。在这个例子中,密钥对的有效期被设置为 20000 天。
- `-keystore new.keystore`:这个选项指定密钥库文件的名称。如果文件不存在,`keytool` 将创建一个新文件。如果文件已存在,`keytool` 将把新的密钥条目添加到现有密钥库中。在这个例子中,密钥库文件的名称被设置为 `new.keystore`。
执行这个命令后,通常会提示你输入密钥库的密码,以及新密钥条目的相关信息,如你的姓名、组织和地理信息等。这些信息将被用来创建一个自签名的证书,它与新生成的密钥对关联,并存储在密钥库文件中。
这个命令通常用于为 Java 应用程序或 Android 应用程序生成签名密钥,这些密钥用于在发布时对应用程序进行签名,以确保应用程序的完整性和来源可信。
秘钥库口令:123456
移动apk到key文件的同名目录中
2.签名APK
命令:
jarsigner -verbose -keystore new.keystore -signedjar news-douban7.18.apk build-douban7.18.apk new.keystore
jarsigner -verbose -keystore new.keystore -signedjar news.apk old.apk new.keystore
完成签名,得到新的apk。
显示签名不成功
重新签名并重装试试
可能是手机没有root
用模拟器打开就成功了。
Frida检测
9 frida 检测
1、D-Bus
Frida 使用 D-Bus 协议通信,可以遍历 /proc/net/tcp 文件,或者直接从 0-65535
向每个开放的端口发送 D-Bus 认证消息,哪个端口回复了REJECT,就是 frida-server
2、端口检测
通过检测默认端口 27042 是否开放来检测frida是否开启,只需要启动时指定端口即可绕过
3、进程名检测
进程名检测,遍历运行的进程列表,检测 frida-server 是否运行
4、默认路径
frida 默认会在 /data/local/tmp/re.frida.server/frida-agent-64.so 中存放 frida-agent ,可
以查找此路径下是否存在对应文件
5、扫描maps文件
maps 文件用于显示当前app中加载的依赖库
Frida在运行时会先确定路径下是否有 re.frida.server 文件夹
若没有则创建该文件夹并存放 frida-agent.so 等文件,该so会出现在 maps 文件中
解决方法
1.改变端口
2.对文件名哈希
app开启后,可以关闭frida server。
检测点很多的话,需要Xposed。
JAR 包的作用:
-
封装:JAR 文件可以将 Java 类文件、相关的元数据和资源文件(如文本、图片和配置文件)封装在一个单一的文件中,便于传输和部署。
-
模块化:JAR 文件支持模块化编程,允许开发者将应用程序或库划分为可重用的组件。
-
安全性:JAR 文件可以签名,以确保文件的完整性和来源安全。
-
执行:可执行的 JAR 文件包含一个特定的清单文件,该文件指定了应用程序的入口点(main 方法所在的类),使得 JAR 可以作为独立的应用程序运行。
举例说明:
一个常见的例子是使用 JAR 文件来分发 Java 库或框架。例如,Apache Commons Lang 是一个提供额外 Java 核心类库功能的库,它被打包成一个 JAR 文件。开发者可以将这个 JAR 文件添加到他们的项目中,来使用其中的实用程序类和方法。
另一个例子是分发桌面应用程序。Java 开发的应用程序可以被打包成一个 JAR 文件,用户可以通过双击 JAR 文件来运行应用程序,前提是他们的系统上已经安装了 Java 运行时环境(JRE)。
如何打开 JAR 包:
-
作为 ZIP 文件:由于 JAR 文件基于 ZIP 格式,你可以使用任何支持 ZIP 格式的文件压缩工具(如 WinRAR、7-Zip)来打开和查看 JAR 文件的内容。
-
使用命令行:在支持 Java 的命令行环境中,你可以使用
jar
工具来查看、提取或运行 JAR 文件。例如,查看 JAR 文件内容的命令是:jar tf myapp.jar
提取 JAR 文件内容的命令是:
jar xf myapp.jar
运行 JAR 文件的命令是:
java -jar myapp.jar
-
在 IDE 中:集成开发环境(IDE)如 IntelliJ IDEA 或 Eclipse 允许你直接导入 JAR 文件并浏览其内容。
请注意,如果 JAR 文件是可执行的,并且你的系统已经安装了 Java,通常可以通过双击 JAR 文件来运行它。如果不能运行,可能需要在命令行中使用 java -jar
命令。
以下是 APK 文件的结构展示,它是一个树状图,描述了 APK 文件的主要组成部分:
APK 文件是 Android 应用程序的包文件格式,用于分发和安装移动应用。它本质上是一个 ZIP 文件,包含了应用的代码、资源和元数据。一个标准的 APK 文件通常包含以下内容:
META-INF/
:包含应用的签名信息和清单文件。res/
:包含应用的资源文件,如布局(XML 文件)、字符串、图片等。assets/
:包含应用需要的原始文件,开发者可以随意访问。lib/
:包含针对不同架构的本地库(.so 文件)。AndroidManifest.xml
:描述应用的名称、版本、权限和其他配置信息的 XML 文件。.dex
文件:包含编译后的应用代码,适用于 Android 运行时的 Dalvik 字节码。resources.arsc
:包含编译后的资源文件,如二进制 XML。
这个结构使得 Android 设备能够有效地安装和运行应用程序。