JEB动态调试与篡改攻防世界Ph0en1x-100

article/2025/7/4 8:01:18

文章目录

  • 题目
  • APK静态分析
    • jadx反编译
    • IDA反汇编
  • JEB动态调试
    • 工具的使用
    • 操作内存值
  • AndroidKiller
    • 工具的使用
    • 篡改软件包
  • 总结

题目

攻防世界 Mobile 新手区题目链接 Ph0en1x-100,如下:
在这里插入图片描述下载附件得到一个 apk,安装后如下:
在这里插入图片描述
要求输入一个 flag 值进行校验,很显然,需要逆向分析 APK 并获取 Flag。

APK静态分析

拖进查壳工具,未加壳:
在这里插入图片描述

jadx反编译

裸奔,当然是拖进 jadx 查看源码:
在这里插入图片描述关键看第 34 行的判断语句,它是通过比较 getSecret(getFlag())getSecret(encrypt(你输入的值)) ,如果相同则成功,那么也就是让 getFlag() 和 encrypt(你输入的值) 相同就行(因为这两个值都经过 getSecret() 函数,所以可以忽略 getSecret() 函数的实现逻辑)。那么可以想办法获取到 getFlag() 函数的返回值,再逆向反算 encrypt() 函数,即可获得程序希望我们输入的目标值。但是发现 getFlag() 、encrypt() 这两个函数都是 native 方法,都是写在 so 层的,无法直接通过 jadx 反编译工具查看函数逻辑代码。

IDA反汇编

上述两个函数包含在 APK 资源文件里面的 libphcm.so 文件中:在这里插入图片描述 故将 libphcm.so 拖入 IDA 进行反汇编,依据 NDK 开发命名规则(函数名必须是“Java+包名+类名+JNI方法名”的格式)可快速定位到目标函数:
在这里插入图片描述按 F5 快捷键查看对应函数汇编指令的 C 语言伪代码,先看看 encrypt() 函数,发现其对输入的字符串的每个字符的 ascii 值减 1:
在这里插入图片描述再看 getFlag() 函数:
在这里插入图片描述比较乱,但是这个方法没有外部输入参数,意味着函数返回值是个固定值,我们通过动态调试输出打印或者其他方式拿到这个方法的运行结果就 OK 了。

JEB动态调试

JEB 是一款功能强大的为安全专业人士设计的 Android 应用程序反编译和动态调试工具。用于逆向工程或审计 APK 文件,可以提高效率减少许多工程师的分析时间。

工具的使用

1、将 apk 文件拖进 JEB 工具进行反编译,结果如下:
在这里插入图片描述2、选中对应的 smali 代码,右键选择“解析”(快捷键为 Tab),即可快速将 smali 转换为 Java 伪代码(如同 jadx-gui):
在这里插入图片描述3、选择函数并右键选择“交叉引用”,可以查看该函数被调用的地址:
在这里插入图片描述4、可以借助“寻找”功能快速查找定位关键词:
在这里插入图片描述

操作内存值

下面步入正题,使用 JEB 对目标 apk 进行动态调试。先说明一下,调试前需要查看目标 APK 的 Manifest 配置文件中 debuggable 配置选项是否为 true 可调式(默认为 true),如果是 false,则不能调试,需要改成 true 然后重新打包 apk:
在这里插入图片描述
1、首先在 MainActivity 类的 Smail 代码中给 apk 下断点(Java 代码中不行),鼠标点击要下断点的行,使用快捷键 Ctrll+B 即可设置或取消断点:
在这里插入图片描述2、在 CMD 中以 adb shell am start -D -n 包名/入口activity名的命令格式执行以下命令开始运行程序:

adb shell am start -D -n com.ph0en1x.android_crackme/com.ph0en1x.android_crackme.MainActivity

执行命令后模拟器如图所示进入等待被附加调试:
在这里插入图片描述
注意】JEB 动态调试时,这一步并非必须的,CMD 执行该条命令是以 debug 模式进行调试。JEB 的动态调试分为 debug 模式 和普通模式,二者的区别在于是否调试目标 APK 启动过程。普通模式无法调试界面的创建过程,即 onCreate 函数,而 debug 模式可以调试界面的 onCreate 函数,即刚开始创建界面时就开始调试。

3、此时即可返回 JEB 在调试器工具栏选项中选择“开始”,将目标进程进行“附上”:
在这里插入图片描述4、点击“附上”之后,模拟器中等待调试的弹窗自动消失,然后就可以在 jeb 中下断点、调试了,同时可以看到调试界面中有增加的窗口,如下图所示:
在这里插入图片描述5、由于我已经设置了断点了,直接在 apk 中输入任意值并点击 go 按钮,会发现程序成功暂停在断点处:
在这里插入图片描述6、接着按 F6 快捷键或者工具栏的单步步过按钮,向下执行程序,运行到 smali 代码的如下位置,可在 v1 寄存器中看到 encrypt 函数加密后的 flag 的值(结合 Java 代码进行判定):
在这里插入图片描述7、由前面的分析得知,encrypt() 函数对字符串的每个字符的 ascii 值减 1,故编写小脚本对上述获得的密文值进行反向操作:

flag = "ek`fz@q2^x/t^fn0mF^6/^rb`qanqntfg^E`hq|"
result = ''
for i in flag:result += chr(ord(i) + 1)
print(result)

成功获得 Flag:
在这里插入图片描述
8、进一步地还可以试下修改动态调试过程中寄存器的值,来绕过 apk 客户端程序函数校验,如下图所示,在0000003E if-eqz代码行处(对应 Java 代码第 43 行的核心判断位置),修改 v1 寄存器的值:
在这里插入图片描述object null 改为 int 1,然后放行程序,程序将跳转到 Success 弹窗逻辑处,而非 Failed:
在这里插入图片描述至此便完成了借助 JEB 实现动态调试目标 APP 并操作内存值得目的。

AndroidKiller

Android killer 是一款可视化的安卓应用逆向工具,集 Apk 反编译、Apk 打包、Apk 签名,编码互转,ADB 通信(应用安装-卸载-运行-设备文件管理)等特色功能于一身,支持 logcat 日志输出,语法高亮,基于关键字(支持单行代码或多行代码段)项目内搜索,可自定义外部工具;吸收融汇多种工具功能与特点,打造一站式逆向工具操作体验,大大简化了安卓应用/游戏修改过程中各类繁琐工作。
在这里插入图片描述

工具的使用

工具下载地址:Android Killer V1.3.1正式版。

AndroidKiller 的主要功能:

  1. 可视化、全自动的反编译、编译、签名,支持批量编译 APK;
  2. 以树形目录管理反编译出的 APK 源码文件,浏览、打开、编辑、都可以统一在软件中实现,不同项目间可以自由切换,方便快捷;
  3. 自动识别图像资源,并提供该类资源的快捷替换功能,方便修改这类图片资源;
  4. 内置代码编辑器,支持包含(但不限于).samli、.xml、.html等各类格式文件的语法高亮显示,根据 smali 文件格式的自动匹配相应语法;同时支持使用系统编辑器来编辑代码文件;
  5. 内置基于文件内容的单行或多行代码关键字搜索、可显示无穷多个搜索结果以标签的形式分门别类;可指定搜索范围(整个项目或在指定的文件或文件夹中搜索)、大小写,编码类型;从此无需再借助其他工具,即可轻松的完成搜索任务;
  6. 内嵌 Unicode、UTF8、ANSI 编码互转工具,方便硬编码文字的检索以及相关汉化类修改;
  7. 内置 Log 等调试工具,方便应用进程、logcat 输出查看等进阶操作,监测修改apk的运行状况,以助于分析和查找错误;
  8. 内置 ADB 功能,包括使用 ADB 向设备(或模拟器)安装、卸载、运行修改后的apk,进行测试,并可管理所连接设备的存储文件(包括系统以及用户文件);
  9. 所有操作步骤、结果都会显示在日志窗口,方便查看;
  10. 默认支持记事本、计算器等小工具,开放设置接口可根据需要自定义外部工具,满足个性化需求。

简单介绍下其部分功能,其反编译出来的工程目录文件打开后同样也是 smali 代码而非 java 代码:
在这里插入图片描述单击上图所示的按钮,可查看对应的 java 代码(实际上就是打开集成的 jadx-gui):
在这里插入图片描述

篡改软件包

下面我将演示借助 Androidkiller 对上面 Ph0en1x-100.apk 的篡改与重打包,使得程序在输入任意错误 flag 后能弹窗提示加密后的 flag 值,同时篡改 apk 在手机应用桌面显示的名称。

1、原先程序在模拟器桌面显示的名称为 Android_crackme,我想把它改为 Tr0e:
在这里插入图片描述
2、在工程搜索中搜索 Android_crackme,定位到 strings.xml 文件中,修改 app_name 的配置值并保存:
在这里插入图片描述3、除此之外我还想修改 MainActivity 类的 smali 代码,让 app 显示 getFlag 方法的执行结果,定位到如下图所在的位置:
在这里插入图片描述将其修改为:
在这里插入图片描述4、保存修改后,点击“编译”按钮,将自动重新打包、编译、签名生成新的 APK 文件:
在这里插入图片描述5、点击“卸载”按钮,可自动卸载模拟器中该 APP:
在这里插入图片描述
6、点击安装,即可将新的 APK 文件安装到模拟器中并自动运行,可以看到程序的名称以被成功篡改了:
在这里插入图片描述
7、下面见证最后的奇迹,随意输入一个值,点击 go,可以看到成功篡改 APK 并借助弹窗信息获得想要的 flag 加密值:
在这里插入图片描述

总结

本文通过一道 CTF 题目,学习了 JEB 动态调试修改 APK 运行时内存值、函数返回值的目的,当然了这同样可以使用 Frida hook 来实现。同时还学习了 AndroidKiller 这款集成化逆向工具的使用,实现了篡改并自动打包新的 APK 的目的,从中也可以看出,对 APP 进行加壳、反调试、完整性校验的重要性。


http://chatgpt.dhexx.cn/article/lmsQCeS9.shtml

相关文章

php 抓站,如何跨站抓取别的站点的页面的补充

如何跨站抓取别的站点的页面的补充 更新时间:2006年10月09日 00:00:00 作者: 在实际的应用中,经常会遇到一些特殊的情况,比如需要新闻,天气预报,等等,但是作为个人站点或者实力小的站点 我们不…

用python计算ph,用python下载PH上的学习视频

努力学习,天天向上 闲来无事,用python写个脚本下载PH上的学习视频 环境:python3 用法:python ph_downloader.py viewkey viewkey是PH上的一串字符 代码在 https://paste.ubuntu.com/p/jXVYD3NGP9 多线程下载,网络不好时…

浮标水质监测站--河流湖泊水库现场水质自动监测的解决方案

浮标水质监测站--河流湖泊水库现场水质自动监测的解决方案 什么是浮标水质监测站? 浮标水质监测站是设立在河流、湖泊、水库、近岸海域等流域内进行现场水质自动监测的监测仪器,是以水质监测仪为核心,运用传感器技术,结合浮标体…

html全屏背景视频特效,HTML5全屏背景视频特效插件Vidage.js源码

下面我们对HTML5全屏背景视频特效插件Vidage.js源码文件阐述相关使用资料和HTML5全屏背景视频特效插件Vidage.js源码文件的更新信息。 HTML5全屏背景视频特效插件Vidage.js源码 本特效是一款移动友好的基于HTML5插件Vidage.js实现全屏背景视频特效的代码。Vidage.js可以在手机或…

html背景图片只显示一张图片,img只显示图片一部分 或 css设置背景图片只显示图片指定区域(示例代码)...

17:14 2016/3/22 img只显示图片一部分 或 css设置背景图片只显示图片指定区域 background-position: 100% 56%; 设置背景图片显示图片的哪个坐标区域,图片左上角为0,0或0%,0%,右下角为高度和宽度,或100%,10…

html的背景图片设置

背景颜色:background-color,可用rgb、rgba、#off等进行设置 背景图片:background-img,可用网址或图片存放地址进行设置 平铺方式: background-repeat:repeat,在背景上只出现一张图片,没有设置…

Html手机web背景全屏,使用全屏背景的网页设计欣赏 全屏网页背景教程

使用全屏背景的网页设计欣赏 & 全屏网页背景教程 Sponsor 全屏的大背景网站之前分享过不少,这是2012年以及2013年的设计趋势,适合用全屏背景的网站有很多,比如摄影类、建筑类、餐厅美食行业等等。全屏背景不仅仅是一些插画及设计图&#…

html背景全屏,23个使用大背景的全屏网页设计作品

23个使用大背景的全屏网页设计作品 7月 20, 2015 评论 (2) Sponsor 在2013年的时候使用全屏背景或者大图片的网页开始流行起来,到了今年,还是经常看到这类风格的页面出现,可见这个趋势还是很流行的,值得运用。 一张大图再配合一个…

html点击图片可以放全屏,html:点击图片放大到全屏,再次点击缩回

做手机网页开发时,经常遇到的效果:点击某个不加链接的图片时,图片放大,当再次点击放大的图片时,图片缩回(实质上将层隐藏掉了)。 实现思路: 准备原材料:一个遮档整个屏幕的不透明接近黑色的背景层( ),一个位于背景层之上的图片容器( ) ; 加工过程:当点击不加链接的图…

利用css 把背景图片全屏铺满

1.html代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!--引入我自己写的css文件--><link text"text/css" rel"stylesheet" href"../cs…

html5设置全屏背景图,HTML5 body设置全屏背景图片 如何让body的背景图片自适应整个屏----实战经验...

用什么代码实现&#xff1f;不允许有白色底色产生&#xff0c;因为手机高度不一样 错误的写法&#xff1a;加到div中结合图片设置min-height&#xff0c;但是页面不会回弹 话不多说直接上代码 终极方案 html,body{ width:100%; height:100% } 再加一段 body{ font-family: &quo…

html背景图片手机端全屏,css 背景图全屏显示,兼容移动端

.login { background: url(img/login.jpg) no-repeat center center; background-size: cover; background-attachment: fixed;//当页面的其余部分滚动时&#xff0c;背景图像不会移动。 width: 100%; height: 100%; position: fixed; top: 0; left: 0; right: 0; bottom: 0; }…

HTML全屏背景图

当我们在写前端页面的时候为了页面的美观我们通常会为页面设置图片背景&#xff0c;那么我们如何来设置全屏的背景图呢&#xff1f;&#xff1f;&#xff1f; 设置全屏背景图需要三个属性 background-image: url(img/untitled.png);background-repeat: no-repeat;background-s…

html怎么设置背景图 一张图平铺,html怎么设置背景图片全屏平铺?_WEB前端开发...

ps画笔工具快捷键是什么&#xff1f;_WEB前端开发 ps画笔工具的快捷键是“B”&#xff1b;默认使用前景色绘图&#xff0c;通过设置后可以多种色彩一起绘制。ps的画笔分为了4类&#xff1a;常规画笔、干介质画笔、湿介质画笔、特殊效果画笔。 html怎么设置背景图片全屏平铺&…

html背景图片如何自动平铺,html怎么设置背景图片全屏平铺?

html怎么设置背景图片全屏平铺&#xff1f; 1、新建一个html文档。 2、设置一下HTML的框架&#xff0c;然后把图片设置在同一个文件夹里面。 3、加入&#xff0c;这样可以有样式设置。 4、因为背景设置在主体&#xff0c;所以还要定义为body{}。 5、background-image:url(图片)…

html 怎么让背景图铺满整个页面

为了让背景图片铺满整个页面&#xff0c;我们可以这样设置&#xff1a; 第一、页面只有屏幕大小&#xff1a; background: url(../images/banner.jpg) no-repeat;background-size: 100% 100% ; 如果页面大于屏幕时&#xff0c;如果滑动就会出现白板 第二、页面随内容大小变化…

自媒体大咖啡馆钦佩的5个流行点标题规则

由于大多数自媒体浏览方式都是受手机界面限制的手机&#xff0c;因此读者通常会看到标题然后看内容。如果在看到标题时不允许读者阅读冲动&#xff0c;则读者不能被标题所吸引。进入&#xff0c;媒体文章基本上可以宣告失败。因此&#xff0c;媒体文章标题的发音与传统新闻&…

《惢客创业日记》2020.06.19(周五)为“创业日记”写序(五)

今天&#xff0c;继续给您分享《惢客创业日记》这本书的第五个序&#xff0c;提到这个人&#xff0c;不得不让我想起面试的那一幕&#xff0c;记得当时&#xff0c;他留着长头发&#xff0c;一身艺术范儿&#xff0c;再加上长的白白净净&#xff0c;一幅小鲜肉模样&#xff0c;…

你什么都没错,只是太老了。

我从业到现在已经十年多了&#xff0c;这个问题是我从业五到七八年时最苦恼的话题。当时觉得这个世界太不友好了&#xff0c;互联网这个行业全是年轻人&#xff0c;30岁以上就压力非常大&#xff0c;我缓解这种压力的方式就是每个周末必须得去做一些我认为比较有意义的事。 说…

王高飞:微博已收购一直播 明年一季度重点是功能与流量打通

雷帝网 乐天 11月29日报道 微博首席执行官王高飞昨日在电话会议中表示&#xff0c;刚刚过去的十月&#xff0c;微博对一直播进行了收购&#xff0c;在未来的一到两个季度内&#xff0c;微博的工作重点是改善目前的产品。 “我们在明年的一季度重心可能会放在一直播产品和微博产…