首页 > 其他分享 >android签名检测和绕过

android签名检测和绕过

时间:2023-09-27 17:35:32浏览次数:66  
标签:PackageParser PackageManagerService Package 获取 mSigningDetails 签名 android 绕过

PackageManagerService获取签名

正常APP中获取PackageInfo中的签名信息是通过Binder通讯向PackageManagerService发送TRANSACTION_getPackageInfo请求,同时设置请求的参数的flag为GET_SIGNATURES。当PackageManagerService判断是TRANSACTION_getPackageInfo请求后会去调用PackageManagerService.getPackageInfo

PackageManagerService.getPackageInfo 会进一步调用PackageManagerService.getPackageInfoInternal

PackageManagerService.getPackageInfoInternal会进行一些权限校验和匹配,最后调用PackageManagerService.generatePackageInfo

PackageManagerService.generatePackageInfo获取到包名对应的PackageParser.Package,然后调用PackageParser.generatePackageInfo

PackageParser.generatePackageInfo就是取出PackageParser.Package对象中的成员mSigningDetails.pastsigningcertificates[0] / mSigningDetails.signatures的值,此值就是apk对应的签名信息。

而每个apk包对应的PackageParser.Package保存在PackageManagerServicemPackages成员中。这是一个map表,键是包名,值就是PackageParser.Package,而apk的签名信息就保存在PackageParser.Package对象中的成员mSigningDetails.pastsigningcertificates[0] / mSigningDetails.signatures中。在apk安装的时候,会将解析的apk签名保存(put)在mPackages中。

总结:APK进程中获取自身签名实际就是获取PackageManagerServicemPackages成员中包名对应的PackageParser.Package.mSigningDetails.pastsigningcertificates[0] / mSigningDetails.signatures

PackageManagerService获取签名绕过

  1. APP进程直接通过getApplicationContext().getPackageManager().getPackageInfo(packagename, PackageManager.GET_SIGNATURES)获取签名信息
  2. APP进程利用Binder通讯直接向PackageManagerService发送TRANSACTION_getPackageInfo请求获取签名信息
  3. 将1和2java层的操作拿到native层利用反射执行同样的操作。

以上获取签名的方式本质上都是获取PackageManagerServicemPackages成员中包名对应的PackageParser.Package.mSigningDetails.pastsigningcertificates[0] / mSigningDetails.signatures,只要在整个通讯的中间的任意一个位置进行hook就可以将签名信息进行替换,获取直接修改PackageManagerServicemPackages成员中包名对应的PackageParser.Package.mSigningDetails.pastsigningcertificates[0] / mSigningDetails.signatures值为指定签名就可以绕过上面的签名检测。

标签:PackageParser,PackageManagerService,Package,获取,mSigningDetails,签名,android,绕过
From: https://www.cnblogs.com/revercc/p/17733215.html

相关文章

  • Android 基于共享内存跨进程实时传输大量图片
     aidl传输文件有大小1M限制,单次传输不适合传递大数据,可以使用aidl传递共享内存引用ParcelFileDescriptor方式传递图片信息。具体实现如下一、service端1.aidl文件IIpcService.aidl定义,这里主要用到pfd参数interfaceIIpcService{/***Demonstratessomebasictypes......
  • Android上层WatchDog学习笔记_2
    一、简述1.了解WatchDog的原理,可以更好的理解系统服务的运行机制。二、WatchDog实现1.代码实现位置//frameworks/base/services/core/java/com/android/server/Watchdog.javapublicclassWatchdogextendsThread{...}可见Watchdog是一个线程。2.WatchDo......
  • 手机直播源码,Android 简单的弹框
    手机直播源码,Android简单的弹框   privatestaticString[]items=newString[]{      "拍照",      "从相册中选择",  }; AlertDialog.Builderbuilder=newAlertDialog.Builder(MainActivity.this)        .setTitle(......
  • 直播app开发搭建,Android studio 图片压缩
    直播app开发搭建,Androidstudio图片压缩获取图片目录 Filefile=Environment.getExternalStorageDirectory();//获取根路径storage/emulated/0Stringpath1=file.getPath()+"/Pictures/1655215651628.jpg";//Pictures文件夹下面的1655215651628.jpg图片名 ​例   ......
  • Android Sample 之 Tab 和 Navigation
    Sample中,Tab在上,Navigation在下,后者有图标。不理解为什么用不同的名称。之前没有区分,混淆模糊。 搜索发现有人在stackoverflow问。有人答曰:区别在于 Tab是同一主题,而 Navigation可用于不相关的主题。 Tabsareconsideredtoberelatedtoeachotherwhere......
  • 【Android面试】2023最新面试专题二:ArrayList篇
    1.4 请说一说ArrayList如何保证线程安全,除了加关键字的方式?这道题想考察什么?1、ArrayList的底层原理?考察的知识点ArrayList底层的源码的理解考生如何回答ArrayList如何保证线程安全继承Arraylist,然后重写或按需求编写自己的方法,这些方法要写成synchronized,在这些synchronized的......
  • 2023年最新京东app端sign签名算法与cipher加解密逆向分析(2023-09-26)
    前言:  本文仅供学习交流,只提供关键思路不会给出完整代码,严禁用于非法用途,若有侵权请联系我删除!技术交流合作请私信!一.工具的选择(抓包工具的选择,是门学问)用到工具如下:1、安卓手机一台,系统版本:android6.01;型号:小米MI4LTE  之所以要选择android6手机,原理如下:  ......
  • Android动画-1——Android三种动画详解
    一、前言1.Android的三种动画,即:ViewAnimation(视图动画)DrawableAnimation(帧动画)PropertyAnimation(属性动画) 二、ViewAnimation(视图动画)1.View动画的概述及种类视图动画的作用对象是View,支持四种动画效果,分别是平移、缩放、旋转、透明度。譬如,我们可以对TextView设......
  • android adb调试
    1、无线方式一cd/dD:\Android\sdk\platform-toolstcpip5555(需手机线下连接执行)adbconnect192.168.0.1402、无线方式二cd/dD:\Android\sdk\platform-toolsadbpair192.168.0.140:42319adbconnect192.168.0.140:40717 ......
  • Android Flutter 混合开发高仿大厂App
    自上篇 Flutter10天高仿大厂App及小技巧积累总结 的续篇,这次更是干货满满。这篇文章将概述 Android组件化的架构搭建 及 Flutter 和 Android 如何混合开发 (整个App只有首页是用原生Android完成,其他页面都是引入之前的做好的Flutter页面) ,主宿主程序由Android搭建,采用......