余额不足.

集成Hikari问题汇总

字数统计: 1.2k阅读时长: 5 min
2018/12/21 Share

此文记录了编译Hikari混淆器所遇到的问题,希望对有同样问题的你有些帮助,也写给未来遇到问题的自己。

lldb_codesign no identity found

准备在项目中引入Hikari混淆器,Xcode9编译成功后并且能正常运行,但最近苹果修复了Xcode10打包iOS9Crash的问题后我也就把macOS升级到了mojave,Xcode也升级到了10,问题也就来了,之前的Hikari ToolChain也没法用了,怎么办?重装呗!

重新执行

1
git clone -b release_70 --recursive https://github.com/HikariObfuscator/Hikari.git Hikari && mkdir Build && cd Build && cmake -G "Ninja" -DCMAKE_BUILD_TYPE=MinSizeRel -DLLVM_APPEND_VC_REV=on -DLLVM_CREATE_XCODE_TOOLCHAIN=on -DCMAKE_INSTALL_PREFIX=~/Library/Developer/ ../Hikari && ninja &&ninja install-xcode-toolchain && git clone https://github.com/HikariObfuscator/Resources.git ~/Hikari && rsync -a --ignore-existing /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/ ~/Library/Developer/Toolchains/Hikari.xctoolchain/ && rm ~/Library/Developer/Toolchains/Hikari.xctoolchain/ToolchainInfo.plist

困扰了我两天的问题来了

1
2
3
4
[4399/4695] Linking CXX executable bin/debugserver
FAILED: bin/debugserver
: && /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -fPIC -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -std=c++11 -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wcovered-switch-default -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wstring-conversion -fdiagnostics-color -Wno-deprecated-declarations -Wno-unknown-pragmas -Wno-strict-aliasing -Wno-deprecated-register -Wno-vla-extension -Wno-gnu-zero-variadic-macro-arguments -Wno-zero-length-array -Wno-extended-offsetof -Os -DNDEBUG -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names -stdlib=libc++ -Wl,-sectcreate,__TEXT,__info_plist,/Users/yuhao/HikariObfuscator/Hikari/tools/lldb/tools/debugserver/source/../resources/lldb-debugserver-Info.plist -Wl,-dead_strip tools/lldb/tools/debugserver/source/CMakeFiles/debugserver.dir/debugserver.cpp.o -o bin/debugserver -Wl,-rpath,@loader_path/../lib lib/liblldbDebugserverCommon.a -framework Cocoa -framework CoreFoundation -framework Foundation lib/liblldbDebugserverArchSupport.a lib/liblldbDebugserverDarwin_DarwinLog.a -lcompression && cd /Users/yuhao/HikariObfuscator/Build/bin && /usr/local/Cellar/cmake/3.13.2/bin/cmake -E env CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate codesign --force --sign lldb_codesign --entitlements /Users/yuhao/HikariObfuscator/Hikari/tools/lldb/tools/debugserver/source/../../../resources/debugserver-macosx-entitlements.plist /Users/yuhao/HikariObfuscator/Build/bin/debugserver
lldb_codesign: no identity found

最初碰到问题时觉得是执行debugserver出问题了,也没有仔细查看问题就直接去google了,然而看了一遍遍的文章,一篇篇别的LLVM项目的issue也能解决问题。后来觉得会不会是debugserver在mojave和Xcode10上是不是有什么问题?然后找到了一个issue,这里表示需要安装完整的Xcode command line tools,随后执行了xcode-select --install,执行完再次编译Hikari,依然出现同样的错误。

看看Hikari的issue吧,也许会遇到同样错误的同学,果不其然Linking CXX executable bin/debugserver failed
这个issue也同样遇到了Linking CXX executable bin/debugserver FAILED的问题,但看了下内容,好像并不一样,zhang总的回答是Just remove lldb from tools/lldb, it's too much troublesome to setup on macOS,于是跟着照做,再次编译。WTF,两小时过去后依然卡在同一个位置。

找到问题的根本原因

仔细分析错误日志,日志的最后提到了lldb_codesign: no identity found,再次google,搜到的回答有说需要check一下lldb_codesigncertificate,我也是哔了狗了,最终的解决方案就是添加一个lldb_codesign证书,信任就行了,具体执行请参照这里

到这,Hikari编译加配置是成功了,更换了Xcode的ToolChain,build一哈,一个新的问题又来了
clang: error: cannot specify -o when generating multiple output files

如上图所示,将图中的配置项置成NO即可,再次Build,Perfect!

Undefined symbols ___isOSVersionAtLeast

上面的配置让我们在demo中可以完美编译,但是拉到我们的项目中又出了个幺蛾子,zhang总在issue中的回答是需要显示的链接clang-rt,从Hikari.xctoolchain/usr/lib/clang/10.0.0/lib/darwin找到libclang_rt.ios.a,简单粗暴的办法就是直接拖进主工程,并且在Build Phases选项卡下的Link Binary With Libraries下引入libclang_rt.ios.a

Pods库不能使用?

由于我们的项目使用了Pods管理组件模块,仅仅在主工程配置build Settings并不能影响到Pods中的代码,如果直接在Pods的proj文件中修改只会在本地文件生效,而别人拉下来重新pod install之后配置项又变成了空的。

怎么解决?

目前有两种方案,一种是在podfile写post_install脚本

1
2
3
4
5
6
7
8
9
10
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
if target.name == 'target名称' #对指定的库进行混淆
config.build_settings['OTHER_CFLAGS'] = '-mllvm -enable-allobf'
end
config.build_settings['COMPILER_INDEX_STORE_ENABLE'] = 'NO'
end
end
end

这种方案比较灵活,指哪打哪。

另一种方案,在podsepc文件中修改配置项

1
2
3
4
s.pod_target_xcconfig = {
'OTHER_CFLAGS' => '-mllvm -enable-allobf',
'COMPILER_INDEX_STORE_ENABLE' => 'NO'
}

这种方案稍显笨重,如果需要修改还需要对库重新打包。
如果有需要推荐第一种方案。

CATALOG
  1. 1. lldb_codesign no identity found
  2. 2. 找到问题的根本原因
  3. 3. Undefined symbols ___isOSVersionAtLeast
  4. 4. Pods库不能使用?
    1. 4.1. 怎么解决?