WSA - root,frida与ida测试

2023-11-06

本文旨在配置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:443

git 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 -Ua
 PID  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:
在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WSA - root,frida与ida测试 的相关文章

  • 如何在android中实现触摸平滑图像橡皮擦?

    我已经从 API 演示中看到了finturePaint java 我想实现触摸平滑橡皮擦 通过在android中触摸移动来擦除部分图像 FingerPaint 告诉我要实现这个 mPaint setXfermode new PorterDu
  • 设置文本视图 Android 的文本颜色

    在 string xml 文件中我使用以下标签
  • gradle更新后无法找到方法(无法编译项目)

    我尝试将项目中的 gradle 版本更新为 4 1 milestone 1 以下这些说明 https developer android com studio build gradle plugin 3 0 0 migration html
  • 检查 WebView 元素时的 UiAutomator 错误

    I have recently started automation testing in android and was using UiAutomator tool for inspecting UI elements Surprisi
  • 按下按钮时应用不同的样式

    有没有办法在按下按钮时将样式应用于按钮 如果我有一种风格样式 xml
  • Recyclerview 动态部分不使用任何第三个库

    我想将标头添加到 recyclerview 我正在尝试使用来实现它 Override public int getItemViewType int position depends on your problem if position 0
  • 如何使用 Google Maps for Android V2 处理地图移动结束?

    我想在地图中心更改后立即对地址进行地理编码 如何使用新的 Android 版 Google 地图 V2 处理地图移动 我说的是用户用手指拖动地图的情况 查看新的地图 API Override public void onMapReady G
  • 自定义首选项中的android首选项水平分隔线?

    我创建了自己的自定义首选项对象来扩展首选项 我创建它们只是因为这些自定义数据类型没有首选项 一切正常 但我的自定义首选项没有相同的外观 因为它们缺少系统首选项对象具有的水平分隔线 我已经查找了创建水平分隔线的代码 但我找不到它是在哪里完成的
  • 如何更改终端的默认目录?

    我想更改 Android Studio v2 2 2 终端的默认目录 当我打开终端时 它基于项目的目录 C 项目路径 我经常需要使用adb shell 所以我必须导航到 SDK 路径 平台工具 才能使用 adb 命令 是否可以更改终端的默认
  • Dialog.setTitle 不显示标题

    我正在尝试向我的对话框添加自定义标题 但是每当我运行我的应用程序时 它都不会显示标题 我创建对话框的代码是 final Dialog passwordDialog new Dialog this passwordDialog setCont
  • 在 Cordova 应用程序中获取额外功能

    我们有两个 Android 应用程序 一个使用本机 Java 实现 另一个使用 Ionic 编写 Ionic 应用程序启动我的应用程序 这是使用灯插件 https github com lampaa com lampa startapp 我
  • Android Studio 与本地网络共享上的项目文件

    这是我的设置 Android Studio 项目文件位于 Ubuntu 14 10 盒子上的共享文件夹中 尝试在 Windows 8 机器上运行 Android Studio 1 0 2 并将 U 驱动器映射到包含项目文件的 Ubuntu
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • Android 中如何通过彩信发送图片?

    我正在开发多媒体应用程序 我正在通过相机捕获一张图像 并希望将该图像和文本发送到其他号码 但我不知道如何通过彩信发送图像 MMS 只是一个 http post 请求 您应该使用执行请求额外的网络功能 final ConnectivityMa
  • WorkManager 或 AlarmManager 用于日常请求然后通知工作?

    这是用例 用户设置具有特定时间的每日通知 在指定时间 发出网络请求以获取一些数据 然后使用检索到的数据显示通知 我不确定是否应该使用 AlarmManager 还是 WorkManager 来实现这个用例 据我了解 AlarmManager
  • 我应该释放或重置 MediaPlayer 吗?

    我有自己的自定义适配器类 称为 WordAdapter 并且我正在使用媒体播放器 名为pronounce WordAdapter 类中的全局变量 我有不同的活动 其中每个列表项都有线性布局 名为linearLayout 我正在设置onCli
  • 如何在 Android 中从 WorkManager 取消工作?

    我已经保存了 WorkManagerUUID转换成String在领域数据库中 这是代码 Constraints constraints new Constraints Builder setRequiredNetworkType Netwo
  • Android 中的处理程序与异步调用

    目前我正在使用处理程序来调用 Web 服务方法以使其在后台运行 问题是它需要更多的时间来给出响应 在性能方面似乎更昂贵 现在我计划使用异步调用 哪一个是最好的 Android 中的处理程序和异步调用有什么区别 请帮我想出一个最好的解决方案
  • 问题:为什么React Native Video不能全屏播放视频?

    我正在react native 0 57 7 中为android和ios创建一个应用程序并使用反应本机视频 https github com react native community react native video播放上传到的视频
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其

随机推荐