From 7303c2837045ae1fc256b0eacf64ee05157fe268 Mon Sep 17 00:00:00 2001 From: alterdekim Date: Wed, 11 Dec 2024 01:49:00 +0300 Subject: [PATCH] modified: Cargo.lock modified: frida_core/Cargo.toml modified: frida_core/src/android_tun.rs --- Cargo.lock | 13 +++++++++++++ frida_core/Cargo.toml | 6 +++++- frida_core/src/android_tun.rs | 20 ++++++++++++++++---- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2096ef8..cfacc98 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1495,6 +1495,17 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +[[package]] +name = "filedescriptor" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7199d965852c3bac31f779ef99cbb4537f80e952e2d6aa0ffeb30cce00f4f46e" +dependencies = [ + "libc", + "thiserror 1.0.69", + "winapi", +] + [[package]] name = "flate2" version = "1.0.35" @@ -1616,10 +1627,12 @@ dependencies = [ "dirs 5.0.1", "embed-resource", "env_logger", + "filedescriptor", "futures", "generic-array", "hex", "iced", + "libc", "log", "nix", "packet", diff --git a/frida_core/Cargo.toml b/frida_core/Cargo.toml index 0dd64a0..05b9654 100644 --- a/frida_core/Cargo.toml +++ b/frida_core/Cargo.toml @@ -48,4 +48,8 @@ embed-resource = "2.3" nix = { version = "0.29.0", features = ["socket"] } [target.'cfg(target_os="linux")'.dependencies] -tokio-tun = "0.12.1" \ No newline at end of file +tokio-tun = "0.12.1" + +[target.'cfg(target_os="android")'.dependencies] +libc = "0.2" +filedescriptor = "0.8.2" \ No newline at end of file diff --git a/frida_core/src/android_tun.rs b/frida_core/src/android_tun.rs index d80625b..f633ad5 100644 --- a/frida_core/src/android_tun.rs +++ b/frida_core/src/android_tun.rs @@ -1,15 +1,27 @@ -use tokio::fs::File; +//use tokio::fs::File; use tokio::io::{AsyncReadExt, AsyncWriteExt}; use std::error::Error; use std::os::fd::FromRawFd; +use std::fs::File; + +use libc::fdopen; +use std::ffi::CString; + pub fn create(cfg: i32) -> (DeviceReader, DeviceWriter) { // check this if android build won't work + /*let mode_read = CString::new("r").unwrap(); + let mode_write = CString::new("w").unwrap(); + let fd1 = cfg.clone(); + let fd2 = fd1.clone(); + let reader = unsafe { fdopen(fd1, mode_read.as_ptr()) }; + let writer = unsafe { fdopen(fd2, mode_write.as_ptr()) };*/ + let fd1 = cfg.clone(); let fd2 = fd1.clone(); let mut reader = unsafe { File::from_raw_fd(fd1) }; let mut writer = unsafe { File::from_raw_fd(fd2) }; - + (DeviceReader {reader}, DeviceWriter {writer}) } @@ -23,12 +35,12 @@ pub struct DeviceReader { impl DeviceWriter { pub async fn write(&mut self, buf: &Vec) -> Result> { - Ok(self.writer.write(buf).await?) + Ok(self.writer.write(buf)?) } } impl DeviceReader { pub async fn read(&mut self, buf: &mut Vec) -> Result> { - Ok(self.reader.read(buf).await?) + Ok(self.reader.read(buf)?) } } \ No newline at end of file