Note:
1.JEB调试的时候,调试机需要打开USB调试模式 。
如果未安装xposed,则apk需要打开debuggable模式
如果安装了xposed则需要安装BuildProp Enhancer并打开ro.debuggable
雷电模拟器可以直接搜索xposed安装,夜神模拟器不太好安装(放弃了)
因为这里只做入门介绍,所以这里只写一个入门级别的APK。功能很简单:根据输入token判断token是否正确,如图(正常的程序)。下面将patch一下apk,不管输入任何token都提示token正确。

- 使用JEB工具找到关键点(按钮点击事件)

这看起来很懵逼,按tab建或者右键->解析成代码状态,此时很容易看见按钮点击事件

- 使用ApkIDE少月版,修改
android:debuggable="true",然后重新打包apk进行代码调试(打包完成之后记得使用JEB重新打开该apk)

修改完成之后编译生成新的apk,此时安装该apk,并且是用JEB打开该apk


-
使用JEB调试,找到之前找到的关键点,
CTRL+B 打点F6下一步F8 运行,然后附加app进程。调试器->开始


发现判断token实际是通过getAesKey来获取的,双击进入,发现是一个so导出函数

此时单步调试是进入不了so的,所以此时只能通过IDA工具打开JniTest.so,然后查看getAesKey函数实现 -
修改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
本文介绍了安卓应用的逆向分析过程,包括使用JEB和ApkIDE进行调试,以及通过IDA工具查看和修改SO文件。在调试过程中,找到关键函数getAesKey并分析其内部逻辑,揭示了如何通过修改SO或Smali代码实现特定功能。文章提供了两种修改方案,一种是直接修改SO文件中的函数实现,另一种是在Smali代码中固定返回结果。


1731

被折叠的 条评论
为什么被折叠?



