Android渗透测试12:IDA动态调试so

news2024/12/25 0:07:35

0x00 前言

上一篇分享了使用 Android studioJeb 对 Apk 文件直接进行动态调试,本文将分享使用 IDA pro 调试
so

调试的 apk 文件还是使用 CTF案例4 的文件,已经上传到知识星球,可自行下载

本文涉及技术:

  • IDA pro 工具使用

  • 调试android 应用

  • 动态调试技术

注意:本案例所需要的 apk 文件,已经上传到知识星球,需要的朋友可以到文末关注后下载

0x01 准备

1、下载案例 Apk 文件

使用 Android Killer 工具修改配置文件,加上 android:debuggable=“true” 这个配置,这样 apk
就可以被调试了。

1660661572_62fbaf44874ec390c7f1a.png!small?1660661572861

2、找到IDA_Pro_v7.5_Portable\dbgsrv目录,里面文件对应不同平台的 server 文件:

1660661588_62fbaf5447e56247a4f11.png!small?1660661588781

3、查看手机的 cpu 架构:

1660661601_62fbaf6145f9d7bb70888.png!small?1660661601912

4、调试的手机是 android 的 arm64-v8a,可以选择 android_server64 ,把这个文件发送到
手机的/data/local/tmp目录,然后赋予执行权限,最后执行。

1660661613_62fbaf6d01e4e49ed0d57.png!small?1660661613146

默认的端口是 23946 ,这里故意改为 22222

5、端口转发

adb forward tcp:11111 tcp:22222    

这里表示将本地 11111 端口(我本机是 windows),转发到远程手机 22222 端口:

1660661630_62fbaf7e6c3dc47200030.png!small?1660661630518

准备工作做好之后,将讲解两种方式调试,一种就是普通启动 apk 的调试,一种是以 Debug 模式启动 apk
的调试。如果调试的代码逻辑,在启动之后,则可以使用普通启动apk的调试模式,如果调试的代码逻辑在启动的时候就执行了,这时需要使用 Debug 模式启动
Apk 进行调试。

0x02 普通模式调试

1、adb 启动对应的 Activity,这里使用 普通模式启动 apk

adb shell am start -n  com.example.hellojni/com.example.application.IsThisTheRealOne 

2、打开 IDA pro 64 位版本,加载 arm64-v8a 中 libhello-jni.so 文件

3、IDA 调试配置

选择 Remote ARM Linux/Android debugger 调试

1660661646_62fbaf8ecbf4548ed9799.png!small?1660661647218

选择 Debugger options 勾选以下三个选项

1660661671_62fbafa75122a8381f6e1.png!small?1660661671685

选择 Process options 进行配置:

1660661678_62fbafae9f641ac58d6d5.png!small?1660661679030

选择需要 attach 的进程

1660661689_62fbafb9ec67d1aaa3d21.png!small?1660661690100

4、出现 Debugger warning

这表示在手机中找到和本地加载相同的 so 文件,选择 same:

1660661704_62fbafc8bc4133fcef502.png!small?1660661705133

5、在模块中搜索,需要调试的模块

1660661714_62fbafd224aad1de56342.png!small?1660661714420

然后定位要打断点的函数:

1660661730_62fbafe20cd95c01aa627.png!small?1660661730249

6、打断点

这里可以直接使用快捷键 F5 ,然后在 c/c++ 的伪代码里打断点:

1660661744_62fbaff0243ab0bb174ac.png!small?1660661744548

7、开始调试

点击 Quick debug view ,打开 Locals 窗口,F9 运行,F8 单步步过,进行调试

1660661756_62fbaffc4927544038e63.png!small?1660661756521

8、 成功拿到 flag 值。

0x03 Debug模式调试

1、打开 Android device monitor 工具

这个工具在 Android studio 的Android\Sdk\tools目录下

2、以 Debug 模式 启动 apk的 Activity

adb shell am start -D -n  com.example.hellojni/com.example.application.IsThisTheRealOne

发现在 Android device monitor 中,将要调试的程序前面,多了一个 红色的虫子

1660661774_62fbb00ed6ad6ff076fab.png!small?1660661775093

3、打开 IDA ,加载 so(同上)

4、IDA 调试配置,勾选三项等,找到要调试的进程(同上)

5、执行 jdb 命令

jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8608

这里的端口,可以在 Monitor 中查看到

执行完成之后, 红色的虫子变为绿色的虫子 ,接着就可以开始调试了

1660661788_62fbb01c9c3a74578934b.png!small?1660661788770

6、开始调试,按 F9 ,知道出现

1660661804_62fbb02cd6fc89d2bba82.png!small?1660661805156

这个时候就加载到需要调试的 so 了

7、在模块中查找需要调试的模块,以及模块中的具体函数(同上)

1660661813_62fbb03553de9e3fd5eb0.png!small?1660661813894

8、继续调试

打开 Locals 查看变量,

1660661831_62fbb0478bcce9c22276c.png!small?1660661831779

成功拿到 flag 值。

0x04 结语

在 Android 逆向中,动态调试是非常重要的一个技术,IDA pro 时调试 so 代码的利器。感兴趣的朋友,可以下载案例的 apk 文件,实战起来。

s 查看变量,

[外链图片转存中…(img-taWTTYnM-1674869592787)]

成功拿到 flag 值。

0x04 结语

在 Android 逆向中,动态调试是非常重要的一个技术,IDA pro 时调试 so 代码的利器。感兴趣的朋友,可以下载案例的 apk 文件,实战起来。

网络安全工程师企业级学习路线

这时候你当然需要一份系统性的学习路线

如图片过大被平台压缩导致看不清的话,可以在文末下载(无偿的),大家也可以一起学习交流一下。

一些我收集的网络安全自学入门书籍

一些我白嫖到的不错的视频教程:

上述资料【扫下方二维码】就可以领取了,无偿分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/183220.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文解读 - 城市自动驾驶车辆运动规划与控制技术综述 (第4部分)

文章目录🚗 IV. Mothon Planning(运动规划)🟢 D. Graph Search Methods(图搜索算法)🟥 1) Lane Graph(车道图)🟧 2) Geometric Methods(几何方法&…

AtCoder Beginner Contest 287 A-G 赛时思路+正解

一把给我加到1219了,青大小蒟蒻表示很开心。 A - Majority 题意 问你"For""For""For"字符串数量是否比"Against""Against""Against"数量多。 思路 mapmapmap暴力即可。 A题代码 B - Postal Card 题意…

电脑技巧:教你关闭Win11内存压缩,解决电脑卡顿的问题

很多朋友都注意到,Win11默认开启了内存压缩功能。内存压缩顾名思义,可以压缩内存中的数据,让内存占用更少,同时减少Swap频次,带来更高的I/O效率。 但与此同时,压缩数据需要耗费CPU资源,一些朋友…

Dr4g0n-b4ll靶机总结

Dr4g0n-b4ll靶机渗透测试总结 靶机下载地址: https://download.vulnhub.com/dr4g0nb4ll/Dr4g0n-b4ll.zip 打开靶机,使用nmap扫描靶机的ip和所有开放的端口 可以看到靶机开放了80端口和22端口 根据80端口打开网站 信息收集,目录爆破 在robots.txt下发现一串base64编码 eW91IG…

编写循环(RH294)

循环这东西你早就懂的不是么就像python里的for一样在ansible中 使用loop关键字来实现迭代简单循环简单循环中一般使用loop关键字来开始循环使用循环变量item来存储每个迭代过程中使用的值举个例子 栗子啊首先让我们拿出两个任务片段- name: Postfix is runningservice:name: po…

索引15连问

前言 大家好,我是田螺。 金三银四很快就要来啦,准备了索引的15连问,相信大家看完肯定会有帮助的。 公众号:捡田螺的小男孩 1. 索引是什么? 索引是一种能提高数据库查询效率的数据结构。它可以比作一本字典的目录&am…

从C语言的使用转换到C++(下篇)——刷题、竞赛篇

目录 一、CSTL的简介 二、STL的使用详解 2、1 STL之动态数组vector的使用 2、2 STL之集合set的使用 2、3 STL之映射map的使用 2、4 STL之栈stack的使用 2、5 STL之队列queue的使用 2、6 STL之unordered_map和unordered_set的使用 三、总结 标题:从C语言的使用转换…

还不会SpringBoot项目模块分层?来这手把手教你

文章目录前言🍊缘由⏲️本文阅读时长🎯主要目标👨‍🎓试用人群🎁快速链接🍩水图正文🥫1.IDEA新建项目🌭2.创建子模块-dependencies(依赖层)🎯重点🍪3.创建子模…

【寒假小练】day2

前言 日积跬步&#xff0c;能至千里。 水平有限&#xff0c;不足之处望请斧正。 选择题 1、以下程序运行后的输出结果是( ) #include <stdio.h> void fun(char **p) {int i;for(i 0; i < 4; i) {printf("%s", p[i]); } int main() {char *s[6] {"…

Python 本地django外部网络访问

目录 一、前提 1、确定在本地可以访问 二、 本地django项目外部网络访问 1、在settings中配置允许所有服务器访问&#xff08;局域网访问&#xff09; 2、Host配置 3、使用内网穿透工具&#xff08;ngrok&#xff09;&#xff08;外部网络访问&#xff09; &#xff08;…

Acwing---1224. 交换瓶子

交换瓶子1.题目2.基本思想3.代码实现1.题目 有 N 个瓶子&#xff0c;编号 1∼N&#xff0c;放在架子上。 比如有 5个瓶子&#xff1a; 2 1 3 5 4 要求每次拿起 2 个瓶子&#xff0c;交换它们的位置。 经过若干次后&#xff0c;使得瓶子的序号为&#xff1a; 1 2 3 4 5 对于这…

【第26天】SQL进阶-查询优化- performance_schema系列实战二:锁问题排查(MDL锁)(SQL 小虚竹)

回城传送–》《32天SQL筑基》 文章目录零、前言一、什么是MDL锁二、什么时候适合加MDL锁三、 实战演练3.1 数据准备&#xff08;如果已有数据可跳过此操作&#xff09;3.2 开启第一个会话&#xff0c;显式开启一个事务&#xff0c;并执行一个update语句不提交3.3 开启第二个会话…

机器自动翻译古文拼音 - 十大宋词 - 水调歌头 明月几时有 苏轼

水调歌头明月几时有 北宋苏轼 明月几时有&#xff0c;把酒问青天。 不知天上宫阙&#xff0c;今夕是何年。 我欲乘风归去&#xff0c;又恐琼楼玉宇&#xff0c;高处不胜寒。 起舞弄清影&#xff0c;何似在人间&#xff1f; 转朱阁&#xff0c;低绮户&#xff0c;照无眠。 不应…

idea 配置tomcat 运行jsp项目

1、复用idea打开jsp项目 2、添加tomcat配置 3、点击后会出现配置框,这里画框的地方都选上&#xff0c;版本选择1.8&#xff0c;其他的信息内容默认后&#xff0c;点击确认 4、点击 File->Project Structure,弹出界面选择Project&#xff0c;这里sdk选择1.8&#xff0c;语言选…

#7反转链表#

反转链表 1题目链接 链接 2思路 思路1(暴力): 定义两个指针或者三个指针 这里选择三个指针 清晰一点 头部 头部的下一个 头部的下一个的下一个 n1 n2 n3 做好n2和n1的连接: n2->nextn1 然后: n2n1 n3n2 n3n3->next 相当于三个指针都往…

JAVA混合使用函数式接口(BiPredicate和Consumer)、泛型、lambda表达式、stream流,优化List求交集和差集后的通用处理

文章目录前言项目场景两个List求交集和差集BiPredicate和Consumer基本介绍优化目标一步步优化代码最后前言 本文主要讲的是一个小的功能代码的优化案例&#xff0c;用到的知识点主要包括函数式接口&#xff08;BiPredicate和Consumer&#xff09;、泛型、lambda表达式、stream…

100天精通Python(数据分析篇)——第73天:Pandas文本数据处理方法之查找、替换、拼接、正则、虚拟变量

文章目录每篇前言一、Python字符串内置方法1. 文本查找2. 文本替换3. 文本拼接4. 正则提取二、Pandas实现文本查找1. str.startswith(字符串)2. str.endswith(字符串)3. str.index(字符串, start0, endlen(string))4. str.rindex(字符串, start0, endlen(string))5. str.find(字…

工具技巧和读文档 | 读函数式编程接口文档 | 匿名内部类 | lambda表达式 |IDEA

Function接口&#xff0c;函数式接口 按入参返回值分类&#xff0c;大概分为4种类型&#xff0c;再加上多个入参就又多了Bi开头的两种。 有CtrlP的时候不懂参数列表该写啥&#xff0c;就先CtrlALT看下入参类型的相关实现类&#xff01; 一些实用的快捷键&#xff1a;Ctrl P看参…

AORT:一款功能强大的多合一网络侦查与数据收集工具

关于AORT AORT是一款功能强大的多合一网络侦查与数据收集工具&#xff0c;该工具的主要目的是帮助漏洞Hunter和渗透测试人员完成网络侦查环节的各类任务。AORT基于Python开发&#xff0c;使用起来非常简单且方便&#xff0c;并且支持跨平台&#xff08;只要安装了Python 3即可…

怒删虚拟机,FPGA开发新宠-几步在Windows上安装桌面化Linux

Linux上运行Vivado这类EDA工具要比Window上快很多&#xff0c;大概就是优化的问题&#xff0c;所以选择Linux上开发是一个比较好的选择&#xff08;主要是免费&#xff09;。国内习惯了Win系统&#xff0c;所以用Linux比较少&#xff0c;那么有没有既可以在Windows上做一些文档…