WSA - root,frida与ida测试

2023-11-05 08:30
文章标签 测试 ida frida wsa

本文主要是介绍WSA - root,frida与ida测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文旨在配置windows subsystem for android(win安卓子系统)来作为win在开启了hyper-v的情况下的一种轻量的安卓模拟器方案。使用MagiskOnWsa设置root权限,最终使其正常与开发环境、frida、ida打通。[部分微调过的版本同步发布在看雪,内容差不多]

1. Root的WSA

常用的Wsa版本在目前是没有默认root的。在物理机上要解决这一情况就需要刷机,而模拟器显然是不具备刷机的条件的 —— 要么就直接下载带root的系统镜像,或者自己魔改一个带root的——Wsa的root方案和这个思路类似,在Github的LSPosed仓库里有MagiskOnWsa方案,利用其可以编译出自带Magisk的WSA系统。

步骤:

重要 如果使用wsl虚拟机进行制作,请务必使用ubuntu 16虚拟机。高版本(截止2023.7.11的最新版本)下的MagiskOnWsa的run.sh、install.sh有解析磁盘文件不正确的问题。

安装16.04版本

wsl --install -d Ubuntu

git配置:

# fatal: unable to connect to github.com
git config --global url."https://github.com".insteadOf git://github.com
# fatal: unable to access ‘https://github.com/robbyrussell/oh-my-zsh.git/’: LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443git config --global --unset http.proxy
git config --global --unset https.proxy
# OpenSSL SSL_read: Connection was reset, errno 10054
git init

build

git clone https://github.com/LSPosed/MagiskOnWSALocal.git --depth 1
cd MagiskOnWSALocal
./scripts/run.sh

install

PowerShell.exe -ExecutionPolicy Bypass -File .\Install.ps1

记得开启开发模式

connect

adb connect 127.0.0.1:58526#may failed,continue
adb shell
redfin:/ $ su
redfin:/ #

WSA安装完成后会弹出Magisk界面,如果点那个安装,安装失败了也无所谓,不影响。

2. Frida On WSA

开始测试之前,我们需要简单检查一下WSA的设置:
在这里插入图片描述

这里一定要关闭高级网络。WSA的高级网络的级别和WSL相似,甚至可以说更高。开启WSA后其可以直接探测、同步物理机wifi,可以说这二者用的是同一张网卡。几个作证是①开启高级网络后安卓虚拟机更改连接的wifi会同步更改物理机wifi②安卓虚拟机的ip和物理机一致。
这里的作证②也直接导致了一点:端口冲突。

通常的frida链接情景可以说默认是“两台机器”—— 无论是物理链接还是模拟器、远程链接都是两台机器,这也意味着这里至少会有“两个ip”。在这个情况下,adb需要为目标机器的frida_server和开发机器的frida-tools之间做端口转发。如adb forward tcp:27043 tcp:27043。但是当WSA是处于高级网络这种,共用一张网卡,甚至ip都一样的情况下,端口冲突问题就显然而然的出现了。(甚至WSA需要通过127.0.0.1:58526来链接,普通的修改链接端口并不能很好地解决这个问题)

此外,注意这个选项是会影响到系统服务的。建议资源富余就开始终分配,不富余就部分运行中+使用时挂起一个应用
在这里插入图片描述

那么关闭了这个问题之后剩下的就很好做了,先简单测试Frida可用:

adb push frida_android_x64_server /data/local/tmp
adb connect 127.0.0.1:58526
adb shell
redfin:/ $ su root
redfin:/ # cd /data/local/tmp
redfin:/ # chmod 777 frida-server-16.0.19-android-x86_64
redfin:/data/local/tmp # ./frida-server-16.0.19-android-x86_64
frida-ps -UaPID  Name            Identifier
4  --------------  ---------------------------------------
4139  Google          com.google.android.googlequicksearchbox
4139  Google          com.google.android.googlequicksearchbox
4231  Magisk          com.topjohnwu.magisk
2150  My Application  com.example.myapplication

用AS写一个测试demo,这里我使用了有点击选项的样例,添加了hook目标函数knockKnock:

.
.
.
binding.fab.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View view) {  Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)  .setAction("Action", null).show();  konckKnock();  }  
});
.
.
.
public void konckKnock(){  Log.d("123","123");  
}
.
.
.

可以注意到调试机器选择里默认脸上了我们的wsa系统:
在这里插入图片描述

frida测试脚本,缝缝补补得来的:

function hook1(clz) {console.log("234");//var MainActivity = Java.use("com.example.myapplication");console.log("456");var konckKnock = clz.konckKnock;konckKnock.implementation = function () {var result = this.konckKnock()console.log("GetTime called", ',result =>', result)return result}}Java.perform(function () {Java.choose("dalvik.system.PathClassLoader", {onMatch: function (instance) {console.log(instance)console.log(Java.ClassFactory)var factory = Java.ClassFactory.get(instance)console.log(factory)try {var myClass = factory.use("com.example.myapplication.MainActivity")hook1(myClass)console.log("stop")return "stop"} catch (e) {console.log("next")// console.log(e)}},onComplete: function () {console.log("Done")}})})

结果(记得点按钮)

frida -U 'My Application' -l .\enmuClass.js____/ _  |   Frida 16.0.19 - A world-class dynamic instrumentation toolkit| (_| |> _  |   Commands:/_/ |_|       help      -> Displays the help system. . . .       object?   -> Display information about 'object'. . . .       exit/quit -> Exit. . . .. . . .   More info at https://frida.re/docs/home/. . . .. . . .   Connected to Pixel 5 (id=127.0.0.1:58526)
Attaching...
dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/android.hidl.manager-V1.0-java.jar"],nativeLibraryDirectories=[/system/lib64, /system_ext/lib64]]]
function k() {[native code]
}
[object Object]
next
dalvik.system.PathClassLoader[DexPathList[[directory "."],nativeLibraryDirectories=[/system/lib64, /system_ext/lib64, /system/lib64, /system_ext/lib64]]]
function k() {[native code]
}
[object Object]
next
dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/android.hidl.base-V1.0-java.jar"],nativeLibraryDirectories=[/system/lib64, /system_ext/lib64]]]
function k() {[native code]
}
[object Object]
next
dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/android.test.base.jar"],nativeLibraryDirectories=[/system/lib64, /system_ext/lib64]]]
function k() {[native code]
}
[object Object]
next
dalvik.system.PathClassLoader[DexPathList[[dex file "/data/data/com.example.myapplication/code_cache/.overlay/base.apk/classes4.dex", zip file "/data/app/~~ZuASwv4tbYUhGso4vQY7Ng==/com.example.myapplication-wE3oqwa5449uXSAVac29jg==/base.apk"],nativeLibraryDirectories=[/data/app/~~ZuASwv4tbYUhGso4vQY7Ng==/com.example.myapplication-wE3oqwa5449uXSAVac29jg==/lib/x86_64, /data/app/~~ZuASwv4tbYUhGso4vQY7Ng==/com.example.myapplication-wE3oqwa5449uXSAVac29jg==/base.apk!/lib/x86_64, /system/lib64, /system_ext/lib64]]]
function k() {[native code]
}
[object Object]
234
456
stop
Done
[Pixel 5::My Application ]-> GetTime called ,result => undefined

3. Ida On WSA

server:

adb push .\android_x64_server /data/local/tmp
redfin:/data/local/tmp # chmod 777 android_x64_server
redfin:/data/local/tmp # ./android_x64_server
IDA Android x86 64-bit remote debug server(ST) v7.7.27. Hex-Rays (c) 2004-2022
Listening on 0.0.0.0:23946...

ip,在安卓设置的wifi里查看:
在这里插入图片描述

ida远程附加调试linux,非调试arm linux/android:
在这里插入图片描述

在这里插入图片描述

这篇关于WSA - root,frida与ida测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/348638

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

HDU 1560 IDA*

给出n个串,求最短公共串(不要求连续) h ,最少还需要多长来匹配所有。 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;imp

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采

BIRT 报表的自动化测试

来源:http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-birttest/如何为 BIRT 报表编写自动化测试用例 BIRT 是一项很受欢迎的报表制作工具,但目前对其的测试还是以人工测试为主。本文介绍了如何对 BIRT 报表进行自动化测试,以及在实际项目中的一些测试实践,从而提高了测试的效率和准确性 -------

可测试,可维护,可移植:上位机软件分层设计的重要性

互联网中,软件工程师岗位会分前端工程师,后端工程师。这是由于互联网软件规模庞大,从业人员众多。前后端分别根据各自需求发展不一样的技术栈。那么上位机软件呢?它规模小,通常一个人就能开发一个项目。它还有必要分前后端吗? 有必要。本文从三个方面论述。分别是可测试,可维护,可移植。 可测试 软件黑盒测试更普遍,但很难覆盖所有应用场景。于是有了接口测试、模块化测试以及单元测试。都是通过降低测试对象

day45-测试平台搭建之前端vue学习-基础4

目录 一、生命周期         1.1.概念         1.2.常用的生命周期钩子         1.3.关于销毁Vue实例         1.4.原理​编辑         1.5.代码 二、非单文件组件         2.1.组件         2.2.使用组件的三大步骤         2.3.注意点         2.4.关于VueComponen

如何成为一个优秀的测试工程师

链接地址:http://blog.csdn.net/KerryZhu/article/details/5250504 我一直在想,如何将自己的测试团队打造成世界一流的团队?流程、测试自动化、创新、扁平式管理、国际标准制定、测试社区贡献、…… 但首先一点是明确的,就是要将每一个测试工程师打造成优秀的测试工程师,优秀的团队必须由优秀的成员构成。所以,先讨论“如何成为一个优秀的测试工程师”,