JEB配合IDA神器逆向

本文介绍了安卓应用的逆向分析过程,包括使用JEB和ApkIDE进行调试,以及通过IDA工具查看和修改SO文件。在调试过程中,找到关键函数getAesKey并分析其内部逻辑,揭示了如何通过修改SO或Smali代码实现特定功能。文章提供了两种修改方案,一种是直接修改SO文件中的函数实现,另一种是在Smali代码中固定返回结果。

Note:
1.JEB调试的时候,调试机需要打开USB调试模式 。
如果未安装xposed,则apk需要打开debuggable模式
如果安装了xposed则需要安装BuildProp Enhancer并打开ro.debuggable
雷电模拟器可以直接搜索xposed安装,夜神模拟器不太好安装(放弃了)

在这里插入图片描述

因为这里只做入门介绍,所以这里只写一个入门级别的APK。功能很简单:根据输入token判断token是否正确,如图(正常的程序)。下面将patch一下apk,不管输入任何token都提示token正确。
在这里插入图片描述

  1. 使用JEB工具找到关键点(按钮点击事件)
    在这里插入图片描述
    这看起来很懵逼,按tab建或者右键->解析成代码状态,此时很容易看见按钮点击事件
    在这里插入图片描述
  2. 使用ApkIDE少月版,修改android:debuggable="true",然后重新打包apk进行代码调试(打包完成之后记得使用JEB重新打开该apk
    在这里插入图片描述
    修改完成之后编译生成新的apk,此时安装该apk,并且是用JEB打开该apk
    在这里插入图片描述

在这里插入图片描述

  1. 使用JEB调试,找到之前找到的关键点,CTRL+B 打点 F6下一步 F8 运行,然后附加app进程。调试器->开始
    在这里插入图片描述
    在这里插入图片描述
    发现判断token实际是通过 getAesKey来获取的,双击进入,发现是一个so导出函数
    在这里插入图片描述
    此时单步调试是进入不了so的,所以此时只能通过IDA工具打开JniTest.so,然后查看getAesKey函数实现

  2. 修改apk后缀为Zip,解压,找到lib下的so,然后通过IDA打开

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

Exports窗口找到导出函数getAesKey双击,并通过F5或者Tab将汇编转换为代码状态
在这里插入图片描述

在这里插入图片描述
此时我们很容易看见原来viptoken事实是固定死的,就是vip_jefcat,此时我们来验证一下
在这里插入图片描述
结果正确

既然到这里了那么新提一个需求,要求不论我们输入什么都输出“token 正确”
思路一:修改so,在if判断的时候patch一下
思路二:修改smali在调用getAesKey的地方将返回结果固定为"token 正确"

方式一: IDA打开libJniTest.so,找到getAesKey函数,和关键点
在这里插入图片描述
双击CSEL指令,然后切换到HexView窗口查看对应的16进制指令在这里插入图片描述
此时使用工具将arm指令转换成16进制 arm To Hexview
以及修改之后的指令CSEL X1, X9, X9, EQ
在这里插入图片描述
在这里插入图片描述
对比发现是将2101889A --> 2101899A,所以此时我们在Hex view 窗口F2修改文件,修改之后F2应用改变,最后patch文件
在这里插入图片描述
在这里插入图片描述

如果有多个cpu架构的该类文件,记得每个都修改一下。

验证结果:
在这里插入图片描述

方式二: 在之前步骤1中已经找到关键点,此时通过ApkIDE少月版打开并找到对应的smali文件修改。
在这里插入图片描述
在这里插入图片描述
验证结果:
在这里插入图片描述

CPU指令转Hex的时候不同的cpu架构指令是不同的,但是我们可以使用在线转换工具
例如windows下 的asmToHex

动态调试工具:Frida

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值