Zhang
                
              
                
                
              
                  
                  
              1
              
             
            
              正好看到有同学提问
一来呢
使用theos编译出的dylib,一来默认的是老的对齐iOS9 AArch64会挂,新版theos没试,也许新的模版解决了??
然后
theos编译会插入一个LC_LOAD_DYLIB用于确保dyld动态加载了libsubstrate
例如
越狱情况下并没有什么问题,非越狱下很显然没有这个文件,导致dyld抛出异常,crash app
解决方案也很简单,将这个LC的类型从LC_LOAD_DYLIB修改成LC_LOAD_WEAK_DYLIB
(弱加载,dyld不会因为弱加载的库不存在终止加载过程)
然后手动注入一个新的LC_LOAD_DYLIB,指向proper signed libSubstrate
很遗憾,就做了些微小的工作,谢谢大家
EDIT:
Theos现在提供了更简单的方案,参见http://bbs.iosre.com/t/theos-dylib/4327/3
             
            
              
              
              1 个赞
            
           
          
            
              
                Zhang
                
              
                
              
                  
                  
              2
              
             
            
              此处应有dyld源码相关部分解析,theos的patch
但我懒得写: )
             
            
              
              
              
            
           
          
            
            
              Theos编译的dylib不是依赖substrate的么?在非越狱机上也可以用吗?
             
            
              
              
              
            
           
          
            
              
                Zhang
                
              
              
                  
                  
              5
              
             
            
              我现在的做法是用Theos当编译环境,手动打Patch脚本重签名。上次他们看到利用mach里的某个嘘~~~API在const里设置TEXT到RW,调用MS后写回,他们说不越狱成功了,我没试验。
I don’t even
             
            
              
              
              
            
           
          
            
            
              these编译的dylib依赖了 libsubstrate,所以 需要lib substrate拷贝一份 重签 当然 dylib引用lib substrate的路径也需要改
             
            
              
              
              
            
           
          
            
            
              想问问大神,如何将LC_LOAD_DYLIB改成LC_LOAD_WEAK_DYLIB?用二进制改吗?LC_LOAD_WEAK_DYLIB的编码是多少。。。
             
            
              
              
              
            
           
          
            
              
                Zhang
                
              
              
                  
                  
              10
              
             
            
              MachOView或者自己写Parser。值翻头文件。这个问题目前有更简单的解决方案了
             
            
              
              
              
            
           
          
            
              
                Dylan
                (Dylan)
              
              
                  
                  
              12
              
             
            
              install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/libsubstrate.dylib tweak.dylib
             
            
              
              
              1 个赞
            
           
          
            
              
                donzell
                (每天有艳遇)
              
              
                  
                  
              13
              
             
            
              dylib内调用的其它资源文件路径怎么修改,\Library\PreferenceLoader\Preferences。求教,非常感谢