Android逆向-签名认证绕过

Android逆向-签名认证绕过

0x01 对APP重新打包并绕过签名验证
1.插桩的手段定位签名验证的关键点
⚫ 首先尝试搜索字符串“signatures”,来查找和签名有关的函数或者方法。然后通过插桩的方式在含有字符串“signatures”的函数中插入Log日志信息,然后使用DDMS对app的运行进行监控,通过弹出Log日志的位置,来找出 app 出错的时执行到了哪个函数,以此来定位到签名验证的关键函数。
在这里插入图片描述

⚫ 对上面含有“signatures”字符串的函数进行插桩,在这里我们插入Log日志信息,如下图所示:
在这里插入图片描述

⚫ 完成了对上面搜索到的所有函数的插桩之后,将代码保存并重新打包为 apk 文件,再将apk安装到安卓模拟器中,打开DDMS,在LogCat中新建一个过滤规则来获取到我们指定app输出的信息。
在这里插入图片描述

⚫ 通过插桩和抓取错误信息,我们可以定位到插入字符串”nnnnnnnn”、字符串”wwwwwww”和字符串“mmmmmmm”日志信息的函数,如下图所示,可以发现这几个函数全部都在这个DeviceConfig.smali文件中。

在这里插入图片描述

⚫ 但是通过修改DeviceConfig.smali文件的代码并进行测试,发现app依旧不能正常运行,于是再次查看 DDMS 的日志信息,我们发现在执行我们的插桩的Log日志代码之前,app导入了一个名为libnative-lib.so的动态链接库 , 如 下 图 所 示 , 并 且 使 用 了 libnative-lib.so 中 的
Java_cn_wandersnail_bleutility_native_NativeLib_initialize函数。
在这里插入图片描述

⚫ 继续往下面翻看错误日志信息,发现还使用到了 libnative-lib.so 文件中的
Java_cn_wandersnail_bleutility_native_NativeLib_checkAppLegality 函数。

⚫ 通过上面的所有错误提示信息,我们总结出:app 的签名验证逻辑在 libnative-lib.so 文 件 中 的
Java_cn_wandersnail_bleutility_native_NativeLib_initialize 函数和 Java_cn_wandersnail_bleutility_native_NativeLib_checkAppLegality
函数中,下一步就是使用IDA对libnative-lib.so文件的签名验证逻辑进行修改。修改libnative-lib文件的签名验证方式在下面第2种寻找签名验证关键点的方法中介绍。
2.分析app入口点定位签名验证关键点
⚫ 在app的入口页面处找签名验证的函数,通过查看smali代码,没有发现有签名验证的逻辑。

⚫ 在AndroidManifest.xml文件中找app的入口点,在标签下的android:name属性的值,并找到onCreate方法

⚫ 查看MyApplication.xml对应的java代码,发现在这里的onCreate使用到了一个initialize方法。

⚫ 点击查看initialize方法定义的类,发现在Nativelib.clss的类中定义了 initialize方法,并且在这个类中加载了native-lib这个so动态链接库。

⚫ 将libnative-lib.so文件使用IDA打开,在Exports到处函数中搜索”JAVA_” 获 取 到 java 层 调 用 函 数 , 首 先 对
Java_cn_wandersnail_bleutility_native_NativeLib_initialize 方法进行分析。
在这里插入图片描述

⚫ 点开看Java_cn_wandersnail_bleutility_native_NativeLib_initializ函数,看到如下的函数结构,按下F5查看反汇编的代码,可以看到函数调用了 j_check_signature函数,然后将j_check_signature函数的返回值减1,并对减后的得到的值进行if判断。

在这里插入图片描述
在这里插入图片描述

⚫ 如果函数判断正确返回值应该是1,所以考虑将if判定语句去掉,函数顺序执行到return 1的位置直接返回。
在这里插入图片描述

⚫ 对if语句进行定位,然后使用WinHex对 libnative-lib.so文件的二进制文件进行修改。

⚫ 修改完成并打包之后,将程序安装到安卓模拟器中进行测试,发现仍然不能运行,于是使用了Android Device Monitor工具对程序运行的错误信息进行 捕 获 , 发 现 程 序 出 错 的 地 方 还 调 用 了
Java_cn_wandersnail_bleutility_native_NativeLib_checkAppLegality 函数。

⚫ 于是再次回到 libnative-lib.so 文件中,继续分析这个 so 文件导出的
Java_cn_wandersnail_bleutility_native_NativeLib_checkAppLegality 函数。

⚫ Java_cn_wandersnail_bleutility_native_NativeLib_checkAppLegality
函数的跳转分支,发现有一个分支是调到抛出异常执行,所以想到将CBZ R1, loc_347E0 这一条语句给nop掉让函数不能跳入异常。

⚫ 同样定位到CBZ R1, loc_347E0语句在二进制文件中的位置,然后再WinHex 中进行修改。

⚫ 修改之后的函数结构和函数内容如下所示:

⚫ 使用不同于发布者的签名信息对apk重新签名后的软件能够正常安装和运行,说明成功绕过了签名验证机

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值