专栏首页difcareer的技术笔记使用 IDA 破解某app的签名校验

使用 IDA 破解某app的签名校验

最近在分析某app的网络通信逻辑,其中的加密解密都在so中完成,且有签名校验,抠取so到写的demo中运行会crash。

好吧,使用IDA打开so,发现了签名校验逻辑:

checkApp(env, context) 

其中使用jni获取签名进行校验。

我把目标放到了这个函数上,通过上下文发现,只要让其返回固定的值就可以了。

为了观察SP的值变化,先把SP的值显示出来: Options -> General -> Disassembly -> Display disassembly line parts(右上角) -> Stack pointer(勾上)

现在看看破解前的汇编代码:

构建栈帧

从图中可以看出,栈深度因为一些push操作在增大。

销毁栈帧

对应的销毁是上述的逆向操作。

为了让这个函数直接返回固定的值,我决定将0x00007D46开始的指令替换为销毁栈帧的指令。

在IDA的Hex View-1中进行二进制的修改后,在进入f5页面,结果是:

checkApp(int a1, int a2,int a3,int a4,int a5)
{
  return a5;
}

ok,原来的校验逻辑没有了,但返回值不是固定的值。 将movs R0,R5 改成: movs R0,#0即可。

如何知道movs R0,#0是多少呢?

我对于二进制不熟悉,但是可以在现有的代码中找找,于是找到一处movs R2,#0的代码,试试将二进制的值适当调整一下,成功获取到movs R0,#0的二进制值。

  后来发现了一个不错的网站,可以做这个转化:http://armconverter.com/

修改后再使用IDA进入f5页面,结果是:

checkApp(int a1, int a2)
{
 return 0;
}

ok,得到要的结果了,将so放入自己的demo中,成功执行,不再crash。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ELF格式学习

    英文文档: http://www.cs.cmu.edu/afs/cs/academic/class/15213-f00/docs/elf.pdf 中文对照翻...

    用户2930595
  • 如何快速定位native方法在对应so中的位置前言原理

    在逆向的时候,有些应用有一大堆的so,而且都是提前加载好,有的so甚至做了处理,很难看出函数名。本文讲述的方法可以快速定位:

    用户2930595
  • 图像裁剪后缩放到某个尺寸,不变形

    用户2930595
  • 《python算法教程》Day8 - 构建二分搜索树二分搜索树介绍二分搜索树创建代码

    今天是《python算法教程》的第8篇读书笔记,笔记的主要内容是构建二分搜索树。 二分搜索树介绍 若要对一组有序值中执行操作(如查找),二分搜索法是一个优秀的选...

    billyang916
  • 2.1 C++自增自减运算符

    在使用i之后,先让i的值加1,比如上述代码,执行j=i++之后,j的值是3,i的值才是4

    C语言入门到精通
  • 使用 Go 语言开发 Android 应用的正确姿势探索

    因此使用java或是kottin开发Android应用是自然的,是原生的应用且速度也是很快的。

    特立独行的猫a
  • python稍难一点的说明

    哒呵呵
  • 学IGV必看的初级教程

    Integrative Genomics Viewer (IGV)作为一个高性能的可视化工具,可以交互式的察看综合的基因组相关数据,也友好的支持多种数据类型,自...

    生信技能树
  • Appium自动化(9) - appium元素定位的快速入门

    https://www.cnblogs.com/poloyy/category/1693896.html

    小菠萝测试笔记
  • 别以为语言学家就整天咬文嚼字,其实他们代码也很 6

    AI 研习社按:统计 NLP 已取得巨大成果,但其极度依赖统计手段,相比之下深入的语言学思考少很多。当今研究遇到瓶颈,许多 NLP 的研究者都在引入一些语言学的...

    AI研习社

扫码关注云+社区

领取腾讯云代金券