Apk 签名验证

Apk 签名验证当app进行反编译后修改,再回编译,若出现闪退的情况时,则有可能是由于程序本身已存在签名验证,才会出现闪退,今天分享如何解决因签名验证而出现的闪退现象。v:13140310004q:32519015161阅读签名验证源码1.打开文件2.分析Java层,在调用init这个方法里面,是进行按钮以及其他控件的初始化3.接下来是一个注册函数,判断用户名和密码是否相等,从而弹出不同的提示4.LoginActivity类继承了BaseActivity,先分析BaseActivity这个类5.分析onC

大家好,又见面了,我是你们的朋友全栈君。

当app进行反编译后修改,再回编译,若出现闪退的情况时,则有可能是由于程序本身已存在签名验证,才会出现闪退,今天分享如何解决因签名验证而出现的闪退现象。
v:13140310004
q:3251901516

1 阅读签名验证源码
1.打开文件在这里插入图片描述
2.分析Java层,在调用init这个方法里面,是进行按钮以及其他控件的初始化在这里插入图片描述
3.接下来是一个注册函数,判断用户名和密码是否相等,从而弹出不同的提示在这里插入图片描述
4.LoginActivity类继承了BaseActivity,先分析BaseActivity这个类在这里插入图片描述
5.分析onCreate方法里面的getSignature方法,该方法需要传入参数包名,根据包名获取签名信息,做出判断在这里插入图片描述
6.完成上述操作后,开始获取签名信息在这里插入图片描述
7.接着分析getSignature方法,首先,获取一个包管理在这里插入图片描述
8.获取包管理后,将包名以及其他两个参数传进来在这里插入图片描述
9.接下来,获取当前签名信息的途径,就是获取包管理等的操作
在这里插入图片描述
10.通过字符串定位,移动到这个类在这里插入图片描述
11.找到类后,开始获取签名在这里插入图片描述
12.获取签名时,会发现下面还有一个isOwnapp方法,进行一个是否相等的判断在这里插入图片描述
13.判断过后,来到这个类在这里插入图片描述
14.调用isOwnApp方法,对返回值进行判断,条件满足就killProcess,杀死进程在这里插入图片描述
2 实战分析及过掉签名校验
以霸哥磁力为例。
1.安装程序霸哥磁力,直接拖进雷电模拟器,打开程序在这里插入图片描述
2.打开androidkiller,对程序进行重新签名在这里插入图片描述
3.重新签名过后,再次拖入,点击执行在这里插入图片描述
4.将原有程序卸载,安装签名后的程序在这里插入图片描述
5.安装完成,运行程序,提示:很抱歉,“霸哥磁力搜索”已停止运行在这里插入图片描述
6.这里继续分析,首先将原版程序拖到androidkiller中进行反编译在这里插入图片描述
7.反编译完成后,判断程序崩溃在打开程序时,说明检测签名校验的逻辑会在这种执行时间比较早的地方,先从启动界面开始查看在这里插入图片描述
8.找到Oncreate方法,直接从Oncreate方法开始分析,然后点击咖啡图标,查看Java代码在这里插入图片描述
9.找到Oncreate方法和onclick方法在这里插入图片描述
10.一开始调用了函数:qian在这里插入图片描述
11.点击该函数,获取包名管理,再进行签名,然后hash在这里插入图片描述
12.如果这里不等于,会出现一个弹窗。继续分析,发现这里只是进行简单的判断就返回了,所以并不会杀死程序在这里插入图片描述
13.继续查看onclick函数,发现在它下面还存在一个方法,是将bug函数返回值给eee,判断是否相等,然后弹窗在这里插入图片描述
14.分析这个bug,在oncCreate里面,只有一个qian方法,然后是点击该方法,最后是bug,继续点击进来,发现是native,上面是so库的加载在这里插入图片描述
15.解压文件,将so文件拖入IDA,发现没有JNI_onload,只有以Java_开头的一个文件在这里插入图片描述
16.双击进入,简单分析。先压栈,然后move传参,然后调用getSignHashCode在这里插入图片描述
17.点击进入,发现签名三兄弟在这里插入图片描述
18.继续往下分析sinatureHashcode,从字符串中可以看出来,这些一块一块函数的调用,按快捷键F5,查看伪代码,查看具体参数在这里插入图片描述
19.回到上一层,只传了一个R0,那么这里就是env在这里插入图片描述
20.第二个参数没有被static修饰,那就是obj
在这里插入图片描述
21.将参数类型分别修改为JNIEnv *a1,jobject a2在这里插入图片描述
22.隐藏类型在这里插入图片描述
23.调用各种方法,若返回值与下图不相符,则直接exit退出在这里插入图片描述
总结:通过一个案例,从java到so层,先分析动态注册和静态分册,再找到逻辑代码,找有签名三兄弟的函数,找到后分析这个函数的引用,进而可以采取手段过掉签名验证。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134306.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基于近邻的协同过滤算法「建议收藏」

    基于近邻的协同过滤算法「建议收藏」这节课我们来学习K近邻在推荐系统中的应用,你将完成本课程的第一个实战项目:基于KNN的电影推荐系统!为了使你能够顺利地完成实战内容,我们先了解一下推荐系统中的基础知识。基于近邻用户的协同过滤假定有一个场景:某个周日的下午,你感觉很无聊,然后从电脑上打开了一个视频网站,想看下最近有什么好看的电影。然而你发现网站上的热门电影基本都看过,其他的电影又太多,不知道该看什么。想使用搜索框去查一下,但是又不知道该搜什么关键词,这个时候你的内心很焦灼,总不能挨个去尝试吧,那时间成本也太大了…仔细想想还是有办法的,那

    2022年6月30日
  • 51单片机实现流水灯

    51单片机实现流水灯文章目录51单片机实现流水灯一、点亮第一个LED灯二、流水灯1.总线型控制2.延时函数3._crol_函数使用4.实现流水灯51单片机实现流水灯以下是本篇文章正文内容,下面案例可供参考一、点亮第一个LED灯#include<reg52.h>#defineuintunsignedint//简化定义#defineucharunsignedchar//同上sbitD1=P2^1;voidmain(){ D1=0;}代码中D1代表着位定义,相.

    2022年5月9日
  • ASP.NET的命名空间

    ASP.NET的命名空间ASP.NET的命名空间   命名空间(namespace)   ASP.NET中的各种语言使用的一种代码组织的形式。   通过命名空间来分类,区别不同的代码功能,也是ASP.NET中所有类的完全名称的一部分。   命名空间不过是数据类型的一种组合方式,但是,命名空间中所有数据类型的名称,都会自动加上该命名空间的名字作为前缀。 命名空间还可以相互嵌套

    2022年7月11日
  • python机器视觉opencv_opencv轻松入门:面向python电子版

    python机器视觉opencv_opencv轻松入门:面向python电子版以下是快速学完OpenCV+python计算机视觉图像处理的个人总结。任何知识或者学科都不可能快速学会,一口吃不成大胖子,想要学会,只能一点一点积累。不积跬步无以至千里,不敲千遍无可能懂理。想要学会,不能光看,须知熟才能生巧,一定要多敲!一定要多敲!一定要多敲!视频链接请点击这里代码连接请点击这里,提取码:iukw看完视频一定要手动敲,不然最后只是眼睛会了,脑子和手却不会。以下是Windows、Linux、Mac深度学习环境搭建详细教程:1、windows搭建深度学习环境详细教程2、L

    2022年9月3日
  • 本草纲目pdf彩图版下载_本草纲目彩色图谱下载|本草纲目彩色图集(精编珍藏版) PDF电子版 – 天天游戏吧…

    本草纲目pdf彩图版下载_本草纲目彩色图谱下载|本草纲目彩色图集(精编珍藏版) PDF电子版 – 天天游戏吧…本草纲目彩色图集以诸种版本中最完整的金陵本为蓝本,严格选择最常见、最实用的药物加以介绍,从实用角度讲解,并配以彩色图谱,避免使用艰涩难懂的文言文,而是把它译为通俗易懂的现代文,所选取的多是在生活中较为常见,贴近生活、实用性强的内容,是生活中必备的浓缩精华读本,不仅是医务工作者专业学习参考的医书,更是人们生活中必备的自我保健、自我医疗的家用手册。内容简介《本草纲目》是我国古代医学宝库中珍贵的科学遗产…

    2022年7月15日
  • POJ 1252 Euro Efficiency

    POJ 1252 Euro Efficiency

    2022年1月8日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号