我正在阅读有关开发 iOS 应用程序的一些良好实践,并研究使用 Console.app 监视从 App Store 安装的 iOS 应用程序日志的可能性。所以,我在这里进行测试,但我注意到print
语句没有出现在 Console.app 中,而只NSLog
出现在其中。我的问题是:有什么方法可以查看print
使用设备上安装的 iOS 应用程序中的命令生成的日志吗?使用 Frida、Console.app 或任何其他方式?
如果没有其他方法,是否意味着print
命令比命令更安全NSLog
?这对我来说似乎非常违反直觉
我在 Anbox 设置中运行 Android,我下载了 Anbox 的 frida-server 版本 android-x86_64。
我按照以下步骤操作
adb push frida-server-12.11.18-android-x86_64
/data/local/tmp/
adb shell "chmod 755 /data/local/tmp/frida-server-12.11.18-android-x86_64
"
adb shell "/data/local/tmp/frida-server-12.11.18-android-x86_64
&"
Run Code Online (Sandbox Code Playgroud)
好吧,如果我尝试的话,现在我的问题来了
# frida-ps -Uai
Failed to enumerate applications: unable to find process with name 'system_server'
Run Code Online (Sandbox Code Playgroud)
但如果没有人工智能的工作,问题是无法看到正在运行的应用程序
frida-ps -U
PID Name
---- ------------------------------------
2333 frida-server-12.11.18-android-x86_64
1571 logcat
2335 logcat
48 sh
Run Code Online (Sandbox Code Playgroud)
我的猜测是,这与 Anbox 内运行的 frida-server 的权限有关,我尝试以 root 身份启动它,但它使整个环境崩溃。
x86_64:/data/local/tmp $ ls -ll
total 110648
-rwxr-xr-x 1 u1_root u1_root 56645256 2020-10-15 16:11 frida-server-12.11.18-android-x86_64
drwxr-xr-x 2 root root 4096 …
Run Code Online (Sandbox Code Playgroud) 我正在为同事搭建 Frida 测试平台,但我不熟悉 JavaScript 和 Node.JS。我想创建一个 JS 文件来导入其他几个 JS 文件,每个文件都有多个函数。但是,当我对某些导入其他函数的 Node.JS 代码使用 frida-compile 时,REPL 解释器不会将函数/变量拉入作用域。因此,例如:
我有一个包含 3 个 JavaScript 文件的平面目录:
in1.js:
'use strict';
var a = 'test';
function b() { console.log("function b"); };
Run Code Online (Sandbox Code Playgroud)
in2.js:
'use strict';
var c = 'test2';
var d = function () { console.log("function d"); };
Run Code Online (Sandbox Code Playgroud)
in3.js:
'use strict';
require('./in1.js');
require('./in2.js');
Run Code Online (Sandbox Code Playgroud)
然后我在 Windows 10 + Python 3.6 + Node.JS 9.5 上运行 frida-compile:
frida-compile in3.js -o out.js
Run Code Online (Sandbox Code Playgroud)
这会产生以下输出:
(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find …
Run Code Online (Sandbox Code Playgroud) 我想了解一个Android应用,其中包含一个foo
在类中命名的本地方法com.app.Bar
在类内部,Bar
有一个静态子句加载一个共享对象System.loadLibrary("libfoo.so")
,我认为该共享对象是使用-fvisibility = hidden构建的,因为唯一的导出是JNI_OnLoad
,否JNIEXPORT void JNICALL Java_com_app_Bar_foo
,这意味着public native int foo
不遵循命名约定。
到目前为止,我尝试了什么?
JNIAnalyzer输出13K行,看起来像JNI_OnLoad@@Base+0x712e
Frida脚本尝试查找foo
地址(无效)
function intercept(address) {
try {
Interceptor.attach(address, {
onEnter: function(args) {
console.log("onEnter", address);
},
onLeave: function(ignored) {}
});
} catch (e) {
console.error(e);
}
}
function Main() {
var dlopen = new NativeFunction(Module.findExportByName(null, 'dlopen'), …
Run Code Online (Sandbox Code Playgroud)我正在工作的一个应用程序最近进行了笔测试。报告中提到的风险之一是它没有适当的 Hook 检测。我已经实现了 RootBeer 库,但这很容易避免。
测试人员为 Android 应用程序创建了一个 Frida 脚本,用于在运行时修改根检测逻辑。该脚本连接到 System.exit 方法以返回 false 而不是 true。这阻止了应用程序在检测到设备已被 root 后退出。
渗透测试人员建议我们实施尽可能多的不同检查以阻止逆向工程师。
其中一项检查是让 Android 应用程序扫描位于以下位置的自己的内存映射文件
/proc/<pid>/maps
Run Code Online (Sandbox Code Playgroud)
在哪里
<pid>
Run Code Online (Sandbox Code Playgroud)
是应用程序的进程 ID (PID)。
我检查了 Android 文档,只能找到有关处理内存的信息,但找不到有关扫描内存的信息。例如。https://developer.android.com/topic/performance/memory
我看到您可以“获取设备当前内存状态的 MemoryInfo 对象”。但这仅显示系统上的可用内存。
有没有人有解决这个问题的方法?
我正在使用 frida 分析一个程序,该程序肯定通过 SSL 连接到某个服务器。当我调用 时SSL_get_fd
,它返回-1。从文档中我看到这意味着ssl
不包装套接字(BIO 明确配置,因为我可以通过访问它SSL_get_rbio
)。openssl 如何在没有套接字的情况下连接到服务器?有没有办法在不访问底层套接字的情况下查看对等地址/端口?
我正在尝试使用 Frida 绕过 Android 应用程序中的 rootDetection。
我找到了检查设备是否已root的类和方法,并尝试更改此方法的返回值,但我收到了一个令人困惑的错误:
错误: isDeviceRooted 的实现预期返回值与 java.lang.Boolean 兼容
我的脚本很简单:
var hook = Java.use("app.name.someClasses.RootUtils");
hook.isDeviceRooted.overload().implementation = function() {
return false;
}
Run Code Online (Sandbox Code Playgroud)
我尝试谷歌搜索,但我不明白 Boolean(false) 和 false 之间有什么区别,它只是一个包装器,说真的,我应该在这里返回什么才能与 main 方法返回值兼容?
我尝试调试 Android 应用程序以使用该项目打印SSL_write和SSL_read数据,并使用SSL_get_fd 打印文件描述符(以获取 src&dst ip )
但对于某些SSL*
函数,函数SSL_get_fd
总是返回 -1 而不是返回正确的 fd ,而对于另一些函数,SSL*
函数SSL_get_fd
返回正确的 fd 。
当我尝试使用函数SSL_is_init_finished
来检查那些SSL*
返回 fd = -1 的函数时,我得到 1(true)
我看到了同样的问题:What does it Mean, When SSL_get_fd returns -1? 但那里没有答案。
我怎样才能得到正确的 fd SSL *
?
我在 Android 8 (Oreo) 中以root身份运行 Frida Server (frida-server-12.5.8-android-arm64.xz) :
-rwxrwxrwx 1 根 38152536 2019-05-26 23:34 irwan
./irwan &
Run Code Online (Sandbox Code Playgroud)
然后我尝试在 apk 中取消固定 ssl :
C:\Users\irwan>frida -U -f xxx.xxxxx -l "C:\Users\irwan\OneDrive\pentest\payload\frida\unpinning_universal.js"
Run Code Online (Sandbox Code Playgroud)
输出错误:
生成失败:在准备应用程序启动时无法访问 zygote64;尝试禁用 Magisk Hide 以防它处于活动状态
如下图:
有人可以帮助我为这个问题实施或创建分步解决方案吗?谢谢。
当我用 Frida 连接 Android 应用程序时,我一直在尝试打印列表的内容,但没有任何运气。
我想在Java中挂钩的对象看起来像这样
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.util.List;
public final class Hello extends HelloParent{
@JsonIgnore
public final List sampleList;
}
Run Code Online (Sandbox Code Playgroud)
这个公共对象没有任何吸气剂,所以我必须求助于使用另一个对象(我们称该对象为“Bye”)的方法(byeMethodB)来监视这个值。
这就是我的 frida 脚本的样子:
setTimeout(function() {
Java.perform(function(){
Java.use("Bye").byeMethodA.implementation = function(){
try{
//Returns a Hello object
var helloObject = Java.cast(this.byeMethodB(),Java.use("Hello"))
printListContent(Java.cast(helloObject.sampleList,Java.use("java.util.List"))))
}catch(err){
console.log(err)
}
}
})
},1000)
function printListContent(list){
var listIter = list.iterator()
while(listIter.hasNext()){
console.log(listIter.next())
}
}
Run Code Online (Sandbox Code Playgroud)
如果不将“helloObject.sampleList”对象转换为列表,输出将如下所示:
[object Object]
Run Code Online (Sandbox Code Playgroud)
所以我确信它不为空
如果我使用 进行投射Java.cast(helloObject.sampleList,Java.use("java.util.List"))
,
我收到以下错误:
我也尝试过:
Java.cast(helloObject.sampleList,Java.use("java.util.List<>"))
(我很确定它是一个字符串)
Java.cast(helloObject.sampleList,Java.use("java.util.List<String>"))
Java.cast(helloObject.sampleList,Java.use("java.util.List<java.lang.String>"))
Java.cast(helloObject.sampleList,Java.use("[String"))
Java.cast(helloObject.sampleList,Java.use("[Ljava.lang.String"))
进展一点也不顺利。希望得到一些帮助