《来自高纬的对抗:替换安卓内核并解封Linux命令和环境》

百家 作者:OPPO安全应急响应中心 2020-08-19 22:17:43





以上文章由作者【r0ysue】的连载有赏投稿,共有五篇,本文为第五篇;也欢迎广大朋友继续投稿,详情可点击OSRC重金征集文稿!!!了解~~
温馨提示:建议投稿的朋友尽量用markdown格式,特别是包含大量代码的文章





  • Kali Nethunter

  • 安卓内核替换

  • 完整Linux环境

  • 监控内核调用

  • 制作路由器抓包


在前文《定制安卓内核过反调试》中,已经体验过修改内核源码并编译,从根本上绕过TracerPid检测的反调试的威力。

也就是说,只要对安卓内核足够熟悉,加上对AOSP源码的深刻理解,是可以开启安卓系统的上帝模式,即人与系统的完美融合,实现对加解密(一代壳:整体型、二代壳:函数抽取型)、框架检测、反调试等技术的bypass的。

作为本系列的最后一篇,再介绍一种对读者来说非常实用的技术,也是通过“降维打击”的思路来实现,那就是替换安卓内核,解封完整Linux系统命令,使用内核命令过滤收发包,实现彻底解决抓不到包的问题。

本文所涉及的环境、实验数据结果及代码资料等都在作者的Github:https://github.com/r0ysue/AndroidSecurityStudy上,欢迎大家取用和star~

大家知道在Linux上,我们想要对数据封包进行统计、定位、可视化、分析和转储等,有一系列的工具和软件。比如:

  • jnettop:得到通讯IP、端口、URL、速率信息;

  • nethogs:按进程、端口、PID分类整理收发包速率

  • htop:当前系统负载、前台活跃进程、线程和占用

  • netstat -tunlp:端口对应进程号、监听、收发包端口

  • tcpdump:网口收发包转储工具,后续供Wireshark分析

  • Wireshark:网络封包分析软件,网络数据瑞士军刀

  • mitmproxy/Charles/BurpSuite:应用层协议分析工具

  • iwlist/aircrack-ng/HID:网卡、无线网络、无线键盘等驱动

等很多优秀的工具,这些工具为我们进行网络数据封包的分析和处理提供了无与伦比的支持,可以说有这些工具的存在,没有抓不到的包,如果再结合hook技术,可以说没有解不开的协议。

工具虽好,但是它们的运行都需要一个完整的Linux环境,比如像jnettop/htop/nethogs等需要root权限,像iwlist/aircrack/HID等需要内核驱动支持、监听模式的打开等,Wireshark/Charles/BP会需要桌面环境的支持,在GUI中进行可视化分析。

有没有一种可能性,在手机上可以跑上述所有的软件,让手机成为网络数据封包和协议分析的“瑞士军刀”,虽然GUI部分有些鸡肋聊胜于无(因为手机屏幕肯定太小了),但是纯Linux的环境、还跑在arm芯片上,听着就灰常吸引人,最关键的是直接从内核读取App的进程、网络、文件、内存等信息,实现从内核层到应用层的“降维打击”,这才是“瑞士军刀”的核心竞争力,也是本系列文章的主旨。

这个可能性是有的,那就是Kali Nethunter,接下来让我们一起来探索下,Kali Nethunter能为App的逆向分析、抓包解包分析工作,带来哪些帮助。

Kali Nethunter

20204月初,Kali在其官方博客上释出了最新的Kali Nethunter 2020.1,带来了船新的Kali NetHunter RootlessKali NetHunter Lite,同时对完整版Kali Nethunter进行了更加深入的优化,使用了全新的内核编译工具,从内核全面支持USB键盘、光驱和网卡模拟,功能更加强大,系统更加稳定。

新的Nethunter针对不同的版本,有不同的要求,并且可以实用的功能也不同。

官方甚至还提供了对照表,表明哪些功能在哪些版本上是否存在:

虽然Nethunter Rootless可以在任意手机上安装和使用Kali Linux的功能,但是官方博客却说,Nethunter Rootless可以最多只有85%的威力,带root、三方recoveryKali定制内核的完整版Nethunter才能发挥100%的威力,作为专业的逆向工程分析师,我们肯定选择100%威力的。

Kali Nethunter的完整镜像不是所有手机都能装的,只有官网支持的设备才能装。这里使用Nexus 6p(angler)进行举例,主要流程分四步:

  • 刷入官方原版镜像:

  • 三方recovery:肯定是twrp

  • root:选择经典的SuperSU

  • 刷入Kali Nethunter

刷入原版镜像的过程不再赘述,相信看完前文内容掌握这个技能还是绰绰有余的,这里采用的是官网的安卓8.1.0版本号的第一个下载链接。

刷机结束后,从附件里找到SR5-SuperSU-v2.82-SR5-20171001224502.zip,上传到手机上。

# adb push SR5-SuperSU-v2.82-SR5-20171001224502.zip /sdcard/SR5-SuperSU-v2.82-SR5-20171001224502.zip: 1 file pushed, 0 skipped. 14.4 MB/s (6882992 bytes in 0.4

用附件的种子nethunter-2020.2-pre3-angler-oreo-kalifs-full.zip.torrent,下载n6pNethunter,下载完算下校验码,再上传到手机上去。

# adb push nethunter-2020.2-pre3-angler-oreo-kalifs-full.zip /sdcard/nethunter-2020.2-pre3-angler-oreo-kalifs-full.zip: 1 fi...hed, 0 skipped. 16.7 MB/s (1317485081 bytes in 75.189s)

手机重启进入bootloader

# adb reboot bootloader

在附件里找到twrp-3.3.1-0-angler.img,用fastboot刷入进去;

# fastboot flash recovery twrp-3.3.1-0-angler.img target reported max download size of 494927872 bytessending 'recovery' (16844 KB)...OKAY [  2.019s]writing 'recovery'...OKAY [  0.246s]finished. total time: 2.265s

刷完之后按音量向下键,选择Recovery mode,按电源键进入。

进入Recovery之后,选择InstallSR5-SuperSU-v2.82-SR5-20171001224502.zip开始刷机。

刷完之后选择RebootDo Not Install重启进入系统(可能会重启数次)。

进入系统之后发现已经有了root

# adb shellangler:/ $ su  angler:/ # whoamiroot

再次进入recovery,把nethunter-2020.2-pre3-angler-oreo-kalifs-full.zip.torrent刷进去,中间解压Kali rootfs的过程,会至多25分钟。

刷机结束后进入系统首次也要先点击Nethunter的应用,申请的所有权限都给,左侧导航进入Kali Chroot Manager,点击START KALI CHROOT,只要初始化这一次,后续无论如何重启都会出现如图所示的Everything is fine and Chroot has been started!

至此详细刷机流程结束。

安卓内核替换

开机后发现首先内核已经被替换掉了。

(这里又换了台nexus 5x,刷机方法与上述一模一样)

刷之前是谷歌团队编译的内核,刷之后是kamarush@krsh编译的,具体二者有哪些不同呢?其实可以在官方文档:nethunter-kernel-1-patching找到答案。

可以知道这个内核是在标准安卓内核的基础上,给它打的patch,主要是对网络功能、WIFI驱动、SDR无线电、HID模拟键盘等功能在内核层面添加支持和驱动,打开模块和驱动加载支持等,文档内容很新,都是四月份最新更新的。

利用这个定制内核,普通的安卓手机就可以进行诸如外接无线网卡使用Aircrack-ng工具箱进行无线渗透,模拟鼠标键盘进行HID Badusb攻击,模拟CDROM直接利用手机绕过电脑开机密码,一键部署Mana钓鱼热点等功能。

当然这些对我们进行安卓App的逆向好像关系不是很大,关系比较大的在于Kali Nethunter在安卓手机里,装上了一个完整的Linux环境,也就是第二套系统:Kali Nethunter

完整Linux环境

这个环境有多完整呢,完整到可以连上显示器和键鼠,直接成为一台电脑,直接把桌面环境带着走。

当然,首先从简单的看起,

1.点开Nethunter这个app,给它所有的权限,左上角选择Kali Chroot Manager页面,看到chroot系统初始化完成。

2.点开Nethunter终端这款App,选择KALI,进入Kali系统。

3.apt update升级系统中的软件库信息。

4.apt install neofetch htop jnettop,分别康康安卓系统明显不带的这些只有完整linux环境才能跑的命令能不能执行,可以看到支援的非常完美。

5.点开Nethunter这个app,左上角切换到KeX Manager标签页,点击“SETUP LOCAL SERVER”,会要求输入一个连接密码和显示密码,输入和确认即可,然后点击“START SERVER”开启服务器。点开“KeX Client”这个App,在密码那一栏输入密码之后,点击“Connect”进行连接,即可直接进入Kali Nethunter操作系统的桌面。


6.搭配QtScrcpy就可以在电脑上观看手机屏幕上的内容,还可以输入命令,不用怼着手机屏幕了。

7.搭配wifiadb,可以连手机数据线都省掉了。

8.这个桌面的环境非常的完整,比如它有Java的环境,可以直接运行Java的大型应用,比如这个用loader加载的盗版BurpSuite2020.06,(请支持正版)。

9.可以直接使用Wireshark抓所有网卡上的包,可以看到连手机SIM卡的网口都可以直接抓,功能十分强大。

10.charles竟然不支持arm64,看来无缘明年的macOS了。

11.pythonpython3都有,python的环境也不用担心。只是frida由于没有armegg,源码编译笔者也试过好几天,都失败了,如果有大佬可以在arm上编译frida,希望不吝赐教。

12.点开Nethunter这个app,切换到Kali Services,将SSH启动并且勾选Start at Boot,这样就拥有了sshd,可以在电脑上操作手机上的命令行了。比如直接查看App的以下信息:

为什么我们在Kali的系统中,可以获取到App如此诸多的信息?因为Kali系统是与安卓共用同一个内核的,Kali只是把内核信息打印出来而已,只是这些内核信息中,携带了App的网络、进程、文件系统等信息。

那想从Kali nethunter中获取App的更多信息,有办法做到么?当然是可以的。

监控内核调用

大佬的文章《来自高维的对抗 - 逆向TinyTool自制》中实现的系统调用监控模块,从内核打印一份syscall的调用记录,其实在完整的linux环境中,是直接支持的,那就是strace命令。

strace是一个可用于诊断和调试Linux用户空间syscall跟踪器,可以用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等,strace的底层使用也是使用的内核的ptrace特性来实现其功能。

当然要分析系统调用,首先得介绍下什么是系统调用,系统调用是指运行在用户空间的程序向操作系统内核请求需要更高权限运行的服务,系统调用提供用户程序与操作系统内核之间的接口。

大家都知道操作系统的进程空间分为用户空间和内核空间,操作系统内核直接运行在硬件上,提供设备管理、内存管理、任务调度等功能;而用户空间通过API请求内核空间的服务来完成其功能——内核提供给用户空间的这些API, 就是系统调用。

在安卓(Linux)系统上,应用代码通过bionic-C/glibc库封装的函数,间接使用系统调用。而某些加固会通过静态编译bin/so文件或通过svc汇编指令实现绕过libc而直接进行系统调用,这样我们hook/trace libc也得不到其运行流程,自然无法改变其运行结果。

安卓有三百多个系统调用,具体可以通过man syscall命令来查看。

这三百多个系统调用大部分可以分为以下几个种类:

  • 文件和设备访问类:比如open/close/read/write/chmod

  • 进程管理类:fork/clone/execve/exit/getpid

  • 信号类:signal/sigaction/kill 等

  • 内存管理:brk/mmap/mlock

  • 进程间通信IPC:shmget/semget 信号量,共享内存,消息队列等

  • 网络通信 socket/connect/sendto/sendmsg 等

接下来实战一下,首先安装这个命令:

# apt install strace
  • 跟踪一下cat 1.txt这个命令使用了哪些syscall

  • 找到某恶意应用的pid,并观察它在干什么:

  • 将输出保存到文件中

# strace -p 27531 -o 27531.txtstrace: Process 27531 attachedstrace: [ Process PID=27531 runs in 32 bit mode. ]strace: WARNING: Proper structure decoding for this personality is not supported, please consider building strace with mpers support enabled.^Cstrace: Process 27531 detached
  • 稍等一会儿文件会膨胀到数兆

# du -h *1.2M    27531.txt
  • 寻找打开过哪些文件,可能如果是文件型的一代壳在这里就可以脱壳了。

# cat 27531.txt |grep -i openopenat(AT_FDCWD, "/data/app/com.ilulutv.fulao2-OY-Rxd8TtjlQqOrdtNmoHA==/base.apk", O_RDONLY|O_LARGEFILE) = 66openat(AT_FDCWD, "/dev/ashmem", O_RDWR|O_LARGEFILE) = 66
openat(AT_FDCWD, "/dev/ashmem", O_RDWR|O_LARGEFILE) = 44openat(AT_FDCWD, "/dev/ashmem", O_RDWR|O_LARGEFILE) = 44openat(AT_FDCWD, "/data/user/0/com.ilulutv.fulao2/files/Fulao2", O_RDONLY|O_LARGEFILE|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (No such file or directory)openat(AT_FDCWD, "/dev/ashmem", O_RDWR|O_LARGEFILE) = 78openat(AT_FDCWD, "/dev/ashmem", O_RDWR|O_LARGEFILE) = 44openat(AT_FDCWD, "/dev/ashmem", O_RDWR|O_LARGEFILE) = 44openat(AT_FDCWD, "/data/app/com.ilulutv.fulao2-OY-Rxd8TtjlQqOrdtNmoHA==/base.apk", O_RDONLY|O_LARGEFILE) = 44openat(AT_FDCWD, "/dev/ashmem", O_RDWR|O_LARGEFILE) = 44openat(AT_FDCWD, "/dev/ashmem", O_RDWR|O_LARGEFILE) = 94openat(AT_FDCWD, "/dev/ashmem", O_RDWR|O_LARGEFILE) = 113openat(AT_FDCWD, "/data/user/0/com.ilulutv.fulao2/files/Fulao2", O_RDONLY|O_LARGEFILE|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (No such file or directory)openat(AT_FDCWD, "/dev/ashmem", O_RDWR|O_LARGEFILE) = 124openat(AT_FDCWD, "/data/app/com.ilulutv.fulao2-OY-Rxd8TtjlQqOrdtNmoHA==/base.apk", O_RDONLY|O_LARGEFILE) = 124openat(AT_FDCWD, "/dev/ashmem", O_RDWR|O_LARGEFILE) = 124
  • 过滤recvfrom的接受数据,可以打开个视频流媒体,观察到疯狂接受数据;

# cat 27531.txt |grep -i recvrecvfrom(122, "h\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\236\222\16\346\32)\0\0\257'z>\366\220\n?"..., 26624, MSG_DONTWAIT, NULL, NULL) = 1664recvfrom(122, "h\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0p\374\27\371\32)\0\0\205\373\201>\37\35\10?"..., 26624, MSG_DONTWAIT, NULL, NULL) = 1664recvfrom(122, "h\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0U3!\f\33)\0\0g&\223>\37\35\10?"..., 26624, MSG_DONTWAIT, NULL, NULL) = 832recvfrom(122, "h\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\366\347\245\25\33)\0\0]o\204>\37\35\10?"..., 26624, MSG_DONTWAIT, NULL, NULL) = 1664recvfrom(122, "h\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0V$\257(\33)\0\0004\343\206>\366\220\n?"..., 26624, MSG_DONTWAIT, NULL, NULL) = 832recvfrom(122, "h\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\264\35032\33)\0\0\257'z>\342\312\v?"..., 26624, MSG_DONTWAIT, NULL, NULL) = 1664recvfrom(122, "h\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0b\233=E\33)\0\0]o\204>\vW\t?"..., 26624, MSG_DONTWAIT, NULL, NULL) = 832recvfrom(122, "h\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0p{\302N\33)\0\0H\241a>H\251\5?"..., 26624, MSG_DONTWAIT, NULL, NULL) = 1664recvfrom(122, "h\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\207\1\314a\33)\0\0]\17\177>\vW\t?"..., 26624, MSG_DONTWAIT, NULL, NULL) = 832recvfrom(122, "h\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0(\303Pk\33)\0\0H\241a>\vW\t?"..., 26624, MSG_DONTWAIT, NULL, NULL) = 1664recvfrom(122, "h\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\2605Z~\33)\0\0H\241a>\37\35\10?"..., 26624, MSG_DONTWAIT, NULL, NULL) = 832recvfrom(122, "h\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0K\31\337\207\33)\0\00043D>\342\312\v?"..., 26624, MSG_DONTWAIT, NULL, NULL) = 1664recvfrom(122, "h\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\261\346\350\232\33)\0\0\1@u>\220\262\20?"..., 26624, MSG_DONTWAIT, NULL, NULL) = 832recvfrom(122, "h\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\17\344m\244\33)\0\0004\343\206>\342\312\v?"..., 26624, MSG_DONTWAIT, NULL, NULL) = 1664recvfrom(122, "h\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\267\326w\267\33)\0\0SXp>\366\220\n?"..., 26624, MSG_DONTWAIT, NULL, NULL) = 832
  • 可以加上-e trace=file参数,只跟踪和文件访问相关的调用(参数中有文件名)。直接定位出m3u8视频文件的路径。

# strace -p 1431 -e trace=file -o 1431file.txtstrace: Process 1431 attachedstrace: [ Process PID=1431 runs in 32 bit mode. ]strace: WARNING: Proper structure decoding for this personality is not supported, please consider building strace with mpers support enabled.^Cstrace: Process 1431 detached
# cat 1431file.txt |grep -i ilulufaccessat(AT_FDCWD, "/data/user/0/com.ilulutv.fulao2", F_OK) = 0faccessat(AT_FDCWD, "/data/user/0/com.ilulutv.fulao2/files", F_OK) = 0openat(AT_FDCWD, "/data/user/0/com.ilulutv.fulao2/files/fulao2.m3u8", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 73

还有一些过滤参数如下:
-e trace=process 和进程管理相关的调用,比如fork/exec/exit_group
-e trace=network 和网络通信相关的调用,比如socket/sendto/connect
-e trace=signal 信号发送和处理相关,比如kill/sigaction
-e trace=desc 和文件描述符相关,比如write/read/select/epoll等
-e trace=ipc 进程见同学相关,比如shmget等

另外一个非常有用的命令是lsof(list open files)是一个列出当前系统打开文件的工具。在Linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。

所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。

因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

比如将lsof的信息保存到文件,再新进过滤的话:

# lsof -p 10694 > 10694.txt
  • 可以直接看到App与远程服务器的通行信息;

# cat  10694.txt  |grep TCP.ilulutv. 10694    10106   33u     IPv6             607468       0t0    TCP *:1130 (LISTEN).ilulutv. 10694    10106   37u     IPv6             606867       0t0    TCP promote.cache-dns.local:43887->223.111.108.189:https (CLOSE_WAIT).ilulutv. 10694    10106   45u     IPv6             602914       0t0    TCP promote.cache-dns.local:45712->223.111.108.40:https (CLOSE_WAIT).ilulutv. 10694    10106   46u     IPv6             959562       0t0    TCP promote.cache-dns.local:49787->tsa03s06-in-f10.1e100.net:https (ESTABLISHED).ilulutv. 10694    10106   58u     IPv6             606720       0t0    TCP promote.cache-dns.local:45407->server-54-192-16-68.hkg62.r.cloudfront.net:https (ESTABLISHED).ilulutv. 10694    10106   70u     IPv6             603094       0t0    TCP promote.cache-dns.local:44281->112.25.43.107:https (CLOSE_WAIT).ilulutv. 10694    10106   75u     IPv6             606606       0t0    TCP promote.cache-dns.local:44282->112.25.43.107:https (CLOSE_WAIT).ilulutv. 10694    10106   80u     IPv6             606435       0t0    TCP promote.cache-dns.local:46874->server-54-192-16-55.hkg62.r.cloudfront.net:https (ESTABLISHED).ilulutv. 10694    10106   83u     IPv6             604772       0t0    TCP promote.cache-dns.local:43858->223.111.108.189:https (CLOSE_WAIT).ilulutv. 10694    10106   84u     IPv6             604766       0t0    TCP promote.cache-dns.local:49129->server-54-192-16-46.hkg62.r.cloudfront.net:https (ESTABLISHED).ilulutv. 10694    10106   94u     IPv6             606903       0t0    TCP promote.cache-dns.local:47059->server-143-204-129-49.sfo5.r.cloudfront.net:https (ESTABLISHED).ilulutv. 10694    10106  104u     IPv6             604779       0t0    TCP promote.cache-dns.local:43859->223.111.108.189:https (CLOSE_WAIT).ilulutv. 10694    10106  106u     IPv6             605724       0t0    TCP promote.cache-dns.local:43860->223.111.108.189:https (CLOSE_WAIT).ilulutv. 10694    10106  116u     IPv6             605731       0t0    TCP promote.cache-dns.local:43861->223.111.108.189:https (CLOSE_WAIT).ilulutv. 10694    10106  117u     IPv6             606523       0t0    TCP promote.cache-dns.local:43862->223.111.108.189:https (CLOSE_WAIT).ilulutv. 10694    10106  120u     IPv6             606529       0t0    TCP promote.cache-dns.local:43863->223.111.108.189:https (CLOSE_WAIT).ilulutv. 10694    10106  124u     IPv6             603017       0t0    TCP promote.cache-dns.local:43864->223.111.108.189:https (CLOSE_WAIT).ilulutv. 10694    10106  127u     IPv6             603019       0t0    TCP promote.cache-dns.local:43865->223.111.108.189:https (CLOSE_WAIT).ilulutv. 10694    10106  135u     IPv6             606556       0t0    TCP promote.cache-dns.local:43866->223.111.108.189:https (CLOSE_WAIT).ilulutv. 10694    10106  138u     IPv6             606561       0t0    TCP promote.cache-dns.local:43867->223.111.108.189:https (CLOSE_WAIT).ilulutv. 10694    10106  140u     IPv6             605786       0t0    TCP promote.cache-dns.local:43869->223.111.108.189:https (CLOSE_WAIT).ilulutv. 10694    10106  143u     IPv6             603052       0t0    TCP promote.cache-dns.local:43868->223.111.108.189:https (CLOSE_WAIT).ilulutv. 10694    10106  151u     IPv6             603059       0t0    TCP promote.cache-dns.local:43870->223.111.108.189:https (CLOSE_WAIT).ilulutv. 10694    10106  185u     IPv6             606873       0t0    TCP promote.cache-dns.local:43888->223.111.108.189:https (CLOSE_WAIT).ilulutv. 10694    10106  186u     IPv6             612044       0t0    TCP promote.cache-dns.local:43889->223.111.108.189:https (CLOSE_WAIT).ilulutv. 10694    10106  203u     IPv6             612078       0t0    TCP promote.cache-dns.local:44301->112.25.43.107:https (CLOSE_WAIT).ilulutv. 10694    10106  219u     IPv6             610446       0t0    TCP localhost:49965->localhost:1130 (ESTABLISHED).ilulutv. 10694    10106  221u     IPv6             610449       0t0    TCP localhost:1130->localhost:49965 (ESTABLISHED)
  • 可以直接看到打开的so文件:

# cat  10694.txt  |grep ".so".ilulutv. 10694    10106  mem       REG              259,9    826816   1649 /system/lib/libblas.so.ilulutv. 10694    10106  mem       REG              259,9   1246476   1617 /system/lib/libRSCpuRef.so.ilulutv. 10694    10106  mem       REG              259,9    828740   1647 /system/lib/libbcinfo.so.ilulutv. 10694    10106  mem       REG              259,9    162432   1618 /system/lib/libRSDriver.so.ilulutv. 10694    10106  mem       REG              259,9    252484   1619 /system/lib/libRS_internal.so.ilulutv. 10694    10106  mem       REG              259,9     45756   1777 /system/lib/libqdutils.so.ilulutv. 10694    10106  mem       REG              259,9     29088   1737 /system/lib/libmemalloc.so.ilulutv. 10694    10106  mem       REG              259,9     16132   1776 /system/lib/libqdMetaData.so.ilulutv. 10694    10106  mem       REG              259,9     37676   1779 /system/lib/libqservice.so.ilulutv. 10694    10106  mem       REG              259,7              343 /vendor/lib/hw/gralloc.msm8992.so (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              253,0           352102 /data/app/com.ilulutv.fulao2-OY-Rxd8TtjlQqOrdtNmoHA==/lib/arm/libpl_droidsonroids_gif.so (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              253,0           352094 /data/app/com.ilulutv.fulao2-OY-Rxd8TtjlQqOrdtNmoHA==/lib/arm/libcipher-lib.so (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              259,7              455 /vendor/lib/libllvm-glnext.so (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              259,7              309 /vendor/lib/egl/libGLESv2_adreno.so (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              259,9     20304   1857 /system/lib/libwebviewchromium_loader.so.ilulutv. 10694    10106  mem       REG              259,9     32184   1666 /system/lib/libcompiler_rt.so.ilulutv. 10694    10106  mem       REG              259,7              306 /vendor/lib/egl/eglSubDriverAndroid.so (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              259,7              308 /vendor/lib/egl/libGLESv1_CM_adreno.so (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              259,7              444 /vendor/lib/libgsl.so (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              259,7              392 /vendor/lib/libadreno_utils.so (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              259,7              307 /vendor/lib/egl/libEGL_adreno.so (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              259,7              325 /vendor/lib/hw/android.hardware.graphics.mapper@2.0-impl.so (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              259,9    133776   1709 /system/lib/libjavacrypto.so.ilulutv. 10694    10106  mem       REG              259,9     46116   1797 /system/lib/libsoundpool.so.ilulutv. 10694    10106  mem       REG              259,9    781912   1853 /system/lib/libvixl-arm64.so.ilulutv. 10694    10106  mem       REG              259,9    159056   1629 /system/lib/libart-dexlayout.so.ilulutv. 10694    10106  mem       REG              259,9    872188   1852 /system/lib/libvixl-arm.so.ilulutv. 10694    10106  mem       REG              259,9   2135452   1628 /system/lib/libart-compiler.so
  • 可以直接看到/data/data目录下的相关信息,包括音视频缓存、数据库等。

# cat  10694.txt  |grep "/data".ilulutv. 10694    10106  mem       REG              253,0           352139 /data/app/com.ilulutv.fulao2-OY-Rxd8TtjlQqOrdtNmoHA==/oat/arm/base.odex (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              253,0           352239 /data/app/com.ilulutv.fulao2-OY-Rxd8TtjlQqOrdtNmoHA==/oat/arm/base.vdex (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              253,0           130879 /data/misc/shared_relro/libwebviewchromium32.relro (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              253,0           553088 /data/data/com.ilulutv.fulao2/cache/image_manager_disk_cache/5ac0849c922825f83614103fe2c8af81504425804c1ffef7caab3ea863f0d49b.0 (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              253,0           261832 /data/app/com.ilulutv.fulao2-OY-Rxd8TtjlQqOrdtNmoHA==/base.apk (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              253,0           553119 /data/data/com.ilulutv.fulao2/app_webview/Cookies (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              253,0           553089 /data/data/com.ilulutv.fulao2/cache/image_manager_disk_cache/e1bdfc488d9dcb35b8f87c1296491e23a7e3030385e3b642e7887295158e4f36.0 (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              253,0           553070 /data/data/com.ilulutv.fulao2/cache/image_manager_disk_cache/50a07d4dbc6bc0988fc09b0111e5c63a7a7b485ee0183c30a2eb6f06fc17b431.0 (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              253,0           553059 /data/data/com.ilulutv.fulao2/cache/image_manager_disk_cache/83588f8ff8f3d6c0b34b70b7e361186535b3f100a090eaaae4ec8a33a814ff59.0 (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              253,0           553158 /data/data/com.ilulutv.fulao2/cache/image_manager_disk_cache/6228f356158d2b8349cb4e4054a38ca052bd3616b606bdf2ffa4a7d2bfaa8395.0 (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              253,0           553091 /data/data/com.ilulutv.fulao2/cache/image_manager_disk_cache/1c3f0d13cf068d44f8a1992a4fb730614a96a3499902e42c3a672f0d8c70567e.0 (stat: No such file or directory).ilulutv. 10694    10106  mem-r     REG              253,0           553084 /data/data/com.ilulutv.fulao2/app_webview/Web Data (stat: No such file or directory).ilulutv. 10694    10106  mem-r     REG              253,0           553068 /data/data/com.ilulutv.fulao2/databases/Fulao2.db-shm (stat: No such file or directory).ilulutv. 10694    10106  mem       REG              253,0           352271 /data/app/com.ilulutv.fulao2-OY-Rxd8TtjlQqOrdtNmoHA==/oat/arm/base.art (stat: No such file or directory).ilulutv. 10694    10106   27r      REG              253,0   7164208 261832 /data/app/com.ilulutv.fulao2-OY-Rxd8TtjlQqOrdtNmoHA==/base.apk.ilulutv. 10694    10106   35ur     REG              253,0      4096 553066 /data/data/com.ilulutv.fulao2/databases/Fulao2.db.ilulutv. 10694    10106   36r      REG              253,0   7164208 261832 /data/app/com.ilulutv.fulao2-OY-Rxd8TtjlQqOrdtNmoHA==/base.apk.ilulutv. 10694    10106   39u      REG              253,0    234872 553067 /data/data/com.ilulutv.fulao2/databases/Fulao2.db-wal

还有一个比较厉害的命令:sar(System Activity Reporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等方面。其使用方法和特性留给读者去探索。

制作路由器抓包

得益于Kali Nethunter为诸多USB设备和无线网卡打上了驱动补丁,可以在手机上直接制作路由器,然后在网卡上进行抓包。比如通过手机的type-c接口,连接:

  • 一个有线网口接有线网络

  • 一个USB

  • 一个无线网卡

# lsusbBus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hubBus 001 Device 005: ID 0951:1643 Kingston Technology DataTraveler G3Bus 001 Device 004: ID 0bda:8153 Realtek Semiconductor Corp. RTL8153 Gigabit Ethernet AdapterBus 001 Device 003: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN AdapterBus 001 Device 002: ID 0bda:5411 Realtek Semiconductor Corp. 4-Port USB 2.0 HubBus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

手机可以全部识别出来,并且在有线网络上获得了192.168.0.7IP地址。

接下来就是利用NethunterKali Services,勾选HostapdDnsmasq,将手机直接变成一个路由器,并且在Kali Nethunter桌面上配置Burp SuiteWireshark进行抓包。

这条路虽然肯定是没问题的,不过真实场景下估计不会有人这样做,因为性能实在是孱弱,而且屏幕看着也太小了。

在真实的场景之下,最有效的搭建路由器进行抓包的场景,其实肯定是在Kali Linux的虚拟机上,用的虚拟机也是来自《2020年安卓源码编译指南及FART脱壳机谷歌全设备镜像发布》文章中所使用的虚拟机,然后随便搭配几块无线网卡即可。

当然树莓派上也可以装Kali Linux,配置方法同虚拟机桌面版本。

网卡连接到虚拟机之后,使用ifconfig命令查看该网口确定已经出现,默认名称是wlan0,然后使用nm-connection-editor命令来编辑热点的配置:

编辑之后保存,该热点就立即生效了,可以使用jnettop来查看该手机的所有的通讯IP、地址、URL、和速率,以及Wireshark来保存pcap进行深度分析。

Kali Linux虚拟机是开箱即用的,免安装,怎么折腾都无所谓,坏了就解压一个新的,又是船新的系统,干净卫生、可循环使用。

当然,根据OSI七层模型,我们在网络层做的路由器,可以抓所有传输层(Socket)、应用层(Http等)的明文协议包;

制作路由器来抓包的优势在于,可以彻底解决抓不到包的问题,因为在路由器上抓,其实跟一个App的日常使用场景是没有任何区别的,可以做到对App的完全“无感知”抓包,实现对App的降维打击。

但是如果对Socket进行了encode比如gziptar等,或者给Http加了SSL,那么则必须在更高的层次进行解密了,方法已经在《实用FRIDA进阶:内存漫游、hook anywhere、抓包》这篇文章中进行了详细的分析,具体不再赘述。

这里再补充和强调一个概念,作为安卓应用安全研究员,凡事都更应该系统的角度出发,比如定位自定义加解密算法的过程中,可以采用“所见即所得”的思路:只要是肉眼可见的内容,一定是可以倒追到解密函数的。

或者采用hook系统框架库方法,从SSLSocket收发包的函数去hook,打调用栈得到解密的方法。

这才是作为开源系统安卓上的应用安全研究员,应有的“我就是系统、系统就是我”的App逆向观念。其实也是“降维攻击”思路的一种体现。



关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接