首页 > 编程语言 >APP攻防--安卓逆向&JEB动态调试&LSPosed模块&算法提取&Hook技术

APP攻防--安卓逆向&JEB动态调试&LSPosed模块&算法提取&Hook技术

时间:2023-11-07 14:35:01浏览次数:44  
标签:LSPosed -- APP hook 算法 密钥 返回值 断点 调试

JEB环境配置

  1. 安装java环境变量(最好jdk11)
  2. 安装adb环境变量

设置adb环境变量最好以Android命名

  1. 启动开发者模式

设置-->关于平板电脑-->版本号(单机五次)
image.png

  1. 开启USB调试

设置-->系统-->高级-->开发者选项-->USB调试
image.png
开启USB调试目的是为了后续让JEB能够获取模拟器上的进程
image.png

  1. 安装激活JEB

软件安装包和破解参考吾爱破解文章JEB动态调试Smali-真机/模拟器(详细,新手必看)

JEB动态调试

使用的吾爱破解中大佬课程《安卓逆向那点事》中提供的练习demo第四关来练习动态调试。

android:debuggable="true"
  • JEB中打开的apk必须也加入了动态调试才能和模拟器中的进程进行互动,查看方法如下

image.png
在对第四关进行练习时,需要输入密钥,可以对关键字进行搜索
image.png
找到关键字所在位置
image.png
解析为java代码后发现控制程序逻辑的是一个if语句,在执行check()函数后,通过check()函数的返回值来判断if语句的执行逻辑,这里只需要将check()函数的返回值修改为真即可成功绕过密钥判断。
image.png
双击查看check()函数,这里有检测提交的密钥是否带关键字flag{}
image.png

在函数返回值的地方判断变量v7是否与一串加密数据是否一致,如果一致就返回为真。有两种方式可以绕过密钥检测,一种是从逆向的角度将return的值固定为true,另外一种方法是通过动态调试的方式我们可以通过断点调试来获取这段加密数据,从而成功获取密钥。
image.png

逆向修改返回值:
在修改返回值的方法中,我们可以将代码中检测flag{}关键字的检测返回值一并进行固定修改,顺带将关键字检测也一并绕过
在以下三个返回值的地方我们需要全部固定为true
image.png
image.png

对应的smail代码如下
image.png
image.png
在return返回之前使用const进行重新赋值,由于JEB不能重新打包,使用MT管理器进行修改,修改效果如下
image.pngimage.png
在进行修改后对apk进行重新编译后并签名安装即可成功绕过,绕过效果如下,关键字检测以及密钥检测全部成功绕过。
image.png

断点调试密钥:
在进行断点调试的时候首先判断需要在那里下断点,我们想要通过断点调试得到什么。
我们需要通过断点调试使得check()函数的最终返回值为true,需要得到与v7进行对比的一串密钥,所以我们在进行断点调试的时候需要在密钥得到的时候、返回值之前进行断点,并且在发送调试数据时必须带有flag{}关键字通过关键字检测才能使程序正常执行。
image.png
开启调试
image.png
下断点,在下断点时需要在smail语法视图中
image.png
image.png
发送数据,在开启断点调试后,进行发送数据的时候并不会提示密钥错误,因为程序在执行过程中被断点调试拦截了
image.png
成功断点后,一步一步执行程序的同时观察和分析局部变量
image.png

断点调试执行过程checkNotNullExpressionValue()-->encodeToString(),在encodeToString()函数返回值发现特殊变量
image.png
在执行到areEqual()函数时,我们发送的数据是和该变量进行比较。
image.png
通过尝试将密钥换成flag{VEFREgwEAA==}即可成功认证密钥。

LSPosed模块

安装Magisk、LSPosed以及算法助手
XPosed框架因只支持安卓8及以下,故高版本应使用Magisk+LSPosed
参考文章雷电模拟器9.0.56安装Magisk+LSPosd
算法助手
通过LSPosed模块中所提供得集成功能可以大大节省时间。
在使用算法助手时,需要现在LSPosed模块中将进行调试得目标APP选中,系统框架是必须勾选的。
image.png
image.png

勾选目标APP后,在将算法助手中得APP勾选即可

LSPosed模块中,具有很多集成的功能
比如抓取加密算法
在面对具有加密算法得目标时候,使用算法助手中抓取算法功能可以很快获取到加密算法得位置,或者加密算法采用得加密密钥、偏移量等关键信息

image.png

通过算法助手启动APP在登录时调用加密算法,调用结束后可以在算法助手得日志处看到加密算法得调用过程以及加密细节
image.png

image.png

自定义Hook

在算法助手功能中有一项功能可以添加自定义hook
所谓hook技术,通俗来讲就是可以改变程序得执行逻辑,类似与bp抓包得时候修改数据包再将数据包放出,hook可以将程序中得变量或者返回值进行修改。

在添加hook时,需要将关键程序得执行逻辑搞清楚,将关键变量或者返回值进行修改。

例如在之前案例中得某小说APP中,通过关键字定位到关键逻辑,进行反编译后分析程序执行逻辑
image.png
image.png
if语句是否执行根据y5得返回值来判断,如果y5得返回值为true,即可成功进入if语句。我们可以通过自定义hook模块将y5得返回值固定。
使用JEB将鼠标放置在方法上即可查看方法得详细信息
image.png
根据y5方法所在得类,以及返回值类型构造自定义hook
image.png
image.png
将所添加的hook勾选后,使用算法助手启动即可
image.png

在没有勾选自定义得hook模块时,目标APP正常显示逻辑,vip并没有成功开通
image.png
在勾选自定义hook后,启动之后目标APP成功开通vip
image.png
在算法助手得日志记录中可以看到算法助手通过自定义得hook将目标APP中得y5()方法进行了拦截并修改了返回值。
image.png

标签:LSPosed,--,APP,hook,算法,密钥,返回值,断点,调试
From: https://www.cnblogs.com/Pengj/p/17814909.html

相关文章

  • springboot nacos使用yaml配置list方式
    方式一配置项:app:demo:list1:xiaohong,xiaominglist2:>xiaohong,xiaominglist1和list2看起来是2种风格,其实都是同一种写法,以逗号分隔java代码:@Data@ComponentpublicclassAppConfig1{@Value("${app.demo.list1}")privateList<Strin......
  • python初学者学习笔记-第三章-数据结构
    chapter3/数据结构3.1列表(List)序列是Python中最基本的数据结构,最常见的序列是列表和元组。序列中的每个元素都分配一个索引,第一个索引是0,第二个索引是1,依此类推。序列都可以进行如下操作,包括:索引,切片,加,乘,查询。Python中可以通过组合一些值得到多种复合数据类型。其中最常......
  • mysql测试语句创建写入存储过程调用8.0
    --创建表格 CREATETABLEmy_table(idINTAUTO_INCREMENT,nameVARCHAR(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ci,emailVARCHAR(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ci,passwordVARCHAR(255)CHARACTERSETutf8mb4COLL......
  • 云上的RDS mysql长事务kill时间很长怎么解决
    【问题】实例删除大事务之后,kill时间较长,运行中【建议&注意事项】超大事务执行期间被kill。这时候,回滚操作需要对事务执行期间生成的所有新数据版本做回收操作,这种场景耗时会比较长。建议:1.通过影响系统环境,让这个Killed状态尽快结束。比如:临时调大innodb_thread_concurre......
  • 常见数组的排序算法的特点
    假设这些排序算法想得到一个升序序列,长度为n。参考https://blog.csdn.net/qq_53414724/article/details/125016223https://zhuanlan.zhihu.com/p/602971700冒泡排序冒泡排序从头开始寻找相邻的元素,找到较大的元素放于后面,一直到数组末尾。循环n-1轮,每一轮都从0开始,但结束位置......
  • iOS代码混淆----自动
    ​  先大致解释一下“编译"、"反编译":编译:就是把千千万万行字符串(也叫代码,或者源文件),变成010101010101(机器码,也叫目标代码)编译过程:预处理-编译-汇编-链接我的脚本运行在预处理阶段。反编译:就是把0101010111110001100(机器码,也叫目标代码),变成千千万万行字符串(也叫......
  • 理解全序关系
    在数学中,集合 X上的全序、线性序、简单序,或(非严格)排序是在X上的反对称的、传递的和完全的任何二元关系。这意味着如果我们把这种关系指示为≤则下列陈述对于X中的所有a,b和c成立:   如果a≤b且b≤a则a=b(反对称性)   如果a≤b且b≤......
  • 理解偏序关系
    在数学中,特别是序理论中,偏序集合(简写为poset)是配备了偏序关系的集合。这个关系形式化了排序、顺序或排列这个集合的元素的直觉概念。这种排序不必然需要是全部的,就是说不需要但也可以保证在这个集合内的所有对象的相互可比较性。(在数学用法中,全序是一种偏序)。偏序集合定义了偏......
  • 《离散数学》双语专业词汇表 名词术语中英文索引
    《离散数学》双语专业词汇表set:集合subset:子集element,member:成员,元素well-defined:良定,完全确定brace:花括号representation:表示sensible:有意义的rationalnumber:有理数emptyset:空集Venndiagram:文氏图contain(in):包含(于)universalset:全集finite(infinite)set:有限(无限)集......
  • 常用数学符号大全 特殊字符 特殊符号
    1、几何符号⊥  ∥  ∠  ⌒  ⊙  ≡  ≌   △ ⊆ ⊇ Δ Λ Σ ∅ ⋅ ◊ ο ◦2、代数符号∝  ∧  ∨  ~  ∫  ≠   ≤  ≥  ≈  ∞  ∶3、运算符号如加号(+),减号(-),乘号(×或·),除号(÷或/),两个......