首先,让我说我明白使用PT_DENY_ATTACH如下所述:
Bugging Debuggers是没用的.
但是,为了理解iOS的工作原理,我仍然想知道:在处理Swift项目时是否可以做类似的事情?由于Objective-C是基于C构建的,因此main(int argc, char *argv[])可以利用一个函数来阻止gdb附加到进程.
如何在Swift中完成?我主要是想了解Swift中的应用程序生命周期,但是,我能找到的大多数解释都是针对ObjC的.
Ste*_*hen 13
感谢用户ahruss非常有用的链接,这是我登陆的解决方案:
我使用此问题中引用的方法来创建main.swift文件.然后我创建了包含此方法定义的ac文件(和标头):
typedef int (*command_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data);
#if !defined(PT_DENY_ATTACH)
#define PT_DENY_ATTACH 31
#endif
//Anti-debug method
void disable_attach() {
void* handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW);
command_ptr_t command_ptr = dlsym(handle, "ptrace");
command_ptr(PT_DENY_ATTACH, 0, 0, 0);
dlclose(handle);
}
Run Code Online (Sandbox Code Playgroud)
我在我的桥接头中添加了disableAttach.h头文件,然后disable_attach()直接UIApplicationMain(Process.argc, Process.unsafeArgv, nil, NSStringFromClass(AppDelegate))调用main.swift中的调用.你应该得到一个类似于这样的main.swift文件:
import Foundation
import UIKit
disable_attach()
UIApplicationMain(
CommandLine.argc,
UnsafeMutableRawPointer(CommandLine.unsafeArgv)
.bindMemory(
to: UnsafeMutablePointer<Int8>.self,
capacity: Int(CommandLine.argc)),
nil,
NSStringFromClass(AppDelegate.self)
)
Run Code Online (Sandbox Code Playgroud)
正如我之前在评论中所述,似乎生命周期是相同的,但该@UIApplicationMain指令隐藏了主文件本身.
| 归档时间: |
|
| 查看次数: |
1680 次 |
| 最近记录: |