我目前正在学习调试 smali 代码,我正在使用这个工具(https://github.com/devadvance/rootinspector)作为例子。
在一个代码片段中,它是这样写的
public boolean checkRootMethod3() {
Log.d(Main.TAG, "check4");
try {
File file = new File("/system/xbin/su");
return file.exists();
} catch (Exception e) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
对应的smali代码如下
.method public checkRootMethod3()Z
.locals 4
.prologue
.line 76
const-string v2, "RootInspector"
const-string v3, "check4"
invoke-static {v2, v3}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 78
:try_start_0
new-instance v1, Ljava/io/File;
const-string v2, "/system/xbin/su"
invoke-direct {v1, v2}, Ljava/io/File;-><init>(Ljava/lang/String;)V
.line 79
.local v1, "file":Ljava/io/File;
invoke-virtual {v1}, Ljava/io/File;->exists()Z
:try_end_0
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
move-result v2
.line …
Run Code Online (Sandbox Code Playgroud) 创建 raw_ostream 对象并将其用于打印的正确方法是什么?我阅读了各种文章,我能找到的唯一示例是(如何将 llvm::outs() 重定向到文件?)
raw_ostream *output = &outs();
Run Code Online (Sandbox Code Playgroud)
它利用了 llvm::outs。
抱歉问这个,因为我不太熟悉 C++,但必须了解 LLVM 的工作原理。
我正在尝试按照此处的示例执行离线验证(https://github.com/googlesamples/android-play-safetynet/blob/master/server/java/src/main/java/OfflineVerify.java)。但是,当我尝试导入以下类时,Android Studio 指示未解析的引用
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.json.webtoken.JsonWebSignature;
import org.apache.http.conn.ssl.DefaultHostnameVerifier;
Run Code Online (Sandbox Code Playgroud)
未解析的引用是 api 和 DefaultHostnameVerifier。
我错过了一些设置吗?
我正在学习更多关于 shellcode 和在 iOS 设备上使用 arm64 进行系统调用的知识。我正在测试的设备是 iPhone 6S。
我从这个链接(https://github.com/radare/radare2/blob/master/libr/include/sflib/darwin-arm-64/ios-syscalls.txt)得到了系统调用列表。
我从这里了解到 x8 用于放置 arm64 的系统调用号(http://arm.ninja/2016/03/07/decoding-syscalls-in-arm64/)。
我认为用于传递 arm64 参数的各种寄存器应该与 arm 相同,所以我参考了这个链接(https://w3challs.com/syscalls/?arch=arm_strong),取自https://azeria-labs .com/writing-arm-shellcode/。
我在 Xcode 中编写了内联汇编,这里有一些片段
//exit syscall
__asm__ volatile("mov x8, #1");
__asm__ volatile("mov x0, #0");
__asm__ volatile("svc 0x80");
Run Code Online (Sandbox Code Playgroud)
但是,当我跳过这些代码时,应用程序不会终止。
char write_buffer[]="console_text";
int write_buffer_size = sizeof(write_buffer);
__asm__ volatile("mov x8,#4;" //arm64 uses x8 for syscall number
"mov x0,#1;" //1 for stdout file descriptor
"mov x1,%0;" //the buffer to display
"mov x2,%1;" //buffer size
"svc 0x80;" …
Run Code Online (Sandbox Code Playgroud)