Android 内核
文章平均质量分 82
zhgeliang
成功不必在我,而功力比不唐捐!
展开
-
抛弃硬件抽象层 (HAL)
更新对确保安全性至关重要,但对于设备制造商来说,更新可能难以实施,并且成本高昂。Treble 项目通过将底层供应商实现从 Android 内核框架中剥离出来,使更新变得更简单。这种模块化的设计允许分别独立更新平台和供应商提供的组件。让更新变得更轻松、更快速已经很棒,然而,Treble 加强模块化设计还有一个目的:提高安全性。隔离 HAL硬件抽象层 (HAL) 在与设备无关的代码和特定于设备的硬件实现之间提供了一个接口。HAL 通常打包成共享库,直接加载到需要与硬件交互的进程中。安全边界在进程级实施。转载 2022-05-29 17:26:46 · 342 阅读 · 0 评论 -
进击的Android注入术(3)
继续在前 《一》、 《二》、 《三》里已经把注入的技术介绍完了,这章开始说注入之后需要做的事情。如果对注入技术已经比较熟悉了,那么可以直接看本章,否则建议先把前三章阅读一遍会比较好。注入之后完成了注入,那只是万里长征的第一步。众所周知,Android的应用进程,都是由Zygote孵化的子进程,每个进程都运行在独立的JVM中。通过ptrace的注入方式,我们得到了在目标进程执行代码的机会,但距离修改JVM的内容,还差那么一点点。我们重新看一下《二》中被注入SO的关键代码:void Main();转载 2021-09-02 10:51:32 · 193 阅读 · 0 评论 -
进击的Android注入术(2)
继续在《二》详细介绍了通过ptrace实现注入的技术方案,在这个章节里,我再介绍一种Android上特有的注入技术,我命其名为——Component Injection。顾名思义,这种方式是跟Android的组件相关的,详细见下面叙述。Component Injection原理在android的开发者文档里,对android:process的描述是这样的:android:processThe name of a process where all components of the appl转载 2021-09-02 10:48:00 · 152 阅读 · 0 评论 -
进击的Android注入术
写在前面这个系列本来是在公司的一个分享,内容比较多,所以就把这个PPT重新组织整理成博客,希望对大家学习有所帮助。我会先以一个”短信拦截“作为例子,抛出问题,并提出了一种基于”注入“的技术方案达到提高拦截优先级,接着再重点讲解注入的技术细节。最后,我会跟大家分享一个我业余时间开发注入框架——AIM(Android IPC Manager)。当然了,这个框架跟目前的XPosed、CydiaStructe的侧重点不太一样。短信拦截场景如果某款安全支付类应用和一个未知木马安装在同一台手机,木马会截获转载 2021-09-02 10:45:21 · 426 阅读 · 0 评论 -
selinux介绍
selinux相关命令// 0--代表Permissive// 1--代表Enforcingsetenforce 0// 查看selinux开关状态getenforce// 查看进程的sContextps -Z// 查看文件权限ls -Z如果设置成permissive mode 后问题依旧,说明还有其他的权限问题约束,否则就是SELinux 方面的问题抓取SELinux Logadb shell dmesg抓kernel log,使用命令:adb shell "cat /转载 2021-08-23 15:59:17 · 612 阅读 · 0 评论 -
Android aidl项目中服务端与客户端aidl文件不一致引起的问题
前几天和林工联调的时候发现远程调用我的aidl接口时候,有的接口总是调用不正确,本来是想调用我的A接口,却实际调用出来却显示调用的我B接口。仔细检查了,没问题啊,不可能会把名称写错的啊。Aidl文件在最开始是固定的,但是接口在后面有增有减,就导致了我这边的aidl接口与他的aidl接口数量和顺序上都有差异了。后面怀疑是aidl文件引起的,后面让他传他的demo给我看看,没问题,仔细看了还是aidl文件有些差异,而且只是顺序不一样了。修改顺序后,效果就出来了。就是顺序引起的错误。在网上找了一篇文章贴下来:转载 2021-06-24 15:54:12 · 760 阅读 · 0 评论 -
Bundle.setClassLoader()方法解析 BootClassLoader PathClassLoader
bundle经常会用,但是对setClassLoader()方法不是特别的理解,上网查了下也有很多不是很明白的同学,在此借用看到的文章记录一下原因。在开发中可能有时候会遇到用Bundle传递一个Parcelable对象时出现ClassNotFoundException异常,而且这个异常有时候会出现有时候又不会出现,比如你在同一个进程的Activity间传递数据时就不会出现,但是你通过Messenger携带bundle进行进程通信时就会出现,具体是什么原因?我先总体说下出现这个问题的原因和解决方.转载 2021-06-15 15:50:56 · 765 阅读 · 0 评论 -
android message 传递对象,Android基于Message的进程间通信之Messenger使用及解析
1、Messenger 简介说到Android进程间通信,大家肯定能想到的是编写aidl文件,然后通过aapt生成的类方便的完成服务端,以及客户端代码的编写。如果你对这个过程不熟悉,可以查看Android aidl Binder框架浅析;当然今天要说的通信方式肯定不是通过编写aidl文件的方式,那么有请今天的主角:Messenger。ok,这是什么样的一个类呢?我们看下注释This allows for the implementation of message-based communicat转载 2021-06-10 18:23:49 · 746 阅读 · 0 评论 -
Android编译时注解框架5-语法讲解
概述本章内容主要对APT一些语法进行简单讲解。apt的学习资料真的太少了,我的学习方法基本上只能通过看开源库的源码猜、看源码注释猜、自己运行着猜……这里对猜对的结果进行一个总结,让后来者可以更快的上手。第一次写这种类型的博客,总结的可能有些分散,建议结合开源库源码学习。自定义注解相关定义注解格式: public @interface 注解名 {定义体}Annotation里面的参数该设定:第一,只能用public或默认(default)这两个访问权修饰.例如,String v转载 2021-05-19 15:44:24 · 103 阅读 · 0 评论 -
Android编译时注解框架4-爬坑
概述因为有关APT的资料过少,又因为是Java Moudle +Android Moudle的使用方式,在项目编写过程中,会有一些匪夷所思的奇怪问题~入门阶段真的是步履维艰。这篇博客就是编写《Android编译时注解框架》系列中,将所遇到的一些坑列举出来,并给出一些绕过坑的方法。(注意哦~是绕过,坑还在,没有填~因为不知道这坑咋来的……)随时踩坑,随时更新~坑1:无法引入javax包下的类库编写编译时注解框架时,需要用到javax包下的一些类库,但是引入包时却提示没有。##.转载 2021-05-19 15:43:11 · 151 阅读 · 0 评论 -
Android编译时注解框架3-Run Project:OnceClick
概述因为编译时注解框架前期项目搭建部分需要较多的图文讲解,所以前一章《Android编译时注解框架-Run Demo》只是实现了最简单应用,或许注解信息,并没有生成代码。本章将以生成代码为重点进行一个案例讲解。框架名称:OnceClick框架功能:功能就是它的名字:在一定时间内,按钮点击事件只能执行一次。未到指定时间,不执行点击事件。框架背景:从用户的角度,在使用应用的过程中,因为低端机性能原因、Web页面性能问题,导致点击按钮后程序卡顿,按钮事件延迟执行。造成的后果就是,卡顿后,继转载 2021-05-19 15:40:46 · 122 阅读 · 0 评论 -
Android编译时注解框架系列2-Run Demo
概述先讲一下编写《Android编译时注解框架》的初衷吧,APT其实并不难,可以说是简单且高效,但关于APT的资料却并不多,甚至很多人都不知道这么一个技术。国内关于APT的博客屈指可数,唯二找到的几篇初级讲解一个是用Eclipse写得,一个是用AndroidStudio加Intellij。刚开始着实踩了不少坑,但事实是,APT完全可以用AndroidStudio单独实现。光是项目搭建就如此麻烦了,更别提语法讲解了。资料匮乏无疑提高了APT的入门门槛。正因为如此,这个系列博客就这样诞生啦~现在就教你用转载 2021-05-19 15:38:18 · 146 阅读 · 0 评论 -
Android编译时注解框架系列1-什么是编译时注解
概述Android编译时注解框架从入门到项目实践。该系列将通过5篇博客一步步教你打造一个属于自己的编译时注解框架,并在之后开源出基于APT的编译时注解框架。提到注解,普遍都会有两种态度:黑科技、低性能。而使用注解往往可以实现用非常少的代码作出匪夷所思的事情,比如这些框架:ButterKnife、Retrofit。但一直被人诟病的是,运行时注解会因为java反射而引起较为严重的性能问题…今天我们要讲的是,不会对性能有任何影响的黑科技:编译时注解。也有人叫它代码生成,其实他们还是有些区别的,转载 2021-05-19 15:35:06 · 95 阅读 · 0 评论 -
Android 的一些功能开关配置
一些常用的开关Config.xml路径指向位置为framework/base/core/res/res/valuse/configs.xml最近因为要移除通话相关的模块。除了改改字符串这些的,有些东西用一些value配置了。所以如果需要移除通话,短信这块的UI显示还有功能相关的。找了找几个简单的做了一个汇总 <string-array translatable="false" name="networkAttributes"> <item>"wi...转载 2021-05-19 11:19:09 · 1007 阅读 · 0 评论 -
【反编译系列】反编译so文件(IDA_Pro)
概述 安卓应用程序的开发语言是java,但是由于java层的代码很容易被反编译,而反编译c/c++程序的难度比较大,所以现在很多安卓应用程序的核心部分都使用NDK进行开发。使用NDK开发能够编译c/c++程序,最终生成so文件。而so文件是一个二进制文件,我们是无法直接分析so文件的,所以这里需要用到一个反编译工具IDA Pro。IDA Pro能够对so文件进行反汇编,从而将二进制代码转化为汇编语言,利用IDA Pro神奇的F5功能还能将汇编语言反编译成c/c++程序。--摘自《安卓逆向学习笔记转载 2021-04-29 10:51:22 · 14324 阅读 · 0 评论 -
URI的格式
scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]协议:[//[用户名:密码@]域名[:端口]][/]路径[?参数][#标记]http://write.blog.csdn.nethttp://write.blog.csdn.net:80/http://write.blog.csdn.net:80/mdeditorhttp://write.blog.csdn.net:80/mdeditor?a=1http://write原创 2021-04-19 18:09:56 · 631 阅读 · 0 评论 -
Android系统权限和root权限
Android权限说明Android系统是运行在Linux内核上的,Android与Linux分别有自己的一套严格的安全及权限机制,Android系统权限相关的内容,(一)linux文件系统上的权限-rwxr-x--x system system 4156 2012-06-30 16:12 test.apk.代表的是相应的用户/用户组及其他人对此文件的访转载 2017-12-14 17:33:52 · 8430 阅读 · 0 评论 -
Android 8.0 的开机广播 和 IntentService
在 Android 8.0 的后台处理上碰到了一个意料之外的 bug。Stack Overflow 上有人提了一个关于ACTION_BOOT_COMPLETED的问题。虽然这个隐式广播在 8.0 仍然可用,却受到了很多限制。当收到这个广播时 Android 会判定你的 App 是后台应用,因此你不能像以前一样启动IntentService。所以,这里有几个替代方案可以选择:方案1:startFor...转载 2018-04-11 15:06:26 · 4845 阅读 · 1 评论 -
Android 8.0后台执行限制
Android O对应用在后台运行时可以执行的操作施加了限制,称为后台执行限制(Background Execution Limits),这可以大大减少应用的内存使用和耗电量,提高用户体验。后台执行限制分为两个部分:后台服务限制(Background Service Limitations)、广播限制(BroadcastLimitations)。后台服务限制如何才算是后台应用?除了下面情况外都是后...转载 2018-04-11 15:10:46 · 940 阅读 · 0 评论 -
Android 8.0 新特性
前言Android 8.0 是目前 Android 最新的智能手机操作系统,2017年3月21日 Google 为开发者推出了新的 Android O 首个开发者预览版,2017 Google I/O 开发者大会上发布了第二个Android O开发者预览。2017年8月22日,谷歌正式发布了Android 8.0的正式版,其正式名称为:Android Oreo(奥利奥)。在最近的 Android ...转载 2018-04-11 15:13:40 · 214 阅读 · 0 评论 -
Android广播发送接收机制
1 广播类型 从广播的注册方式来分,分为以下2种:静态注册:通过<receiver></receiver>的形式在AndroidManifest.xml中注册的广播;动态注册:通过context. registerReceiver在程序中显示注册的广播; 上面静态广播和动态广播比较明显的3个区别:(1)静态广播在进程没有运行的时候,也可以收到,这时...转载 2018-05-29 10:52:18 · 11151 阅读 · 1 评论 -
解决Failure [INSTALL_FAILED_TEST_ONLY]
文章部分出处,感兴趣的朋友请移步:http://blog.csdn.net/shift_wwx/article/details/78468397平台版本是android 7.0,在adb install *.apk 会提示下面的错误: Failure [INSTALL_FAILED_TEST_ONLY]方法1:修改AndroidManifest.xml 中android:testOnly="tru...转载 2018-07-09 17:19:40 · 1334 阅读 · 0 评论 -
什么是Accessibility(辅助功能)
考虑到部分用户不能很好地使用Android设备,比如由于视力、身体、年龄方面的限制,造成阅读内容、触控操作、声音信息等方面的获取困难,Android提供了Accessibility特性和服务帮助用户更好地使用Android设备。依据Android官方的详细介绍,开发者在增加视图属性如contentDescription等内容后,可以在不修改原有代码逻辑的情况下使用户体验得到优化,如预装在Andro...转载 2018-06-27 17:30:31 · 21046 阅读 · 2 评论 -
Android8.0无法接收隐式广播消息
App里有一个自己在Manifest文件里面注册的广播接收器(Receiver),到Android8.0的机器上调试的时候却接收不到消息,一番搜索和研究之后,才发现Android8.0已经对隐式广播做了限制。版本区别对于targetSdkVersion 在26或者以上的App,在Manifest里面注册的Receiver已经受到限制,而用Java代码动态注册的Receiver则不受影响。...转载 2018-10-19 16:13:09 · 840 阅读 · 0 评论 -
在Android8.0上突破隐式广播的限制
Android O对隐式广播进行了限制, 其限制链接说明: https://developer.android.com/about/versions/oreo/background上面所说即:若App的TargetSDK达到了26, 我们正常静态注册的广播就没有用了。能用的仅有以下豁免的Broadcast, 包括我们自己正常发广播,如果不指定包名, 静态注册的也是收不到的。PS:动态注册是...转载 2018-10-19 16:14:11 · 3538 阅读 · 0 评论 -
Android7.0 init进程源码分析
Android7.0 init进程源码分析原创 2016年08月07日 20:07:26标签:android/源码/6977转载 2017-11-15 15:45:19 · 259 阅读 · 0 评论