逆向学习笔记: APK过签名包java校验(一)
什么是签名包校验?
签名包校验就是重新打包apk以后,签名会发生变化。原始apk安装到手机上可以正常打开,通过androidkiller重新打包成apk以后,无法打开。
使用到的apk:
链接:https://pan.baidu.com/s/1IOqySzBazEgqpejzIzFDDA
提取码:z6tt
--来自百度网盘超级会员V1的分享
如何破解java层签名包校验?
Step 1: 搜索关键字
一般来说定位方法是搜索以下关键字:
1. signatures (结果最多)
2. getPackageManager (结果较多)
3.getPackageInfo (结果较多)
4.killProcess (最少)
Step 2:插入print trace
通过比较结果,kill process最少,可以逐个查看逻辑,当然最简单的方法是插入print trace
new-instance v0, Ljava/lang/Exception;
const-string v1, "print trace"
invoke-direct {v0, v1}, Ljava/lang/Exception;-><init>(Ljava/lang/String;)V
invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V
找到每个kill process所处的函数,在函数定义的.prologue后面添加如print trace代码,比较多,耐心的都添加上。
Step 3: 重新打包apk,在手机上运行查看apk日志
在手机上apk如约崩溃,ddms上打印的log,找到最后一个print trace, 可以看到, 最后调用killprocess的是shuqi.app.ShuqiApplication$3.handleToken.
Step 4: 分析该函数逻辑
从函数中我们看到了其他要搜索的内容,因此佐证保护逻辑一定在这个函数中。
invoke-virtual {v1}, Landroid/content/Context;->getPackageName()Ljava/lang/String;
.invoke-virtual {v0}, Landroid/content/Context;->getPackageManager()Landroid/content/pm/PackageManager;
invoke-virtual {v0, v1, v2}, Landroid/content/pm/PackageManager;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo
iget-object v0, v0, Landroid/content/pm/PackageInfo;->signatures:[Landroid/content/pm/Signature;
smali中的判断主要有以下几种:
if-eq, if-ne,if-lt, if-ge,if-gt... 我就不一一解释了,基本看到了就知道啥意思,g是great, l是less
"if-eq vA, vB, :cond_" 如果vA等于vB则跳转到:cond_
"if-ne vA, vB, :cond_" 如果vA不等于vB则跳转到:cond_
"if-lt vA, vB, :cond_" 如果vA小于vB则跳转到:cond_
"if-ge vA, vB, :cond_" 如果vA大于等于vB则跳转到:cond_
"if-gt vA, vB, :cond_" 如果vA大于vB则跳转到:cond_
"if-le vA, vB, :cond_" 如果vA小于等于vB则跳转到:cond_
"if-eqz vA, :cond_" 如果vA等于0则跳转到:cond_
"if-nez vA, :cond_" 如果vA不等于0则跳转到:cond_
"if-ltz vA, :cond_" 如果vA小于0则跳转到:cond_
"if-gez vA, :cond_" 如果vA大于等于0则跳转到:cond_
"if-gtz vA, :cond_" 如果vA大于0则跳转到:cond_
"if-lez vA, :cond_" 如果vA小于等于0则跳转到:cond_
作者:WilburLi
链接:https://www.jianshu.com/p/2f2fa49c1f53
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
killProcess前面有一个判断,现在v1中写了一个值,这个值就是签名的值,比较v1 与v0,如果相同跳到cond_0. 如果不同就继续执行到killprocess。
Step 5:破解逻辑
基于Step 4的分析,只要将eq改成ne就行,这样就不会跳到kill了,因为我们肯定会改变签名。
Step 6: 大功告成,感谢!
重新打包,安装,程序并没有因为重签名崩溃。完结,撒花!
逆向学习笔记: APK过签名包java校验(一)相关推荐
- 安卓逆向学习笔记(一)
这些都是通过学长给予,以及网络上的资源来做的个人理解.总结,大牛们不要喷. 零基础小萌新在角落瑟瑟发抖的认真记笔记. 安卓逆向学习笔记(一) 写一个安卓程序(附上原帖链接教我兄弟学Android逆向0 ...
- 安卓逆向学习笔记:native层开发、分析和调试基础
安卓逆向学习笔记:native层开发.分析和调试基础 本笔记主要是自己看,所以如果有看不懂的地方也请多多包涵,这一篇的笔记主要是<Android应用安全防护和逆向分析>的部分内容. 一 A ...
- MongoDB学习笔记(四)使用Java进行实时监控与数据收集(空间使用量、连接数)
目录: MongoDB学习笔记(一)环境搭建与常用操作 MongoDB学习笔记(二)使用Java操作MongoDB MongoDB学习笔记(三)使用Spring Data操作MongoDB Mongo ...
- Java程序设计当中包的使用_【学习笔记】 唐大仕—Java程序设计 第4讲 类、包和接口之4.2 类的继承...
[学习笔记] 唐大仕-Java程序设计 第4讲 类.包和接口之4.2 类的继承 super的使用 1.使用super访问父类的域和方法 注意:正是由于继承,使用this可以访问父类的域和方法.但是有时 ...
- 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)
写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持) 参考文章: (1)写给大忙人的ELK最新版6.2.4学习笔记-Logstash ...
- JS逆向学习笔记 - 持续更新中
JS逆向学习笔记 寻找深圳爬虫工作,微信:cjh-18888 文章目录 JS逆向学习笔记 一. JS Hook 1. JS HOOK 原理和作用 原理:替换原来的方法. (好像写了句废话) 作用: 可 ...
- hadoop学习笔记(八):Java HDFS API
hadoop学习笔记(八):Java HDFS API 阅读目录 一.使用HDFS FileSystem详解 回到顶部 一.使用HDFS FileSystem详解 HDFS依赖的第三方包: hadoo ...
- 安卓逆向学习及APK抓包(二)--Google Pixel一代手机的ROOT刷入面具
注意:本文仅作参考勿跟操作,root需谨慎,本次测试用的N手Pixel,因参考本文将真机刷成板砖造成的损失与本人无关 1 Google Pixel介绍 1.1手机 google Pixel 在手机选择 ...
- java学习笔记_2020全网最全Java面试题,学习笔记!
深耕IT行业多年,我们发现,对于一个程序员而言,能去到一线互联网公司,会给我们以后的发展带来多大的影响. 很多人想说,这个我也知道,但是进大厂实在是太难了,简历投出去基本石沉大海,更不要说面试邀约了. ...
最新文章
- eBPF内核探测中将任意系统调用转换成事件
- 电脑python安装库_Python安装第三方库的3种方法 -电脑资料
- [WCF] Restful 自定义宿主
- 修改haproxy配置文件
- Python 技术篇-使用time库获取秒级时间戳、毫秒级时间戳实例演示
- redis中的五种基本的数据结构
- C语言实现循环链表Circularly Linked List(附完整源码)
- 解决2次查询User的问题(ThreadLocal)
- html5权威指南 预读,《HTML5权威指南》
- 多套 企业/工厂/超市/仓库库存管理系统源码 工具软件程序源代码
- ApacheCN 翻译/校对/笔记整理活动进度公告 2019.10.4
- 中小型企业基于大数据技术的项目实践
- windows10 C:\windows\system32\winlogon.exe自动关机
- 用户行为分析——AARRR 模型 和RARRA模型
- 上海新汇通: 让冷链运输更可控
- beeline安装_Beeline使用
- 选取一段代码块一下子都回退或前进空一格的快捷键
- 1044: 顺序栈基本操作的实现
- JS逆向 | ob混淆一键还原工具
- 自动驾驶辅助系统性能评估工具MXeval4.1版本更新快讯