什么是签名包校验?

签名包校验就是重新打包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校验(一)相关推荐

  1. 安卓逆向学习笔记(一)

    这些都是通过学长给予,以及网络上的资源来做的个人理解.总结,大牛们不要喷. 零基础小萌新在角落瑟瑟发抖的认真记笔记. 安卓逆向学习笔记(一) 写一个安卓程序(附上原帖链接教我兄弟学Android逆向0 ...

  2. 安卓逆向学习笔记:native层开发、分析和调试基础

    安卓逆向学习笔记:native层开发.分析和调试基础 本笔记主要是自己看,所以如果有看不懂的地方也请多多包涵,这一篇的笔记主要是<Android应用安全防护和逆向分析>的部分内容. 一 A ...

  3. MongoDB学习笔记(四)使用Java进行实时监控与数据收集(空间使用量、连接数)

    目录: MongoDB学习笔记(一)环境搭建与常用操作 MongoDB学习笔记(二)使用Java操作MongoDB MongoDB学习笔记(三)使用Spring Data操作MongoDB Mongo ...

  4. Java程序设计当中包的使用_【学习笔记】 唐大仕—Java程序设计 第4讲 类、包和接口之4.2 类的继承...

    [学习笔记] 唐大仕-Java程序设计 第4讲 类.包和接口之4.2 类的继承 super的使用 1.使用super访问父类的域和方法 注意:正是由于继承,使用this可以访问父类的域和方法.但是有时 ...

  5. 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)

    写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持) 参考文章: (1)写给大忙人的ELK最新版6.2.4学习笔记-Logstash ...

  6. JS逆向学习笔记 - 持续更新中

    JS逆向学习笔记 寻找深圳爬虫工作,微信:cjh-18888 文章目录 JS逆向学习笔记 一. JS Hook 1. JS HOOK 原理和作用 原理:替换原来的方法. (好像写了句废话) 作用: 可 ...

  7. hadoop学习笔记(八):Java HDFS API

    hadoop学习笔记(八):Java HDFS API 阅读目录 一.使用HDFS FileSystem详解 回到顶部 一.使用HDFS FileSystem详解 HDFS依赖的第三方包: hadoo ...

  8. 安卓逆向学习及APK抓包(二)--Google Pixel一代手机的ROOT刷入面具

    注意:本文仅作参考勿跟操作,root需谨慎,本次测试用的N手Pixel,因参考本文将真机刷成板砖造成的损失与本人无关 1 Google Pixel介绍 1.1手机 google Pixel 在手机选择 ...

  9. java学习笔记_2020全网最全Java面试题,学习笔记!

    深耕IT行业多年,我们发现,对于一个程序员而言,能去到一线互联网公司,会给我们以后的发展带来多大的影响. 很多人想说,这个我也知道,但是进大厂实在是太难了,简历投出去基本石沉大海,更不要说面试邀约了. ...

最新文章

  1. eBPF内核探测中将任意系统调用转换成事件
  2. 电脑python安装库_Python安装第三方库的3种方法 -电脑资料
  3. [WCF] Restful 自定义宿主
  4. 修改haproxy配置文件
  5. Python 技术篇-使用time库获取秒级时间戳、毫秒级时间戳实例演示
  6. redis中的五种基本的数据结构
  7. C语言实现循环链表Circularly Linked List(附完整源码)
  8. 解决2次查询User的问题(ThreadLocal)
  9. html5权威指南 预读,《HTML5权威指南》
  10. 多套 企业/工厂/超市/仓库库存管理系统源码 工具软件程序源代码
  11. ApacheCN 翻译/校对/笔记整理活动进度公告 2019.10.4
  12. 中小型企业基于大数据技术的项目实践
  13. windows10 C:\windows\system32\winlogon.exe自动关机
  14. 用户行为分析——AARRR 模型 和RARRA模型
  15. 上海新汇通: 让冷链运输更可控
  16. beeline安装_Beeline使用
  17. 选取一段代码块一下子都回退或前进空一格的快捷键
  18. 1044: 顺序栈基本操作的实现
  19. JS逆向 | ob混淆一键还原工具
  20. 自动驾驶辅助系统性能评估工具MXeval4.1版本更新快讯

热门文章

  1. qpython kivy_kivy
  2. linux查找未占用的端口,如何在Linux机器上找到可用但未占用的端口?
  3. R语言机器学习mlr3:超参数调优
  4. 基于DS3231时钟模块的stm32 Hal库程序,源码
  5. ds3231 linux驱动移植
  6. redis未授权访问漏洞利用
  7. xser php framework v0.1正式版 -- 发布
  8. Linux目录的rwx权限
  9. AlexNet网络模型讲解搭建以及训练
  10. 100个基本 自我更新指南?(下)