Skip to content

Instantly share code, notes, and snippets.

@5ec1cff
5ec1cff / find_zip_entry.cpp
Created April 16, 2024 16:15
Find zip entry by offset
#include <cstdio>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#include <cstring>
#include <cerrno>
#include <string>
#include <utility>
@5ec1cff
5ec1cff / bootloader_miui.java
Created November 22, 2023 15:29 — forked from sopanatx/bootloader_miui.java
Xiaomi Bootloader Bind API
package com.android.settings.bootloader;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.text.TextUtils;
import android.util.Log;
import com.android.settings.AESUtil;
import com.android.settings.bootloader.Utils;
@5ec1cff
5ec1cff / jdwp.py
Last active November 21, 2023 15:28
ptrace inject source code of pwn-tv
#!/usr/bin/python
################################################################################
#
# Universal JDWP shellifier
#
# @_hugsy_
#
# And special cheers to @lanjelot
# https://github.com/IOActive/jdwp-shellifier/blob/e82ec26193861ba58179aae7f3fa93654b7abc8a/jdwp-shellifier.py
@5ec1cff
5ec1cff / CorePatchDetector.kt
Created August 3, 2023 15:31
CorePatch detector
package io.github.a13e300.demo.maho
import android.app.PendingIntent
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.content.pm.PackageInstaller
import android.content.pm.PackageInstaller.EXTRA_STATUS
import android.content.pm.PackageInstaller.STATUS_PENDING_USER_ACTION
@5ec1cff
5ec1cff / background.js
Last active August 3, 2023 13:23
Yet Another Saucenao Search Extension
function injector(url) {
console.log("injected");
let im = document.querySelector("img");
function loaded() {
let canvas = document.createElement("canvas");
canvas.width = im.naturalWidth;
canvas.height = im.naturalHeight;
var ctx = canvas.getContext("2d");
ctx.drawImage(im, 0, 0);
@5ec1cff
5ec1cff / generate.py
Last active April 3, 2023 11:35
Generate windows registry of context menu of IDEs in JB ToolBox
import os
# find icons in %AppData%\Microsoft\Windows\Start Menu\Programs\JetBrains Toolbox
template_add = r'''Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\{prog_name}]
@="Open with {name}"
"Icon"="\"{current}\\icons\\{prog_name}.ico\""
@5ec1cff
5ec1cff / README.md
Last active May 8, 2023 03:16
Android 获取当前焦点窗口的 pid, uid, 包名 等信息

说明

使用 frida 的时候经常需要通过 pid 附加到进程,因为 frida 自带的 -n 参数实在太不好用了——本来 Android 的「进程名」概念是很清楚的,在 Manifest 就能看到,要是不清楚也可以通过 packageName 或者 cmdline 来替代,但 frida 却非要让「应用的名字」作为注入应用主进程的唯一标识,什么包名、命令行,统统不认,遇到中文应用名就很麻烦;此外,这个操作似乎还要注入系统服务,从而导致 stop server 后发生各种诡异崩溃,因此我不太喜欢用这个参数。然而每次都要打开 shell ,输入 ps -ef | grep 找应用的 pid 很是麻烦,并且对于多进程的应用并非总是能「猜对」它的进程名的。于是写了这个脚本,至少可以确定当前看到的这个窗口属于哪个进程(没焦点的就不好说了)。

脚本运行在 Android 上的 shell (建议 /system/bin/sh),在主机端只要简单用 adb shell 之类的封装一下用起来就很方便了。

脚本主要利用 dumpsys window 的 mFocusedWindow 取得当前焦点窗口的 hash ,并查找 hash 对应窗口的 Session 信息获取 uid 和 pid 。

仅在 Android 11 上通过测试,adb 权限即可。

@5ec1cff
5ec1cff / window.md
Created March 12, 2022 15:48
消失的 window service

Window Manager Service 是 Android 的重要服务,各种窗口(Activity, toast, Dialog, 系统 UI 等)都通过这个服务注册和管理。

经常玩系统隐藏 API 的都知道这个实际上是一个名为 window 的 Binder 服务,通过 ServiceManager.getService("window") 就能拿到它的 BinderProxy ,进而转为 android.view.IWindowManager 直接调用 API

但是当你在 app 的 shell 下尝试获取这个服务,却会发现根本无法找到(以下在 Termux 中测试):

image

对比 activity 服务:

@5ec1cff
5ec1cff / isolate_data.md
Created March 7, 2022 11:34
在 Android 11+ 中开启 data 和 Android/data 隔离

探测包名是 Android 应用安全措施的重要方法,而手段也多种多样。常规的通过 PMS 查询包名的方法已经有 HMA 帮忙隐藏,且随着 Android 版本更新也逐渐限制应用任意地获取包名(虽然可以声明需要查询的类型),但还有一种更阴险的方式,就是利用 /data/data 目录或 /sdcard/Android/data 的漏洞——它们下面的目录都是以包名命名的应用数据目录,尽管这两个目录不能直接列出,但是任何应用都具有这个目录的 x 权限(否则无法访问自己的数据目录),因此如果已知需要探测的包名,就可以通过 stat 等系统调用判断目录是否存在,进而确定包名的存在(成功或 Permission Denied 都表明文件存在)。这种方法并不能通过简单的 hook 防止(尤其是绕过库函数直接 syscall 的情况)。

不过 Android 11 实际上还引入了一些措施来防止包名的泄露,那就是通过文件系统层面的措施,将 data 和 Android/data 下的包名直接隔离,每个应用的进程基本上只能看到属于自己 uid 的数据目录。

检查下面两个 prop :

getprop persist.zygote.app_data_isolation
getprop persist.sys.vold_app_data_isolation_enabled