Android逆向从入门到入土之初识风控(2)
前言本文几乎都是来自于珍惜any大佬的文章,主要是作为小白的学习记录
原文:
https://bbs.kanxue.com/thread-273838.htm
https://bbs.kanxue.com/thread-273759.htm
https://bbs.kanxue.com/thread-277402.htm
https://bbs.kanxue.com/thread-277637.htm
其中一些较为难懂的(其实是我看不懂)的代码都做了分析的随笔(其实是AI)
基本概念设备指纹(Device Fingerprint)
设备指纹是应用用来识别你手机的一种技术,类似于给你的设备一个”身份证”
它会收集你的:IMEI、Android ID、MAC地址、设备型号、屏幕分辨率等信息
应用通过这些信息来识别是否是同一台设备,用于风控、防作弊等
Hook Binder
Binder是Android的核心IPC(进程间通信)机制
应用获取设备信息时,都要通过Binder与系统服务通信
123应用 → Binder → 系统服务(获取IMEI等信息) ↑ Hook这里 ...
Android逆向从入门到入土(1)
前言只做学习记录的备份,来自于
[原创]Android漏洞之战(11)——整体加壳原理和脱壳技巧详解
《安卓逆向这档事》
Android App启动流程
Zygote进程fork的第一个进程是:SystemServer进程,SystemServer进程主要进行以下的工作
Android APP安装1234· 系统启动时安装,没有安装界面· 第三方应用安装,有安装界面,也是我们最熟悉的方式· ADB命令安装,没有安装界面· 通过各类应用市场安装,没有安装界面
有这四种安装模式
但是都是通过PackgeManagerService服务来完成应用程序的安装的,而PackgeManagerService服务会与installed服务通信,发送具体的指令来执行应用程序的安装、卸载等工作
123456public static final IPackageManager main(Context context, Installer installer, boolean factoryTest, boolean onlyCore) { PackageMan ...
CVE-2024-35250复现
CVE-2024-35250分析前言原文链接:https://devco.re/blog/2024/08/23/streaming-vulnerabilities-from-windows-kernel-proxying-to-kernel-part1/
本篇文章只做学习记录,对一些不理解的概念进行了补充
Kernel Streaming简单介绍Kernel Streaming(KS) 是指 Microsoft 提供的服务,这些服务支持流式处理数据的内核模式处理。
Kernel Streaming 中,提供了三种多媒体驱动模型:port class、AVStream 和 stream class。
这些类驱动程序在系统文件 portcls.sys、stream.sys 和 ks.sys (也称为 AVStream) 中作为导出驱动程序 (内核模式 DLL) 实现。
大多数用于PCI 和DMA 型音效装置的硬体驱动程式,它处理与音讯相关的数据传输,例如音量控制、麦克风输入等等,主要会使用到的元件函式库会是portcls.sys。
主要介绍port class 和AVStream
Port ...
AFL源码阅读之afl-fuzz结束
AFL-fuzz源码阅读perform_dry_run(use_argv);1234567891011121314151617181920212223242526272829303132333435363738static void perform_dry_run(char** argv) { struct queue_entry* q = queue; u32 cal_failures = 0; u8* skip_crashes = getenv("AFL_SKIP_CRASHES"); while (q) { u8* use_mem; u8 res; s32 fd; u8* fn = strrchr(q->fname, '/') + 1; ACTF("Attempting dry run with '%s'...", fn); fd = open(q->fname, O_RDONLY); if (fd < 0) P ...
AFL源码阅读之afl-fuzz(1)
afl-fuzz源码阅读12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819 ...
AFL源码阅读之afl-gcc&afl-as
基本概念basic block(基本块)、edge(边)、代码覆盖率
edge就被用来表示在基本块之间的跳转,知道了每个基本块和跳转的执行次数,就可以知道程序中的每个语句和分支的执行次数,从而获得比记录BB更细粒度的覆盖率信息
代码覆盖率是一种度量代码的覆盖程度的方式,也就是指源代码中的某行代码是否已执行;对二进制程序,还可将此概念理解为汇编代码中的某条指令是否已执行。
覆盖率劫持:
劫持汇编器(afl-gcc、afl-clang、afl-g++),通过识别跳转指令,然后在其中插入一段汇编用于与AFL之间的通信(__afl_maybe_log)
clang内置,LLVM 内置了一个简单的代码覆盖率检测 (SanitizerCoverage),它在函数、基本块和边缘级别插入对用户定义函数的调用。提供了这些回调的默认实现,并实现了简单的覆盖率报告和可视化
编译器将在 -fsanitize-coverage=trace-pc-guard 每个边缘插入以下代码:
1__sanitizer_cov_trace_pc_guard(uint32_t* guard_variable)
每条边都有 ...
protobuf初探
Protobuf (Protocol Buffers) 是谷歌开发的一款无关平台,无关语言,可扩展,轻量级高效的序列化结构的数据格式,用于将自定义数据结构序列化成字节流,和将字节流反序列化为数据结构。所以很适合做数据存储和为不同语言,不同应用之间互相通信的数据交换格式,只要实现相同的协议格式,即后缀为proto文件被编译成不同的语言版本,加入各自的项目中,这样不同的语言可以解析其它语言通过Protobuf序列化的数据。目前官方提供c++,java,go等语言支持。
使用首先定义一个.proto文件
12345678syntax = "proto2";message devicemsg{ required sint64 actionid = 1; required sint64 msgidx = 2; required sint64 msgsize = 3; required bytes msgcontent = 4;}
然后根据要通过c或者python来使用,来使用相应的命令
12protoc --c_out=. tes ...
windows heap初探(2)
windows堆基础知识win10的memory allocator基本上分为两种:
Nt Heap
默认的memory allocator
后端管理器(Back-End)
前端管理器(Front-End)
SegmentHeap
Win10中全新的memory allocator机制
在LFH未启用时,我们call malloc
启用LFH后,第一次或LFH能用的空间都用完时,会先跟Back-End要一大块空间来管理
启用LFH之后分配相同大小时,会直接给Front-End管理
Nt HeapBack-End数据结构_HEAP_HEAP是每个堆的核心结构,用来管理该heap,每个Heap都有一个_HEAP在heap开头
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869//0x2c0 bytes (sizeof)struct _HEAP{ un ...
windows pwn初探(1)
window_pwnhttps://www.anquanke.com/post/id/188170#h3-1
SEH相关数据结构TIB结构TIB,即线程信息块,是保存线程基本信息的数据结构,它位于TEB的头部。TEB是操作系统为了保存每个线程的数据创建的,每个线程都有自己的TEB。
TIB结构如下:
123456789101112typedef struct _NT_TIB{ struct _EXCEPTION_REGISTRATION_RECORD *Exceptionlist;//指向异常处理链表 PVOID StackBase;//当前进程所使用的栈的栈底 PVOID StackLimit;//当前进程所使用的栈的栈顶 PVOID SubSystemTib; union { PVOID FiberData; ULONG Version; }; PVOID ArbitraryUserPointer; struct _NT_TIB *Self;//指向TIB结构自身} ...
Qemu逃逸初识
qemu逃逸学习CTF中的qemu逃逸便是通过在qemu源码中注册一个新的pci,来模拟真实环境下的某一个pci外设,例如键盘控制器之类?通过构造特定的Guest操作触发漏洞(一般是越界读写),最终在Host上获得shell读取flag,主要还是侧重于代码的逆向和漏洞的利用技巧。
实战中的或许是类似于针对云服务商的?目标是突破租户隔离,来获得宿主机的敏感信息吧,还是非常有意思滴!!!
原文:https://xz.aliyun.com/news/6166
只做学习记录和批注
好文:https://xuanxuanblingbling.github.io/ctf/pwn/2022/06/09/qemu/
qemu概述运行的每个qemu虚拟机都相应的是一个qemu进程,从本质上看,虚拟出的每个虚拟机对应 host 上的一个 qemu 进程,而虚拟机的执行线程(如 CPU 线程、I/O 线程等)对应 qemu 进程的一个线程。
其中**客户机系统 (Guest)**:运行在 QEMU 之上,是虚拟机中安装的操作系统。
客户机系统认为自己直接运行在硬件上,但实际上是通过 QEMU 与底 ...
