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

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
2020年4月初,Kali在其官方博客上释出了最新的Kali Nethunter 2020.1,带来了船新的Kali NetHunter Rootless和Kali NetHunter Lite,同时对完整版Kali Nethunter进行了更加深入的优化,使用了全新的内核编译工具,从内核全面支持USB键盘、光驱和网卡模拟,功能更加强大,系统更加稳定。
新的Nethunter针对不同的版本,有不同的要求,并且可以实用的功能也不同。

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

虽然Nethunter Rootless可以在任意手机上安装和使用Kali Linux的功能,但是官方博客却说,Nethunter Rootless可以最多只有85%的威力,带root、三方recovery和Kali定制内核的完整版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,下载n6p的Nethunter,下载完算下校验码,再上传到手机上去。
# 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.imgtarget 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之后,选择Install→SR5-SuperSU-v2.82-SR5-20171001224502.zip开始刷机。

刷完之后选择Reboot→Do Not Install重启进入系统(可能会重启数次)。
进入系统之后发现已经有了root:
# adb shellangler:/ $ suangler:/ # 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.python和python3都有,python的环境也不用担心。只是frida由于没有arm的egg,源码编译笔者也试过好几天,都失败了,如果有大佬可以在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) = 66openat(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.7的IP地址。

接下来就是利用Nethunter→Kali Services,勾选Hostapd和Dnsmasq,将手机直接变成一个路由器,并且在Kali Nethunter桌面上配置Burp Suite和Wireshark进行抓包。
这条路虽然肯定是没问题的,不过真实场景下估计不会有人这样做,因为性能实在是孱弱,而且屏幕看着也太小了。
在真实的场景之下,最有效的搭建路由器进行抓包的场景,其实肯定是在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比如gzip、tar等,或者给Http加了SSL,那么则必须在更高的层次进行解密了,方法已经在《实用FRIDA进阶:内存漫游、hook anywhere、抓包》这篇文章中进行了详细的分析,具体不再赘述。
这里再补充和强调一个概念,作为安卓应用安全研究员,凡事都更应该系统的角度出发,比如定位自定义加解密算法的过程中,可以采用“所见即所得”的思路:只要是肉眼可见的内容,一定是可以倒追到解密函数的。


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

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

关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
- 1 中法元首相会都江堰 7904482
- 2 日方军机滋扰擅闯或被视为训练靶标 7808918
- 3 大闸蟹为何会在欧美泛滥成灾 7713402
- 4 国际机构看中国经济 关键词亮了 7617718
- 5 药酒里泡了十余年的海马竟是塑料 7522321
- 6 日军机滋扰辽宁舰训练 中方严正交涉 7426762
- 7 罪犯被判死缓破口大骂被害人一家 7329599
- 8 国乒8比1击败日本队 11战全胜夺冠 7232003
- 9 男子海洋馆内抽烟被白鲸喷水浇灭 7142663
- 10 千吨级“巨无霸”就位 7046322







OPPO安全应急响应中心
