APP攻防--安卓逆向&JEB动态调试&LSPosed模块&算法提取&Hook技术
JEB环境配置
- 安装java环境变量(最好jdk11)
- 安装adb环境变量
设置adb环境变量最好以Android命名
- 启动开发者模式
设置-->关于平板电脑-->版本号(单机五次)

- 开启USB调试
设置-->系统-->高级-->开发者选项-->USB调试

开启USB调试目的是为了后续让JEB能够获取模拟器上的进程

- 安装激活JEB
软件安装包和破解参考吾爱破解文章JEB动态调试Smali-真机/模拟器(详细,新手必看)
JEB动态调试
使用的吾爱破解中大佬课程《安卓逆向那点事》中提供的练习demo第四关来练习动态调试。
- 在进行动态调试前必须在apk中加入允许动态调试,一般在application标签中加入即可。其他加入动态调试方法相较于加入代码来说有点复杂,可以参考《安卓逆向这档事》五、1000-7=?&动态调试&Log插桩
android:debuggable="true"
- JEB中打开的apk必须也加入了动态调试才能和模拟器中的进程进行互动,查看方法如下

在对第四关进行练习时,需要输入密钥,可以对关键字进行搜索

找到关键字所在位置

解析为java代码后发现控制程序逻辑的是一个if语句,在执行check()函数后,通过check()函数的返回值来判断if语句的执行逻辑,这里只需要将check()函数的返回值修改为真即可成功绕过密钥判断。

双击查看check()函数,这里有检测提交的密钥是否带关键字flag{}

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

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


对应的smail代码如下


在return返回之前使用const进行重新赋值,由于JEB不能重新打包,使用MT管理器进行修改,修改效果如下


在进行修改后对apk进行重新编译后并签名安装即可成功绕过,绕过效果如下,关键字检测以及密钥检测全部成功绕过。

断点调试密钥:
在进行断点调试的时候首先判断需要在那里下断点,我们想要通过断点调试得到什么。
我们需要通过断点调试使得check()函数的最终返回值为true,需要得到与v7进行对比的一串密钥,所以我们在进行断点调试的时候需要在密钥得到的时候、返回值之前进行断点,并且在发送调试数据时必须带有flag{}关键字通过关键字检测才能使程序正常执行。

开启调试

下断点,在下断点时需要在smail语法视图中


发送数据,在开启断点调试后,进行发送数据的时候并不会提示密钥错误,因为程序在执行过程中被断点调试拦截了

成功断点后,一步一步执行程序的同时观察和分析局部变量

断点调试执行过程checkNotNullExpressionValue()-->encodeToString(),在encodeToString()函数返回值发现特殊变量

在执行到areEqual()函数时,我们发送的数据是和该变量进行比较。

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


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

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


自定义Hook
在算法助手功能中有一项功能可以添加自定义hook
所谓hook技术,通俗来讲就是可以改变程序得执行逻辑,类似与bp抓包得时候修改数据包再将数据包放出,hook可以将程序中得变量或者返回值进行修改。
在添加hook时,需要将关键程序得执行逻辑搞清楚,将关键变量或者返回值进行修改。
例如在之前案例中得某小说APP中,通过关键字定位到关键逻辑,进行反编译后分析程序执行逻辑


if语句是否执行根据y5得返回值来判断,如果y5得返回值为true,即可成功进入if语句。我们可以通过自定义hook模块将y5得返回值固定。
使用JEB将鼠标放置在方法上即可查看方法得详细信息

根据y5方法所在得类,以及返回值类型构造自定义hook


将所添加的hook勾选后,使用算法助手启动即可

在没有勾选自定义得hook模块时,目标APP正常显示逻辑,vip并没有成功开通

在勾选自定义hook后,启动之后目标APP成功开通vip

在算法助手得日志记录中可以看到算法助手通过自定义得hook将目标APP中得y5()方法进行了拦截并修改了返回值。

APP攻防--安卓逆向&JEB动态调试&LSPosed模块&算法提取&Hook技术的更多相关文章
- 安卓逆向 IDA 动态调试 案例1
adb forward tcp:23946 tcp:23946 adb devices adb shell su cd /data/local/tmp ./android_server adb she ...
- [转]Android逆向之动态调试总结
一.在SO中关键函数上下断点 刚学逆向调试时.大多都满足于在SO中某关键函数上下断点.然后通过操作应用程序,去触发这个断点,然后进行调试 详细的步骤可以参见非虫大大的<Android软件安全与逆 ...
- JEB动态调试解密数据包加密字段
0x00 场景 在测试某个app的时候,抓取数据包,发现某些参数存在被加密的情况,或者有签名校验的情况,这个时候如果我们想直接去篡改数据包的内容往往是做不到的,那就来看看抓取的某个app登录数据包,如 ...
- iOS逆向系列-动态调试
Xcode调试App原理 Mac安装了Xcode Xcode的安装包中包含了debugserver 可执行类型的Mach-O文件,iPhone第一次连接Xcode调试会将Xcode中的debugser ...
- apk逆向 - smali动态调试
author: Dlive date: 2016/10/6 0x00 前言 之前有人问过smali的动态调试方法,其实网上已经有很多文章讲这些内容,但是为了方便大家学习,我还是写一下让大家少走点坑 ...
- 【Android 逆向】动态调试AliCrackme_1
1 试玩 apk # 安装APK到真机 adb install AliCrackme_1.apk 打开apk,投石问路,输入123试一下 2 将apk 拖入androidKiller,得到反编译的sm ...
- 安卓逆向 IDA 静态调试分析
1.找到我们分析的接口 2.F5进入C伪代码 修正一下参数,IDA无法正常识别 jstring __fastcall Java_com_example_sfs_MainActivity_getText ...
- 安卓APP动态调试-IDA实用攻略
0x00 前言 随着智能手机的普及,移动APP已经贯穿到人们生活的各个领域.越来越多的人甚至已经对这些APP应用产生了依赖,包括手机QQ.游戏.导航地图.微博.微信.手机支付等等,尤其2015年春节期 ...
- 【转】安卓逆向实践5——IDA动态调试so源码
之前的安卓逆向都是在Java层上面的,但是当前大多数App,为了安全或者效率问题,会把一些重要功能放到native层,所以这里通过例子记录一下使用IDA对so文件进行调试的过程并对要点进行总结. 一. ...
- 安卓APP动态调试(IDA实用攻略)
转自:http://drops.wooyun.org/mobile/5942 0x00 前言 随着智能手机的普及,移动APP已经贯穿到人们生活的各个领域.越来越多的人甚至已经对这些APP应用产生了依赖 ...
随机推荐
- 图解 Vue 响应式原理
Vue 初始化 模板渲染 组件渲染 为了便于理解,本文将从以下两个方面进行探索: 从 Vue 初始化,到首次渲染生成 DOM 的流程. 从 Vue 数据修改,到页面更新 DOM 的流程. Vue 初始 ...
- quarkus实战之四:远程热部署
将本地的改动极速同步到远程服务端,并自动生效,掌握此技能,开发调试会更高效 欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/ ...
- 浅谈php伪协议的运用
浅谈php伪协议的运用 (133条消息) PHP Filter伪协议Trick总结_php伪协议rot13的用法_swtre33的博客-CSDN博客 php死亡exit()绕过 - xiaolong' ...
- DHorse v1.3.0 发布,基于k8s的发布平台
综述 DHorse是一个简单易用.以应用为中心的云原生DevOps系统,具有持续集成.持续部署.微服务治理等功能,无需安装依赖Docker.Maven.Node等环境即可发布Java.Vue.Reac ...
- ChatGPT 助力开发人员改进代码的5个方式
近年来,在软件开发中使用人工智能和机器学习变得越来越普遍.因此,开发人员开始转向像 OpenAI 的 ChatGPT 这样的工具来简化他们的工作,提高他们的工作效率.ChatGPT是一个由 OpenA ...
- [Python]队列基础
关于队列 基本的队列是一种先进先出的数据结构. 一般的队列基本操作如下: create:创建空队列 add:将新数据加入队列的末尾.返回新队列. delete:删除队列头部的数据,返回新队列. fro ...
- Linux字符界面安装更新VMware Tools
注:yeesn为我自己的用户名,实际操作中改用自己的用户名 1.切换到虚拟光驱目录 cd /media/yeesn/VMware Tools 2.复制压缩包到桌面 cp VMwareTools-xxx ...
- Python colorama 设置控制台、命令行输出彩色文字
为了方便调试代码,经常会向stdout中输出一些日志,但是大量日志,有时不好定位问题. 使用终端打印特定颜色字符串,可以突出显示关键性的信息,帮助用户更好地识别和理解输出内容. https://pyp ...
- No manual entry for ls终极解决办法
No manual entry for ls解决办法,最后一种方法一定能解决你的问题 步骤一:确认man是否已经安装 #which man /usr/bin/man---返回此行,证明已经安装 步骤二 ...
- 代码检视的新姿势!在IDEA中得到沉浸式Code Review新体验
大家好,好久不见,又见面了. 在消失的这段时间里,我做了件大事,见证了儿子的出生并陪伴其一天天的成长.停止更文的200多天里,还能得到小伙伴们持续的支持,让我备受鼓励.对一个技术人员而言,分享技术观点 ...