自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(526)
  • 资源 (13)
  • 问答 (4)
  • 收藏
  • 关注

原创 LeakCanary核心机制学习

read the fucking source code前言本文不包含分析LeakCanary所使用的haha库的代码.LeakCanary 官网本文基于:leakcanary-android:2.7简单的使用仅是一句话,连初始化代码都不需要你写.dependencies { debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7'}LeakCanary初始化分析上图便是leakCanary工程目录,而

2021-04-25 20:03:06 525

原创 Kotlin协程系列目录索引

协程基础库Kotlin协程源码分析-2 调用挂起函数Kotlin协程源码分析-3 调用挂起函数Kotlin协程源码分析-4 状态机Kotlin协程源码分析-5 状态机Kotlin协程源码分析-6 suspendCoroutineUninterceptedOrReturn注意点Kotlin协程源码分析-7 Context左向链表Kotlin协程源码分析-8 拦截器协程核心库Kotlin协程核心库分析-1 DispatchersKotlin协程核心库分析-2 Job简述Kotlin协程核心

2021-04-20 14:34:32 1490 2

原创 view的事件分发

文章目录前言一次触摸事件事件处理涉及重要方法为什么需要事件分发本文的Demonstrate代码源码分析知识铺垫ViewGroup下的ACTION_DOWN处理ACTION_DOWN子view消费ACTION_DOWN子view不消费ACTION_DOWNViewGroup下的第一个ACTION_MOVE处理假设子view消费了之前的ACTION_DOWN事件假设子view没有消费了之前的ACTION_DOWN事件ViewGroup下的后续ACTION_MOVE处理前言本文基于<<Androi

2021-04-20 14:14:53 191

原创 View的绘制流程

前言参考Android View的绘制流程面试官带你学安卓 - 从 View 的绘制流程说起

2021-04-16 15:05:20 392 2

原创 Binder驱动源码分析目录

目录Android Binder驱动分析一 ServiceManager启动流程Android Binder驱动分析二 ServiceManager与binder驱动Android Binder驱动分析三 addservice源码分析Android Binder驱动分析四 addservice源码分析Android Binder驱动分析五 addservice源码分析Android Binder驱动分析六 addservice源码分析Android Binder驱动分析七 线程相关Andro

2021-04-11 12:18:45 407

原创 Handle 源码分析与学习

class ActivityThread{ public static void main(String[] args) { //构造一个主线程对应的Looper实例,存放在Looper.sMainLooper中 Looper.prepareMainLooper(); //... //创建一个Handler对象实例 if (sMainThreadHandler == null) { sMainThreadHandler = thread.getH

2021-03-07 17:17:03 339

原创 java 泛型擦除

前言本文讲从字节码层面深度学习泛型,这也是大厂常见面试我们定义了如下类图所示类:泛型的协变与逆变定义泛型 extend的作用请先浏览如下代码 List<? extends Female> extenfemalesList1 = new ArrayList<Female>();// List<? extends Female> extenfemalesList2 = new ArrayList<Human>(

2021-02-13 02:32:01 271

原创 Gradle插件 protobuf自动编译

前言protobuf是Google推出的序列化协议,比json所占的字节更小,序列化更快等特点。protobuf Github地址protobuf 语法教程Tip:移动端可以考虑用lite版本减少生成的类体积

2020-12-06 20:33:54 1407

原创 Android之免清单注册启动Activity

在此立志:我要努力大学毕业进BAT 实习目标:Activity不需要注册在清单即可通过intent启动。有些文章叫做hook技术。大致内容为监听方法或者的调用或触发,期间修改方法参数或者返回值达到无须需改app源码即可修改app。如Xpose有插件可防止qq撤销消息。我们今天监听activity的启动然后进行方法修改,期间会用动态代理和大量的反射Activity启动流程分析 第一章首先学习ac

2017-10-12 16:29:53 7137 6

原创 Android压缩图片和libjpeg库

前言一些额外知识补充知识的结论参考文献前言:在android开发时我们往往有如对图片如下的需求: 1. 希望压缩图片方便网络传输 2. 修改图片分辨率 防止在Android加载Bitmap的时候oom(内存溢出)一些额外知识:Android的Bitmap对象在加载时 内存大小为:宽的像素*高的像素*位图格式(如ARGB8888)注意: 这里的

2017-09-01 00:16:34 5099 3

原创 最全的增量更新入门 包含linux端和Android

简介增量更新大量用于 Android各大应用市场.本文想做网络上从服务器到app客户端完整讲解.app用eclipse和android studio 最新版cmark开发ndk 如下图: 以前一直好奇怎么做的直到知道了bsdiff库. 地址附上: bsdiff源码地址和简介大家可以从简介看到bsdiff是基于bzip2源码(bsdiff和bspatch一个用于生成差异文件补丁,另一个用于差

2017-04-19 19:16:25 3717 2

原创 cmake学习笔记2

有时候我们想根据一些上下文情况设置一些东西。在cmake我们可以通过if判断条件去完成 也可通过一个生成表达式的东西完成。cmake有很多生成表达式,这里做一个简述。condition只能传0或者1,如果为1那么返回true_string 否则返回空字符串。如果你的condition不是0或者1那么你需要结合其他其他生成表达式进行嵌套完成。需要注意的是表达式并会在生成构建系统文件的求值,而是在构建目标的时候计算,所以我们这里创建一个自定义目标进行输出。

2024-04-05 17:53:42 380

原创 cmake学习笔记1

是什么?是一个元构建系统(meta build-system),用于生产其他构建系统文件(如Makefile或Ninja)。

2024-04-04 14:36:14 1089

原创 GridLayoutManager 中的一些坑

插入3时:0和1同时执行操作A,不执行操作B , 0和1不会触发onmeasure。3和2执行操作A ,2不会触发onmeasure,3触发onmeasure。插入2时:0和1同时执行操作A,不执行操作B , 0和1不会触发onmeasure。2执行操作A并触发onmeasure。插入1时:0和1同时执行操作A,不执行操作B。函数会根据必要性确定是否要执行子view的测量操作。我们假设假设wrapcotent计算的高度为50。插入0时:0执行操作A,不执行操作B。decorate插入的高度为10。

2024-03-31 15:21:30 945

原创 Swift中 any some的作用

在学习Swift ui看到一个函数返回了some view。view我可以理解那some是什么?如果你仔细看一些官方文档甚至还有any关键字,也可以用于替换some。那么两则区别是什么?本文为博主笔记不具备说教性。

2024-03-19 22:52:03 1117

原创 Android audiotrack尾帧无声

产品一直有用户反馈音频截断问题。在机遇巧合下现学现卖音频知识处理相关问题。

2024-03-12 15:10:07 494

原创 Makefile 学习笔记

(2) all.o的prerequisite为all.c all.cc all.cpp(优先级排序,如果有c后缀就不会选cc。(3) 如果当前目录不存在all.c all.cc all.cpp那么会选择Makefile中是否存在all.o或者all.c all.cc all.cpp目标规则。证明命令是可选的 %.c到%.o ,以及%.c到target命令都是可选,MakeFile会隐式执行。证明 all目标隐式依赖all.o和all.o隐式依赖all.c all.cc all.cpp。

2024-03-10 23:57:34 802

原创 ARM汇编学习录 3 - 调试/编译

在学习ARM汇编的时候,我们往往需要将汇编生成为可执行程序以及调试运行。这里使用Android手机作为运行环境。高版本NDK使用clang套件已经不在提供GUN GCC/GDB。

2023-10-24 18:59:58 263

原创 ARM汇编学习录 2 - 编码分析

本文记录笔者学习对应汇编指令相关编码知识。

2023-10-15 18:47:46 379

原创 ARM汇编学习录 1 -基础概念

现阶段有四个不同的指令集ARM某一个时刻只能运行单独ARM指令集或者Thumb指令,通过CPSR的T标志位决定.如何当前执行ARM函数,想要跳转到thumb函数可以通过调用BX切换状态,需要注意的是Thumb函数跳转地址必须末尾是1才能让CPSR自动切换(thumb实际函数由于字节对齐末尾是0,所以很多跳转到thumb地址函数时往往会手动+1在执行BX指令)。

2023-10-07 16:47:10 167

原创 gcc/linux下的c++异常实现

本文不一定具有很好的说教性,仅作为自我学习的笔记。不妨可参阅国外大神博文链接中包含了大量的例子。偶有在对做分析的时候看到如下图一些注释,部分关键字看不懂,比如什么FDEunwind等是什么?由于笔者在开发领域,因此偏向下做实现,部分源码有时候会参阅或者版本。

2023-08-27 16:42:15 519

原创 内核驱动层实现强杀三方程序进程/线程

一些流氓程序通过一些恶意手段会阻止用户杀死自身。本文在杀软层面 编写相关内核代码强行关闭对应的程序。在内核层面有相关API进行终止对应线程函数原型只能线程自己关闭自己,但是你看到相关官方文档最后一句话有这不就是暗示我们玩骚?于是将内核代码拖入IDA进行分析最后发现跳转到函数,其中gs:[188]表示指向当前进程(在x64中gs指向kpcr)是一个公开函数 ,但没有公开,那么可以先定位函数,然后通过特征码去寻找对应的函数地址。也就是这条指令一共五个字节,且小尾编码。

2023-04-16 21:24:34 448 1

原创 window 过滤驱动的编写

有时我们需要监控操作系统内核中一些特定的操作如网络驱动的收发,键盘驱动事件,文件读写等。著名的wireshark软件就是利用过滤驱动的机制完成相关操作如下图所示:我们有可以编写一个过滤驱动拦截相关请求的结果从而实现监听。我们首先编写一个简单简单驱动接受的读写控制请求,这个驱动将来要作为我们被附加监听的驱动示例需求设计如下:(1) 我们这个驱动会创建一个设备 。(2) 的读取请求直接返回异步结果(3) 的控制请求直接将读取请求的异步结果返回(3) 关闭文件操作,也会触发之前的读请求异步结果

2023-04-07 22:00:49 637

原创 win64 内核hook API

除了 SSDT hook和Inline hook外,内核还提供其他官方的API方便我们进行hook操作从而完成一些安全软件的研发等。举例其中以下API函数两个函数都是用于注册一个回调监听进程的创建或者退出时调用,不同的是EX后缀函数不仅可以监听而且还可以控制创建的进程结果。参数说明: 回调函数Remove: 如果为TRUE ,从系统回调表中删除回调函数的注册。FALSE为注册函数到回调函数表中。

2023-03-12 18:12:05 616

原创 使用windwow windbg 吃透64位分页内存管理

分页基础概念是操作系统基础知识,网上已经有太多太多了。所以本文记录具体可以参阅的章节。CR0.PG = 0表示不开启分页.并且根据CR4各种标志开启不同类别的分页模式,大致有四种模式。开启物理地址扩展 简单点理解就是用于启用64位模式(本文讨论范围)CR4.LA57是一个控制寄存器的位,用于启用或禁用所谓的5级分页模式,启用57位线性地址。(本文不讨论,因为现在基本没有使用)是CR4的第12位,在window10 64位都没有启用(也没有必要启用)本位讨论的分页机制是原文中的分页机制。

2023-02-26 13:26:27 741

原创 Android 抓包相关 SSL相关

因此在Android P基本很少能能抓取http请求,多数以https为主。Android 7以上系统默认会让App不信任默认用户证书,只信用系统证书。默认情况我们只能导入用户证书,系统证书导入需要一些root权限。如下图所示导入的charles证书。如果你有root权限直接导入系统证书即可:如笔者次目录下的用户证书(2) 将证书文件拷贝到系统证书目录举例命令如果出现,重新挂载分区(android 8以上版本请关闭dm-verity以及avb在尝试网上重新挂载命令)。

2023-02-01 20:34:14 1536 1

原创 windows ssdt

我们ring 3跳转ring0另一种方式使用命令。相比起jmp,int xx方式相比速度更快,因为sysenter指令大量的使用了MSR寄存器 存储跳转地址等。MSR寄存器相关读/写命令其中xxx是msr寄存器的编号比如174h等为方便记忆我们约定了一些编号的名字上面上个寄存器就是sysenter指令会涉及的msr寄存器。

2023-01-23 19:42:29 796

原创 windows x32调用门/中断门实现 ring3提权

调用门是Intel提供的一个机制,用于控制不同权限级(ring0-ring3)的程序函数调用。简单点就是提供了一个ring3 调用ring0 函数的机制。在intel手册描述如下详细可参阅实现调用门需要构造一个调用门描述符放入GDT或者LDT中。指向代码段的段选择子,P表示门是否有效,如果栈转化那么指示要从调用方栈拷贝到目标栈的word(16位)数。type固定为1100.如果调用的代码段是ring3权限(CPL),而目标调用门是ring0(RPL)权限,栈区是不共享的因此需要将栈区的参数拷贝到目标栈中。

2023-01-01 23:04:04 1055

原创 内核驱动修改内存

本文会利用内核驱动进行读写取第三方应用内存。内核实现会使用内联汇编 所以对于内核数据结构每个windwos版本不一样需要判断,本文使用19041所写代码。winver即可查看你当前的版本,如下图19042.631就是构建版本号或者调用对应内核API.或者链接windbg的时候查看如下图所示。19041便是构建号。

2022-12-18 21:17:43 1361 1

原创 操作系统内存管理-01分段

我们知道每一个程序会被赋予一个"虚拟内存",在进行实际对内存写入的时候会进行一次转物理地址转化在进行操作。下图在来自intel手册,这个转化分为两个部分:段地址转化线性地址(分段机制),线性地址通过页表转化物理地址(分页机制)。当然分页机制intel并没有做强制要求开启,但是分段逻辑被强制开启了。分页逻辑没有开启那么分段逻辑转化的线性地址就是物理地址。intel把内存划分很多个区域每个区域我们把它视为一个段,将虚拟内存的段转化为物理的段地址。每个段都有相关可读可写等属性,这些属性被放入一个叫。

2022-11-26 23:02:21 528

原创 windows 驱动与内核调试 学习5

驱动类似如饭店的后厨,而点菜的前台则是window的服务。由服务去进行驱动装载卸载等。本文学习如何自己写一个服务装载一个内核驱动。= =好懒直接贴出代码把。

2022-11-12 16:22:02 205

原创 Android hook方式抓包

在跟大佬学习的时候发现另一种抓包方式,采用fridahook socket 字节流即可,哪里还需要管什么证书绑定,双向认证?

2022-11-11 14:39:13 3108

原创 AOSP 8.1.0 编译一些心得

原版镜像,因为国内镜像发现在99%的时候下载网速挂了,如果遇到这类问题可以把镜像替换回。命令执行下面命令导出一个环境遍历在编译(ubuntu 版本过高导致问题)这是一个很乱的文章,几乎没有什么排序。个人不建议用代理下载而是直接用。下载repo然后进行 复制。快速浅克隆源码到本地。

2022-11-08 18:42:21 808

原创 windows 驱动与内核调试 学习4

参数,这个参数决定输出输入缓存流如何定于,一个常规的创建驱动设备代码。这个参数同时也要受限与。我们举例如下控制码生命。

2022-11-05 23:18:56 170

原创 windows 驱动与内核调试 学习3

这篇介绍基础的驱动读写,我们看如下一例子因为驱动运行在ring0所以,可以随意写入存在一定安全隐患。另外还有线程安全问题如多线程对于同一IO地址进行读写。为了解决相关问题Windows为对象提供一个flags字段可以增加io方式应对相关问题其中有两种方式分别为和,两则使用场景不同。适合在小数据传输中使用便捷,使用在大数据传输操作繁琐但效率高。可参阅如下文档上图你可以很明显看出两则差别。

2022-11-05 19:27:21 468

原创 windows 驱动与内核调试 学习2

我们知道我们驱动存在的意义往往是用于驱动硬件,而一个硬件读写大多数操作系统都是为文件io。既然是文件那么必然涉及到文件打开,读写等。我们看看在内核驱动该如何实现这些逻辑操作。当函数卸载的时候一定要记得删除驱动文件哦我们贴出完成相关代码我们利用工具将驱动文件进行加载然后我们在利用winobj查看我们注册驱动文件我们最后执行卸载操作。上面的注册驱动文件不能在ring3 进行文件读写,如果你期望ring3也可以驱动需要额外注册一个另一个映射名(符号链接 )相关代码如下同样我们加载驱动。

2022-10-29 17:32:48 914

原创 windows 驱动与内核调试 学习

一般驱动需要运行内核权限下运行(因为涉及硬件读取),比如Intel下的ring 0权限下。在windwos大量病毒和杀软为了特殊目的往往都是通过将自身升级为内核驱动方式进行运作。如果病毒程序首先进入ring 0理论上可以杀软将毫无作用。微软为了扼杀此类程序在windwo7 64位系统上会强制校验驱动程序签名,如果签名非微软认可将不会被加载。微软官方驱动学习指南。

2022-10-15 21:46:27 2212

原创 MASM 64汇编

微软宏编译器 MASM 有32位版本(ml)以及64版本(ml64)。

2022-09-11 13:52:52 1633 1

原创 Android 转场动画源码剖析

= =时隔一年 我竟为了一个UI效果再次学习Android,具体原因:UI设计一个转场动画中非共享元素也要执行动画。转场动画基础使用可参阅官方文档.本文主要描述Activity转场中Google的设计与实现(Fragment比较简单不做讨论)。我们看下本期的案例:具体效果首先我们需要知道需要执行退场动画,执行入场动画,两个Activity需要透传共享元素信息,但是Activity可能存在一个问题:跨进程.因此我们需要自己去设计一套流程在去参看google 源码会更好理解我们这里直接给出一个相关生命周期回

2022-09-10 22:38:29 1333

原创 X86-64 汇编学习1

指代因特尔32位处理器架构。X86-64:64位处理器架构:在64位下运行IA-32程序或者模式。

2022-09-04 23:36:06 689

MyDebugger.rar

MyDebugger.rar

2021-12-12

frida-12.8.20-py2.7-macosx-10.9-intel.egg

mac frida相关工具。如果你使用pip install frida-tools过慢时,请下载此资源,然后放入/Library/Python/2.7/site-packages/目录下

2020-04-05

腾讯2016安全比赛第一题

安全比赛第一题的题目apk.要求写出注册机.考点位于反编译后的so库.

2018-07-21

AIDL bindservice流程图

aidl binserive的流程图 内含png oom两个原文。http://blog.csdn.net/qfanmingyiq/article/details/78094417

2017-09-29

Android使用的libjpeg库文件

可以用于Android下使用libjpeg。内部有arm x86 x64的静态库和头文件

2017-08-29

电脑Gif制作器licecap126-install

电脑安装软件后移动窗口到某一区域点击record录制 然后按下stop键生成gif图

2016-10-20

Navicat Premium数据管理

Navicat Premium 可视化管理一些轻量级数据库如 mysql sqlite内含补丁

2016-09-07

仿QQ截图工具

一款仿照QQ截图的工具简单实用

2016-09-06

ColorCop屏幕取色器

获取屏幕某个点的RGB颜色值 无广告简洁 开发者必备

2016-09-05

fastjson 阿里巴巴json工具jar包

阿里巴巴的json解析生成 的jar包 如快速解析json生成javabean 或者javabean生成json

2016-09-02

fastjson 阿里巴巴的解析生成json工具

2016-09-01

GSON 包含源码和DOC

谷歌解析json工具

2016-09-01

json解析器

用于解析json数据 并且清晰的结构图

2016-08-30

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除