使用MokeyDev问题总结

摘要:
入坑逆向也有一段时间了,入门首选狗神的小黄书,安卓和macOS下关注虫神,iOS逆向一个超好用的工具monkeyDev,手动@庆哥,emmmm。。初学尽量还是从免工具开始吧,不然用多了就戒不掉了。。所以我才忍着不用这么好用的工具,本文主要收集了一些坑以及思路, 大部分只是一句关键性的话, 还有可能是错的, 有错误请直接指出, pro_cookie@yeah.net, 谢谢各位大佬。

正文:
分享一批大佬的博客以及论坛

1、
遇到使用OpenDev建的CaptainHook里面CHOptimizedMethod的方法中可以用

[self performSelector:@selector(testFunction)];

而MonkeyDev中这样调用就编译不过,并且尝试使用@class申明也不行的
解决:
方法一:
动态库可以只申明@interface不用@implementation
类似 庆哥 WechatPod
方法二:
OpenDev使用MRC
MonkeyDev使用ARC
使用-fno-objc-arc修改即可
2、
提示reveal.framework版本太新
解决: RevealServer.framework存放路径 自己替换版本/opt/MonkeyDev/Librarys
3、
每次调用函数 ,要先把地址放到x8寄存器,然后在函数内把东西copy出来,然后返回
解决
返回值超过16byte了
4、
获取实例变量比如

@interface A:NSObject {
  B* m;
}
想 A *a;a->m; 这样拿不到

解决:
庆哥例子:

//getproperty
NSString* password = CHIvar(self, _password, __strong NSString*);

5、otool -fh查看可执行文件可以输出offset
6、thread info 查看当前线程
7、image lookup -a 指令地址 (好像是可以看指令跑什么位置 比如DATA段 TEXT段)
8、lldb解析出来的名字,应该是__lldbunnamed之类的(?不确定 Xcode问题 可能导致断点出奇怪的符号名)
9、钉钉据说里面有个叫DingTalkWatchApp的东西 要删掉或者统统重签名 codesign -f -s watch.app ?
10、CaptainHook
11、钉钉虚拟定位的时候,可能给定值不可以(张总说可能会监测gps晃动)
12、获取网页,自动输入qq等信息的时候,好像是做了个判断,如果是iOS,需要document.write(src)写入,不是的话,location.replace(src)就好
13、vmp 先下ptrace 触发后 下sysctl 再触发 2个断点都删掉
14、反hook肯定需要拿IMP指针,指针转换到实现地址需要dladdr,这两步可以看本地检测,服务器检测的话,基本上只检测位置有没有加nonce,获取wifi信息肯定是私有API,可以从dlopen和dlsym下手(如果用的exchange直接看_cmd就可以知道,如果是static swizzling可能看不出来 ?这句不确定) 有些人可能会称这个为地址检测
15、用logos写一个dylib 在非越狱的机器上用
解决:
改一下MonkeyDev/Tools/pack.sh这个打包脚本 把dylib添加进去 加几行shell就好
16、x0~x7需要调用者自行保存,用的时候寄存器状态不确定,理论上在函数执行过程中都在fp~sp的区间的栈上 用sp加偏移取得寄存器在栈上的值
17、lldb以及一些arm基础
18、可以用基于libiMobile的工具 访问系统RootFS 把 deb拷进去,在设备上找到iFile/Filza安装deb 或者直接CLI安装deb
19、WeChatRedEnvlop未越狱真机运行的时候一直提示dyld:Library not loaded:/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate,但是我把CydiaSubstrate.framework放在WeChatRedEnvlopDylib的link binary下了,
解决:这是全局路径引用,需要设备上对应路径有,而很显然,非越狱设备上不可能有,Theos是支持非越狱模式的,使用MonkeyDev,update下 去 other link 把libsubstrate删了
20、小白注意~ MonkeyDev 需要把 theos 安装到 /opt路径下
21、

$ otool -l xxx | grep cryptid 
  cryptid 0
  cryptid 1

砸壳后输出一个0 一个1 说明是两个arch , dumpdecrypted不会去做 arch 交换 ,所以这个arch没有解密 ,意思是只砸开了一种架构的壳,(用dump的话是这样的,所以要用lipo手动分割)导出头文件的的话 可以用 class-dump -arch 解密arch就可以了 , 加载架构顺序 arm64->armv7s->armv7
22、MonkeyDev创建工程 编译到手机 直接闪退 手机没越狱。
解决:需要添加依赖,详情看wiki。报错:signing for “xxxdylib” requires a development team. Select a development team in the project editor. 说明动态库也要选。
23、张总提到LC_ENCRYPTION_INFO部分,emmmm…虽然现在不懂,以后应该能懂,留着
24、qq重签名后导致表情消失,原因表情存在app container里。。重签后app container路径变了
25、static recompiler在符号执行前 把目标代码 JIT 转译成Native
26、dumpdecrypted dump framework
27、

CHDeclareClass(NewSettingViewController)
CHDeclareMethod0(void, NewSettingViewController, reloadTableData) {
 CHSuper0(NewSettingViewController, reloadTableData);
 MMTableViewInfo *tableInfo = [self valueForKeyPath:@"m_tableViewInfo"];
}

已经把NewSettingViewController申明了还是提示 Receiver type ‘NewSettingViewController’ for instance message is a forward declaration 另外,这里的m_tableViewInfo是成员变量,从dump出来就可以看到,
用CH取 例子:

static void *CHIvar_(id object, const char *name) {
   Ivar ivar = class_getInstanceVariable(object_getClass(object), name);
   if(ivar)
#ifdef CHHasARC
    return (void *)&((char *)(__bridge void *)object)[ivar_getOffset(ivar)];
#else
    return (void *)&((char *)object)[ivar_getOffset(ivar)];
#endif
    return NULL;
}

解决: CH多是MRC下, 和ARC下有区别
28、iOS 逆向获取变量的值
29、有些术语,rcs(RemoteControlSystem) Persistent 指的持久化 eggshell(基于Python的iOS、macOS后渗透工具)就是用三叉戟的三个0day实现
30、一篇阿里关于自动化测试的文章工具据说内部已开放,外部遥遥无期 facebook的开源的工具
31、手淘iOS关于性能优化的探索的一个PPT自己想办法可以下下来
32、yaluyalu 10.2.1
33、x86默认函数返回值在哪个寄存器。。。。由调用协定决定
34、如何把一个生成好的动态库dylib文件注入到指定的mac应用下 下次启动mac应用就能执行动态库里的代码
解决: optool install -c load -p 动态库路径 -t 主程序路径
35、关于block反汇编emmmm…还有这篇关于block很多 随便一搜都是
36、逆向主要是面向dylib编程。。emmm…基本都是注入 注入 。。所以是动态库 静态库直接link就行 动态库要把库copy到设备 或者 monkeyapp
37、lldb
38、iSpy 类似庆哥的MonkeyDev
39、iPhone渗透APP及工具
40、restrict 反注入 mac反调试 是 kext patch sysent 来 hook ptrace 和 sysctl实现反调试llRC emmm…张总说的话我一个单词都看不懂
41、Jubeat.yaml 张总上传了这个文件 不知道干嘛的 前面说是llvm自己实现的可执行文件reader 然后发了这个文件 过期了 下载不了
42、Error: Reason: no suitable image found. Did find:……XX.framework/XX: mremap_encrypted() => -a, errno=12 for …….XX.framework/XX
解决: 参考庆哥dumpdecrypted问题是framework没砸壳
43、Error:This application or a bundle it contains has the same bundle identifier as this application or another bundle that it contains. Bundle identifiers must be unique. 原因 是 替换了/opt/MonkeyDev/Frameworks/RevealServer.framework这个文件,内置的RevealServer.framework版本比较高,电脑上的Reveal连不上,替换成电脑里的Reveal的Framework 导致爆出这个错误 有人会遇到这个问题。。建议更新reveal
44、objc_getClass和%c一样 语法糖 emmm…%c不用 import runtime
45、objc4 下载链接阅读链接
46、fishhook 要会 非越狱机上需要用这个通过地址hook和Method swizzle 其他不行,不能针对地址inline
47、asm是内联汇编 是F5没法还原的汇编指令 需要自己查ARM手册 根据上下文还原
48、LC_UUID 就是一个唯一ID 用来符号解析对应的;用来标示二进制的,比如动态库、app的执行文件,然后他们对应的符号文件和他们的uuid是一致的。这样crash日志才可以解析;应该也用于区别内存中的模块加载,模块是否已经加载 是否已经在缓存之类,emmmm…可能用于dyld加载模块的过程 具体不确定是否是根据的这玩意儿
49、add x24,x21,x8 解释 x24=x21+x8,取对象(x21)的某个属性(偏移量x8),赋值给x24 熟悉OC类结构就知道了,OC对象后面储存了类的属性,每个属性有一个偏移,这个偏移可以直接通过ivar_offset获取,这里的代码应该是类似_xxx获取属性的代码,x8储存了ivar offset,如果想取得对象属性名,需要使用class_copyIvarList,去看一下里面的offset和对应的name
50、isa和this指针有什么类似点,isa主要是OC对象用来发送消息的,和编译时就确定的不太一样,this就是一个指针,不能对其发送消息
51、p/x 打印十六进制 比如 p/x $x21
52、MSHookFunction不能在非越狱机器非debugmode用的
53、register read 看整体寄存器情况
54、disassemble –start-address 这个地址 或者 memory read 这个地址
55、到手机:1、chmod 700 /private/var/root 2、chmod 700 $HOME/.ssh 3、chmod 600 $HOME/.ssh/authorized_keys 先把权限都搞一遍
56、新系统越狱后 安装openssh 然后执行sh-keygen-t rsa -P ‘’ 然后ssh-copy-id -i /Users/用户名/.ssh/id_rsa root@IP 免密码 看$HOME/.ssh/authorized_keys这里面有没有电脑上生成的公钥
57、一个自动化测试工具 还有 文章在这里
58、在/opt/theos/vendor/lib里面放CydiaSubstrate.framework 可以自己拖进去
59、tweak跨进程传输数据 用rock那东西,要springboard起一个中转服务(emmmm…..没懂,先留着) 然后 有人提到xpc service 小数据共享可以找个目录写文件
60、cycript的choose这个函数不是用的objc runtime API 据张总说 BC写过分析 blue cocoa ?? 阿里星说 可能是copy classlist 那个api和heapinspector dump堆的结合
61、发现启动revealServer的启动由于越狱本身加载了reveal,MonkeyApp也加载了Reveal。导致错误:发现2个RevealServer类,不知道用哪个
解决: 删掉一个
62、给tweak加动态库是要把动态库拷贝到机器上,并指定加载路径 otool -L xxx.dylib看加载路径 Runpath Search Paths 里面可以加 路径改成/Library/Frameworks install_name_tool指定附篇
63、HookZzHookZz简单说明还有appleTrace
64、Xcode中和symbols有关的设置
65、庆哥把CaptainHook做成了pod了,以后弄pod的时候记得依赖CaptainHook 不然多个pod的时候会导致头文件找不到 不要直接导入头文件
66、hook NSDictionary 是不行的 NSDictionary是类簇 要hook他真正的类 例如__nscfdictionary 直接看imp
67、iOS如何把一个动态库优先load或者最早load,Load command 里写在第一,监控App load 耗时方案,1.自定义动态库,Embed framework方式加入App工程2.自动动态库的某个class load方法中,hook App的全部类load方法3.hook方法统计每个class load方法运行耗时,并且统计全部class load方法整体耗时4.对平台输出数据,做为卡口数据支持 说是手淘的ppt 然后阿里星说ppt看看就好 庆哥说动态库constructor执行的时候 +load已经执行完了 没法统计 霜神说进load的时候打个点 出去的时候打个点,每个类这样操作一下 所有的load时间就有了 刘源说DYLD_PRINT_STATISTICS 但是这个是所有load的时候 与需求 每个load的时间不符
68、可以直接hook全局变量1.全局变量的偏移是编译器确定的 直接对对应的内存地址数据做修改 2。搜符号
69、movsd xmm0, qword ptr [0x12345] 这里的movsd是符号填充还是rep movsd那种批量移动的意思?这个看看就行 不知道对错。。。
解决:数据长度 移动双字? 带符号 自带的用lldb改就行了 是从内存中取出值,然后符号拓展成qword,然后移动dword到xmm0的意思嘛? x86的source和destination和arm是相反的吗? 这个是intel synax 左边des 右边 src mov指令可以直接操作内存x86里? 同时为内存不行 有一个是内存可以 那上面是从内存中取出值,然后符号拓展成qword,然后移动dword到xmm0理解是对的 可是看哪种批量移动也是movsb, movsd之类的 批量我记得有个rep吧 符号拓展也是movsxxx 利用cx寄存器做了循环吧 恩。但是movsd这样指令重复也可以?批量和符号拓展都有个movsd. 最后解答 需要查资料看看
70、钉钉签名失败 -> 签名已经换成iOS developer ->

error: dyld:could not load inserted library '/Developer/usr/lib/libBacktraceRecording.dylib' because no suitable image found. 
Did find: /Developer/usr/lib/libBacktraceRecording.dylib:code signature invalid for 
'/Developer/usr/lib/libBacktraceRecording.dylib'

-> 解决 edit scheme 把 Queue Debugging Enable backtrace recording 勾去掉 运行成功 原因:在Xcode调用时,用了一个错误的libBacktraceRecording.dylib库,这个库在真机上不存在,所以不会在真机上奔溃,只会发生在模拟器上
71、error: resource fork, Finder information, or similar detritus not allowed 解决方法: 进入到DerivedData目录,把所有文件都删了。打开项目工程目录,cd到工程目录下,执行 $ xattr -rc 如果不行的话,重启Xcode 再不行 就重启一遍电脑
72、用chisel 找 一个按钮的事件 可以用 pactions命令 或者 直接查看 按钮的 allTargets和allControlEvents Chisel lldb辅助调试很屌的工具
73、pod ‘CaptainHook’装不上 open ~/.cocoapods 把里面MonkeyDevSpec删了 或者alonemonkey 就好了
74、

rebind_symbols((struct rebinding[1]){
    { "dladdr", new_dladdr, (void *)&old_dladdr
    }, 
}, 1);
logos写法:
%hookf(int, "_dladdr", const void *imp, Dl_info *info) {
    return %orig;
}

75、命令行直接安装ipa 不用通过itunes安装 libimobiledevice
76、使用MonkeyDev error: ssh: connect to host localhost port 22: Connection refused
Failed to create directory /var/root/MonkeyDevPackages on device localhost
解决:看wiki build settings 里面设置 端口 和IP 转USB的话 注意设置monkeydevdeviceport一般为2222
77、postCall里怎么获取class name 和 sel name?

void objc_msgSend_post_call(RegState *rs, ThreadStack *threadstack, CallStack *callstack) {

}
+ (void)hook_objc_msgSend {
 ZzBuildHook((void *)objc_msgSend, NULL, NULL, objc_msgSend_pre_call, objc_msgSend_post_call);
 ZzEnableHook((void *)objc_msgSend);
}

jmpews说在pre_call时候放到stack里。

void printf_pre_call(RegState *rs, ThreadStack *threadstack, CallStack *callstack) {
 puts((char *)rs->general.regs.x0);
 STACK_SET(callstack, "format", rs->general.regs.x0, char *);
 puts("printf-pre-call");
}
void printf_post_call(RegState *rs, ThreadStack *threadstack, CallStack *callstack) {
    if(STACK_CHECK_KEY(callstack, "format")) {
        char *format = STACK_GET(callstack, "format", char *);
        puts(format);
    }
    puts("printf-post-call");
}

相当于frida-js 里的this 的trick
78、据说可以动态库load顺序 但是不太准的样子
79、低电量弹框 SBAlertItemController
80、动态调试过程中 已知一个地址 想知道属于哪个模块地址空间 jmpews说 image list 调用的是dyld暴露的函数, dyld是通过拿task_t的信息。 可能说的是想用 vm_region_recurse_64这个函数
81、logos tweak 项目中如何在打包的时候自动打包进mp3文件 解决:dpkg-deb命令打包 文件直接拖到项目中的package目录就行了 直接拖到项目中没用
82、举报黑产。。 codesign -dvvvv 提取证书ID 然后样本和ID 发给product-security@apple.com
83、微信之前发图片闪退 张总说是 Unicode控制字符 类似之前iOSCoreText Dos 利用Unicode控制字符/Combining Character造成看起来很短其实爆炸长的复杂字符串文本 然后CoreText渲染卡死 然后崩溃了
84、ANYMethodLog
85、oc swift混编 dump-z
86、libcurl做混淆(或者加前缀) 思路 llvmhacking-0x1 已经编译好了的话 就parse头部查找符号表对应文本的索引地址 然后直接0x0填充
张总github上有个symbolcleaner 用的是native代码来做了替换 可以用python把native的也重新实现了 建议再llvm里直接搞 native编译好了再折腾太麻烦了 容错率也低 非要分开编译的话 可以自己制定重命名规则 比如全部把原来的名字变成加某个salt的hash 这样分开编译也可以正常link
87、cydia的插件解压后拿到lib文件想集成到自己应用的话 需要注意 可能有些全局路径 有些dylib从全局路径读写配置 要处理hook一下 放自己应用的话 MS要处理 插件安装就可用的话 基本还是要依赖MobileSubstrate 所以要改原来的LC 指向自己重签名的MS路径 但是原来的dylib用的还是全局路径 不越狱使用的话要修改这个路径 LC指的是 编译的任何可执行文件里 都有一个特别的LC 指明对应依赖库的唯一指定路径 Cydia里的Tweak这个路径指定的是越狱设备不存在的全局路径 要改成app里自带的路径
88、kaleidoscope教程这里有个比较好的教程
89、内核调试需要的工具比较烦 内核调试线 boot-arg 可能还需要刷到debug版的非公开固件 新版的内核好像无视 nvram的boot-args了 这样的话只能刷debug固件了 Twitter卖3500刀 iPhone4不需要 直接redsn0w开搞 调试线还是要的
90、反hook 绕着dyld那堆API做文章 算各种地址 拿到实现地址之后围绕实现地址做文章 app永远在0号位 后面跟的永远是系统库 判断hook的函数地址不在自己库地址范围内就说明被hook了 有限的很 内联hook这样就不行 检测多种方法的检测 反汇编涉及llvm
91、PhantomJS用于命令行操作网页 提供浏览器环境
92、改后缀.m->.mm 提示 Undefined symbols for architecture arm64: “_CYListenServer”, referenced from: __ZL5entryv_block_invoke in oooDylib.o 原因m是OC mm是C++ name mangling的规则变了 需要 extern “C” 后跟正常定义
93、strip 去除符号表 据说static函数 release的时候回strip这些符号 其他的话 可以用命令 strip 去除 但记得自己保存一份符号表 不然崩溃不好找 unity游戏的话 编译模式为il2cpp默认strip了
94、dump走的parse段 OC运行时需要MachO对应sect里的数据 Dump的bitcode看看就知道了 严格意义上属于clang 具体代码在clang的CGObjCMac.cpp里 C++没有运行时 OC能dump是因为RT需要这些信息 C++不需要自然没有
95、WTFJHIntrospy/Snooplt的高级版
96、庆哥llvm
97、调试与反调试(一)调试与反调试(二)调试与反调试(三) 调试与反调试(四) 所以最好还是内联asm 直接syscall来做检测 据说微信就是这么干的
98、swizzle/hook swift method 如果swift method有用@objc 就能get 得到class 但是如果全是swift就无效 因为 swift 本身就不是oc 直接用inline hook方式 反编看他的symbol再在runtime用dsym来hook,dump头文件的话 如果混编的 需要分开dump OC走RT Swift走工具
99、jmpews说removeImageFromAllImages 做注入检测/越狱检测的绕过 可以关注下dyld里的这个函数,”表面”卸载一个dylib(i.e. 从dyld_all_image_infos的vector list 中抹除该dylib的信息)
100、appletrace
101、Xcode build phases里面Run scrpit phase的执行时机 应该是在编译的最后 也就是验证打包前执行 (在符号表生成之后 link动态库之后执行的)这两句顺序需要验证 bugly的脚本就是在符号表生成之后配置上传脚本的
102、检测是否在线调试状态用sysctl
103、静态生成Patch代码 静态固化 不越狱inline hook之类的骚操作 address prediction怎么做的? 重新添加两个段 一个rw- 和r-x,之后修复macho文件,然后以rw-这个segment作为纽带 主要做macho序列化反序列化的东西 MachO的dependency需要考虑 插入一个段一堆东西要重定位 而且这个插入的segment有要求 要过一堆codesign和dyld的校验 其实不需要完整的动,关键保证_TEXT 和_DATA这两个偏移不变.不能再这两中间插入。因为有很多地址无关指令。可以插在_LINKEDIT之前,但是要修复dyld用的一些数据。
104、还有个骚操作 把GOT hook转换为HookZz的流程,这样再处理objc_msgSend就不存在性能和非越狱的问题了
105、如果庆哥MonkeyDev 下载失败 可以试试/opt/MonkeyDev/bin/md-install 里面把”$curlPath” –silent –insecure中的–insecure去掉 这个应该是限制了 https 不安全方式无法下载 直接执行

sudo /bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/AloneMonkey/MonkeyDev/master/bin/md-install)"

106、OC调用shell命令
107、Xcode9打包NSUserActivityTypeBrowsingWeb 这个是iOS 8才有的 iOS 7上报错 原因:判断不了,因为代码逻辑其实没执行到那边 dyld就挂了 加载动态库的时候就找不到就挂了 用classfromstring不行 是C 需要用dlsym 直接把变量名当NSString用就行了 这样避免了符号引用
108、hook objc_msgSend的例子里,发现Xcode新建的工程ViewController这个类也不满足这个条件 object_addr < log_class_end_addr 可能是_objc_data这个段的地址判断是位了过滤掉系统库 不明白为什么这个ViewController的地址不在objc_data里 jmpews说可以调下isa看看
109、注入动态库
110、Brida
111、透明加固 LLVM/汇编层 然后MachO重组下 在入口点放反调试代码 写MachO序列化/反序列化 然后ASM生成AST 从AST来做混淆 混淆完了重新计算地址偏移 然后重新生成ASM ASM还原IR 混淆好了再编译回去 ASM准确还原IR非常复杂 目前没有好用的开源框架 基本基于符号执行 而符号执行目前在iOS上还没有公开的方法
112、ollvm
113、cmake配置
114、iOS实现vmmap 查看虚拟内存的 参考
115、改全局变量 data端或bss端 iOS改内存属性的函数 用mach_vm_protect… 类似hookzz中写入代码段的时候 先写到一个vm_allocate 分配的页, 然后使用mremap重新patch覆盖原页… 越狱环境下才能改 zzdeps里面把好多有用的函数封装了 zz_vm_protect_via_task 就指的楼上mach_vm_protect
116、问题描述 同一个uuid的动态库 用hopper解析 和 用程序加载起来 同一个地址偏移对应的数据变了 ida和hopper的结果一致 获取 Mach-O中的UUID 张总让解析下对应的结构体 看那个结构变了 怀疑和dyld有关 回:从mach_header_64 到 linkedit到symtab segment command都变了 比如symtab command的symoff变了 但是nsym没变 mach_header的flag变了 比如 linkedit的vmsize变了 觉得uuid的动态库load command这块不应该变。。测试发送变化的是系统库webcore 张总觉得 系统库在decache的时候所有的LC都会被重写 也不是所有,某些,可能这就是header变了的原因 回:为什么符号表也变了 symoff找不到了 张总说 没记错的话 (可能是dod cache 没听清楚) 所有的系统库都在内存里buffer前一块连续的内存区域 所以他会开始出来的时候 把data text拷出来 然后symtab之类的全部都会重构 。。。(语音。。我听的不是很懂 看看就行 有个思路验证) 需求是 把dlsym改了 然后用linkedit base + symtab fileoff - linkedit fileoff 找到的符号表不对 或者怎么改fishhook 让他支持绑定.m里面的static函数?
117、安全分析工具
118、this application does not support this device’s CPU type 11的机子上出现这个错误 解决 11的机子强制 arm64 不再支持armv7了
119、capstone
120、dylib一直从/usr/local/lib/下加载 解决 指定install path 就是指定 @executable_path等等
121、iOS private api
122、关于unity逆向的报告
123、非越狱情况下怎么修改硬编码 类似shellcode 要把一段shellcode 动态写到某段内存里 可以用hookZz的静态固化inlinehook 直接修改段 或者直接patch掉无用代码 这样实现非越狱手机inline hook
124、怎么hook .m文件里的static函数 可以试试 offset + hook address (之前想的方法是dlsym找最近的export符号 然后算哪个没暴露的符号到公开符号的偏移 求地址 但是不确定怎么才能在所有版本上确保offset 得hardcode) 也许可以使用特征码定位 static这个函数对应的汇编代码 来定位 不知道在iOS上允不允许这样。。简单的说,就是把这段内存读进来,然后查找这个函数的硬编码 动态算出偏移 判断特征码 没必要从后开始 可以hookz中间逻辑也一样 无非是处理好堆栈, 保存好寄存器的值,在合适的时候恢复 也可以找上一个frame调用这个static函数 jmpews说 function start是记录了所有函数的地址,无论导出未导出,应该可以辅助验证下。但是只有macho这么搞 elf啥的也没有这么搞 所以不能算是通用
125、frida图形界面 动态分析iOS应用-passionfruitpassionfruit的github
126、lldb断接口 记得先还原符号 没还原的话 可以断地址
127、Associated Objects实现原理
128、MonkeyDev hook C函数的时候不知道函数名可以hook地址 有符号的可以直接findsymbol
129、frida js重写了一个dumpdecrypted
130、PrivateFramework header
140、restore-symbol
141、sub_xxxx这种 如何hook 文章通过_dyld_get_image_header(0)拿到可执行文件的基址,然后算出来具体 sub_xxxx的地址 如果这个方法是在启动的时候触发的,如果通过地址下断点,那么下断点的时候已经走过这个方法了 需要把scheme的自动launch -> info -> launch -> wait for executable to be launched
142、使用frida绕过越狱检测

热评文章