android so 签名校验,一个so中的签名验证绕绕过

0x00 前言

本文仅供安全技术交流,请勿用于不正当的用途,造成的一切后果与本文作者无关.

(其实也不是啥高深的技术,就是修改字节码绕过,就是想简单记录一下 )

0x01 样本分析

用AndroidKiller反编译打包后

c38aeb20c1a39d9f4a19f53683562a7d.png

手机打开后会闪退

查看一下崩溃日志

bea723d35f7a41e19a88a76767f6b00c.png

发现这里函数回溯,so层中的一个函数报错了,跟过去看看

1e56b9561bc140f3e4b0c927848aab37.png

可以看到java层调用的函数以及JNI_Onload函数,先看看JNI_Onload,下面是结构修复后的(怎么操作就不多罗嗦了)

5231e3792fc6a03a84b445b74db6e60a.png

可以看到这里有几个全局引用,看函数名就知道是在获取一些全局信息,报名,签名之类的,应该是为后面的校验做准备

然后分析那三个native函数

可以看到这里是校验失败后的逻辑分支

3e6bd303ab1afc9a839d7037a1cba478.png

那么就来修改,此处本意是不相等则跳转,那么可以修改为相等则跳转,那么二次打包后因为签名以及不想等了,便不会执行报错操作

只需要讲D1字节码修改为D0,那么指令就是BEQ

然后保存一下修改

cc7cb61a196c0971db82cbaa1fa3cc59.png

第二处也同上分析

9539e3420bddcb64e2ab221937b6b878.png

全部修改完后,替换即可正常运行

0x02 总结

这个样本能这样修改是因为apk本身并没有加固,so层也没有加密,比较容易分析出校验逻辑

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值