hane 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (488) hide show
  1. package/README.md +32 -0
  2. package/binding.gyp +87 -0
  3. package/dist/index.d.ts +34 -0
  4. package/dist/index.js +1 -0
  5. package/package.json +33 -0
  6. package/src/native/addon.cc +231 -0
  7. package/src/native/zsign_driver.cc +87 -0
  8. package/src/native/zsign_driver.h +38 -0
  9. package/vendor/zlib/.cmake-format.yaml +245 -0
  10. package/vendor/zlib/.github/workflows/c-std.yml +230 -0
  11. package/vendor/zlib/.github/workflows/cmake.yml +112 -0
  12. package/vendor/zlib/.github/workflows/configure.yml +136 -0
  13. package/vendor/zlib/.github/workflows/fuzz.yml +25 -0
  14. package/vendor/zlib/.github/workflows/msys-cygwin.yml +77 -0
  15. package/vendor/zlib/BUILD.bazel +134 -0
  16. package/vendor/zlib/CMakeLists.txt +330 -0
  17. package/vendor/zlib/ChangeLog +1621 -0
  18. package/vendor/zlib/FAQ +367 -0
  19. package/vendor/zlib/INDEX +68 -0
  20. package/vendor/zlib/LICENSE +22 -0
  21. package/vendor/zlib/MODULE.bazel +9 -0
  22. package/vendor/zlib/Makefile.in +419 -0
  23. package/vendor/zlib/README +115 -0
  24. package/vendor/zlib/README-cmake.md +83 -0
  25. package/vendor/zlib/adler32.c +164 -0
  26. package/vendor/zlib/amiga/Makefile.pup +69 -0
  27. package/vendor/zlib/amiga/Makefile.sas +68 -0
  28. package/vendor/zlib/compress.c +75 -0
  29. package/vendor/zlib/configure +966 -0
  30. package/vendor/zlib/contrib/README.contrib +57 -0
  31. package/vendor/zlib/contrib/ada/buffer_demo.adb +106 -0
  32. package/vendor/zlib/contrib/ada/mtest.adb +156 -0
  33. package/vendor/zlib/contrib/ada/read.adb +156 -0
  34. package/vendor/zlib/contrib/ada/readme.txt +65 -0
  35. package/vendor/zlib/contrib/ada/test.adb +463 -0
  36. package/vendor/zlib/contrib/ada/zlib-streams.adb +225 -0
  37. package/vendor/zlib/contrib/ada/zlib-streams.ads +114 -0
  38. package/vendor/zlib/contrib/ada/zlib-thin.adb +142 -0
  39. package/vendor/zlib/contrib/ada/zlib-thin.ads +450 -0
  40. package/vendor/zlib/contrib/ada/zlib.adb +701 -0
  41. package/vendor/zlib/contrib/ada/zlib.ads +328 -0
  42. package/vendor/zlib/contrib/ada/zlib.gpr +20 -0
  43. package/vendor/zlib/contrib/blast/Makefile +8 -0
  44. package/vendor/zlib/contrib/blast/README +4 -0
  45. package/vendor/zlib/contrib/blast/blast.c +466 -0
  46. package/vendor/zlib/contrib/blast/blast.h +83 -0
  47. package/vendor/zlib/contrib/blast/test.pk +0 -0
  48. package/vendor/zlib/contrib/blast/test.txt +1 -0
  49. package/vendor/zlib/contrib/delphi/ZLib.pas +557 -0
  50. package/vendor/zlib/contrib/delphi/ZLibConst.pas +11 -0
  51. package/vendor/zlib/contrib/delphi/readme.txt +76 -0
  52. package/vendor/zlib/contrib/delphi/zlibd32.mak +99 -0
  53. package/vendor/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs +58 -0
  54. package/vendor/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs +202 -0
  55. package/vendor/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs +83 -0
  56. package/vendor/zlib/contrib/dotzlib/DotZLib/CodecBase.cs +198 -0
  57. package/vendor/zlib/contrib/dotzlib/DotZLib/Deflater.cs +106 -0
  58. package/vendor/zlib/contrib/dotzlib/DotZLib/DotZLib.cs +288 -0
  59. package/vendor/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj +141 -0
  60. package/vendor/zlib/contrib/dotzlib/DotZLib/GZipStream.cs +301 -0
  61. package/vendor/zlib/contrib/dotzlib/DotZLib/Inflater.cs +105 -0
  62. package/vendor/zlib/contrib/dotzlib/DotZLib/UnitTests.cs +274 -0
  63. package/vendor/zlib/contrib/dotzlib/DotZLib.build +33 -0
  64. package/vendor/zlib/contrib/dotzlib/DotZLib.chm +0 -0
  65. package/vendor/zlib/contrib/dotzlib/DotZLib.sln +21 -0
  66. package/vendor/zlib/contrib/dotzlib/LICENSE_1_0.txt +23 -0
  67. package/vendor/zlib/contrib/dotzlib/readme.txt +58 -0
  68. package/vendor/zlib/contrib/gcc_gvmat64/gvmat64.S +574 -0
  69. package/vendor/zlib/contrib/infback9/README +1 -0
  70. package/vendor/zlib/contrib/infback9/infback9.c +603 -0
  71. package/vendor/zlib/contrib/infback9/infback9.h +37 -0
  72. package/vendor/zlib/contrib/infback9/inffix9.h +107 -0
  73. package/vendor/zlib/contrib/infback9/inflate9.h +47 -0
  74. package/vendor/zlib/contrib/infback9/inftree9.c +319 -0
  75. package/vendor/zlib/contrib/infback9/inftree9.h +61 -0
  76. package/vendor/zlib/contrib/iostream/test.cpp +24 -0
  77. package/vendor/zlib/contrib/iostream/zfstream.cpp +329 -0
  78. package/vendor/zlib/contrib/iostream/zfstream.h +128 -0
  79. package/vendor/zlib/contrib/iostream2/zstream.h +307 -0
  80. package/vendor/zlib/contrib/iostream2/zstream_test.cpp +25 -0
  81. package/vendor/zlib/contrib/iostream3/README +35 -0
  82. package/vendor/zlib/contrib/iostream3/TODO +17 -0
  83. package/vendor/zlib/contrib/iostream3/test.cc +50 -0
  84. package/vendor/zlib/contrib/iostream3/zfstream.cc +479 -0
  85. package/vendor/zlib/contrib/iostream3/zfstream.h +466 -0
  86. package/vendor/zlib/contrib/minizip/CMakeLists.txt +380 -0
  87. package/vendor/zlib/contrib/minizip/Makefile +37 -0
  88. package/vendor/zlib/contrib/minizip/Makefile.am +45 -0
  89. package/vendor/zlib/contrib/minizip/MiniZip64_Changes.txt +6 -0
  90. package/vendor/zlib/contrib/minizip/MiniZip64_info.txt +74 -0
  91. package/vendor/zlib/contrib/minizip/configure.ac +32 -0
  92. package/vendor/zlib/contrib/minizip/crypt.h +128 -0
  93. package/vendor/zlib/contrib/minizip/ints.h +57 -0
  94. package/vendor/zlib/contrib/minizip/ioapi.c +231 -0
  95. package/vendor/zlib/contrib/minizip/ioapi.h +183 -0
  96. package/vendor/zlib/contrib/minizip/iowin32.c +448 -0
  97. package/vendor/zlib/contrib/minizip/iowin32.h +28 -0
  98. package/vendor/zlib/contrib/minizip/make_vms.com +25 -0
  99. package/vendor/zlib/contrib/minizip/miniunz.c +647 -0
  100. package/vendor/zlib/contrib/minizip/miniunzip.1 +63 -0
  101. package/vendor/zlib/contrib/minizip/minizip.1 +46 -0
  102. package/vendor/zlib/contrib/minizip/minizip.c +512 -0
  103. package/vendor/zlib/contrib/minizip/minizip.pc.in +12 -0
  104. package/vendor/zlib/contrib/minizip/minizip.pc.txt +13 -0
  105. package/vendor/zlib/contrib/minizip/minizipConfig.cmake.in +35 -0
  106. package/vendor/zlib/contrib/minizip/mztools.c +288 -0
  107. package/vendor/zlib/contrib/minizip/mztools.h +37 -0
  108. package/vendor/zlib/contrib/minizip/skipset.h +361 -0
  109. package/vendor/zlib/contrib/minizip/test/CMakeLists.txt +121 -0
  110. package/vendor/zlib/contrib/minizip/test/add_subdirectory_exclude_test.cmake.in +29 -0
  111. package/vendor/zlib/contrib/minizip/test/add_subdirectory_test.cmake.in +28 -0
  112. package/vendor/zlib/contrib/minizip/test/find_package_test.cmake.in +25 -0
  113. package/vendor/zlib/contrib/minizip/test/test_helper.cm +32 -0
  114. package/vendor/zlib/contrib/minizip/unzip.c +1981 -0
  115. package/vendor/zlib/contrib/minizip/unzip.h +441 -0
  116. package/vendor/zlib/contrib/minizip/zip.c +2199 -0
  117. package/vendor/zlib/contrib/minizip/zip.h +370 -0
  118. package/vendor/zlib/contrib/nuget/nuget.csproj +43 -0
  119. package/vendor/zlib/contrib/nuget/nuget.sln +22 -0
  120. package/vendor/zlib/contrib/pascal/example.pas +599 -0
  121. package/vendor/zlib/contrib/pascal/readme.txt +76 -0
  122. package/vendor/zlib/contrib/pascal/zlibd32.mak +99 -0
  123. package/vendor/zlib/contrib/pascal/zlibpas.pas +276 -0
  124. package/vendor/zlib/contrib/puff/Makefile +42 -0
  125. package/vendor/zlib/contrib/puff/README +63 -0
  126. package/vendor/zlib/contrib/puff/puff.c +840 -0
  127. package/vendor/zlib/contrib/puff/puff.h +35 -0
  128. package/vendor/zlib/contrib/puff/pufftest.c +169 -0
  129. package/vendor/zlib/contrib/puff/zeros.raw +0 -0
  130. package/vendor/zlib/contrib/testzlib/testzlib.c +275 -0
  131. package/vendor/zlib/contrib/testzlib/testzlib.txt +10 -0
  132. package/vendor/zlib/contrib/untgz/Makefile +14 -0
  133. package/vendor/zlib/contrib/untgz/Makefile.msc +17 -0
  134. package/vendor/zlib/contrib/untgz/untgz.c +667 -0
  135. package/vendor/zlib/contrib/vstudio/readme.txt +81 -0
  136. package/vendor/zlib/contrib/vstudio/vc10/miniunz.vcxproj +310 -0
  137. package/vendor/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters +22 -0
  138. package/vendor/zlib/contrib/vstudio/vc10/minizip.vcxproj +307 -0
  139. package/vendor/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters +22 -0
  140. package/vendor/zlib/contrib/vstudio/vc10/testzlib.vcxproj +412 -0
  141. package/vendor/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters +55 -0
  142. package/vendor/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj +310 -0
  143. package/vendor/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters +22 -0
  144. package/vendor/zlib/contrib/vstudio/vc10/zlib.rc +32 -0
  145. package/vendor/zlib/contrib/vstudio/vc10/zlibstat.vcxproj +449 -0
  146. package/vendor/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters +74 -0
  147. package/vendor/zlib/contrib/vstudio/vc10/zlibvc.def +161 -0
  148. package/vendor/zlib/contrib/vstudio/vc10/zlibvc.sln +135 -0
  149. package/vendor/zlib/contrib/vstudio/vc10/zlibvc.vcxproj +633 -0
  150. package/vendor/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters +115 -0
  151. package/vendor/zlib/contrib/vstudio/vc11/miniunz.vcxproj +314 -0
  152. package/vendor/zlib/contrib/vstudio/vc11/minizip.vcxproj +311 -0
  153. package/vendor/zlib/contrib/vstudio/vc11/testzlib.vcxproj +418 -0
  154. package/vendor/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj +314 -0
  155. package/vendor/zlib/contrib/vstudio/vc11/zlib.rc +32 -0
  156. package/vendor/zlib/contrib/vstudio/vc11/zlibstat.vcxproj +456 -0
  157. package/vendor/zlib/contrib/vstudio/vc11/zlibvc.def +161 -0
  158. package/vendor/zlib/contrib/vstudio/vc11/zlibvc.sln +117 -0
  159. package/vendor/zlib/contrib/vstudio/vc11/zlibvc.vcxproj +664 -0
  160. package/vendor/zlib/contrib/vstudio/vc12/miniunz.vcxproj +316 -0
  161. package/vendor/zlib/contrib/vstudio/vc12/minizip.vcxproj +313 -0
  162. package/vendor/zlib/contrib/vstudio/vc12/testzlib.vcxproj +422 -0
  163. package/vendor/zlib/contrib/vstudio/vc12/testzlibdll.vcxproj +316 -0
  164. package/vendor/zlib/contrib/vstudio/vc12/zlib.rc +32 -0
  165. package/vendor/zlib/contrib/vstudio/vc12/zlibstat.vcxproj +459 -0
  166. package/vendor/zlib/contrib/vstudio/vc12/zlibvc.def +161 -0
  167. package/vendor/zlib/contrib/vstudio/vc12/zlibvc.sln +119 -0
  168. package/vendor/zlib/contrib/vstudio/vc12/zlibvc.vcxproj +668 -0
  169. package/vendor/zlib/contrib/vstudio/vc14/miniunz.vcxproj +316 -0
  170. package/vendor/zlib/contrib/vstudio/vc14/minizip.vcxproj +313 -0
  171. package/vendor/zlib/contrib/vstudio/vc14/testzlib.vcxproj +422 -0
  172. package/vendor/zlib/contrib/vstudio/vc14/testzlibdll.vcxproj +316 -0
  173. package/vendor/zlib/contrib/vstudio/vc14/zlib.rc +32 -0
  174. package/vendor/zlib/contrib/vstudio/vc14/zlibstat.vcxproj +459 -0
  175. package/vendor/zlib/contrib/vstudio/vc14/zlibvc.def +161 -0
  176. package/vendor/zlib/contrib/vstudio/vc14/zlibvc.sln +119 -0
  177. package/vendor/zlib/contrib/vstudio/vc14/zlibvc.vcxproj +668 -0
  178. package/vendor/zlib/contrib/vstudio/vc17/miniunz.vcxproj +409 -0
  179. package/vendor/zlib/contrib/vstudio/vc17/minizip.vcxproj +405 -0
  180. package/vendor/zlib/contrib/vstudio/vc17/testzlib.vcxproj +473 -0
  181. package/vendor/zlib/contrib/vstudio/vc17/testzlibdll.vcxproj +409 -0
  182. package/vendor/zlib/contrib/vstudio/vc17/zlib.rc +32 -0
  183. package/vendor/zlib/contrib/vstudio/vc17/zlibstat.vcxproj +602 -0
  184. package/vendor/zlib/contrib/vstudio/vc17/zlibvc.def +161 -0
  185. package/vendor/zlib/contrib/vstudio/vc17/zlibvc.sln +179 -0
  186. package/vendor/zlib/contrib/vstudio/vc17/zlibvc.vcxproj +875 -0
  187. package/vendor/zlib/contrib/vstudio/vc9/miniunz.vcproj +565 -0
  188. package/vendor/zlib/contrib/vstudio/vc9/minizip.vcproj +562 -0
  189. package/vendor/zlib/contrib/vstudio/vc9/testzlib.vcproj +796 -0
  190. package/vendor/zlib/contrib/vstudio/vc9/testzlibdll.vcproj +565 -0
  191. package/vendor/zlib/contrib/vstudio/vc9/zlib.rc +32 -0
  192. package/vendor/zlib/contrib/vstudio/vc9/zlibstat.vcproj +781 -0
  193. package/vendor/zlib/contrib/vstudio/vc9/zlibvc.def +161 -0
  194. package/vendor/zlib/contrib/vstudio/vc9/zlibvc.sln +144 -0
  195. package/vendor/zlib/contrib/vstudio/vc9/zlibvc.vcproj +1100 -0
  196. package/vendor/zlib/crc32.c +1049 -0
  197. package/vendor/zlib/crc32.h +9446 -0
  198. package/vendor/zlib/deflate.c +2152 -0
  199. package/vendor/zlib/deflate.h +380 -0
  200. package/vendor/zlib/doc/algorithm.txt +209 -0
  201. package/vendor/zlib/doc/crc-doc.1.0.pdf +0 -0
  202. package/vendor/zlib/doc/rfc1950.txt +619 -0
  203. package/vendor/zlib/doc/rfc1951.txt +955 -0
  204. package/vendor/zlib/doc/rfc1952.txt +675 -0
  205. package/vendor/zlib/doc/txtvsbin.txt +107 -0
  206. package/vendor/zlib/examples/README.examples +54 -0
  207. package/vendor/zlib/examples/enough.c +597 -0
  208. package/vendor/zlib/examples/fitblk.c +233 -0
  209. package/vendor/zlib/examples/gun.c +702 -0
  210. package/vendor/zlib/examples/gzappend.c +504 -0
  211. package/vendor/zlib/examples/gzjoin.c +449 -0
  212. package/vendor/zlib/examples/gzlog.c +1061 -0
  213. package/vendor/zlib/examples/gzlog.h +91 -0
  214. package/vendor/zlib/examples/gznorm.c +474 -0
  215. package/vendor/zlib/examples/zlib_how.html +549 -0
  216. package/vendor/zlib/examples/zpipe.c +209 -0
  217. package/vendor/zlib/examples/zran.c +550 -0
  218. package/vendor/zlib/examples/zran.h +53 -0
  219. package/vendor/zlib/gzclose.c +23 -0
  220. package/vendor/zlib/gzguts.h +215 -0
  221. package/vendor/zlib/gzlib.c +585 -0
  222. package/vendor/zlib/gzread.c +603 -0
  223. package/vendor/zlib/gzwrite.c +631 -0
  224. package/vendor/zlib/infback.c +628 -0
  225. package/vendor/zlib/inffast.c +320 -0
  226. package/vendor/zlib/inffast.h +11 -0
  227. package/vendor/zlib/inffixed.h +94 -0
  228. package/vendor/zlib/inflate.c +1526 -0
  229. package/vendor/zlib/inflate.h +126 -0
  230. package/vendor/zlib/inftrees.c +299 -0
  231. package/vendor/zlib/inftrees.h +62 -0
  232. package/vendor/zlib/make_vms.com +867 -0
  233. package/vendor/zlib/msdos/Makefile.bor +115 -0
  234. package/vendor/zlib/msdos/Makefile.dj2 +104 -0
  235. package/vendor/zlib/msdos/Makefile.emx +69 -0
  236. package/vendor/zlib/msdos/Makefile.msc +112 -0
  237. package/vendor/zlib/msdos/Makefile.tc +100 -0
  238. package/vendor/zlib/nintendods/Makefile +126 -0
  239. package/vendor/zlib/nintendods/README +5 -0
  240. package/vendor/zlib/old/Makefile.emx +69 -0
  241. package/vendor/zlib/old/Makefile.riscos +151 -0
  242. package/vendor/zlib/old/README +3 -0
  243. package/vendor/zlib/old/descrip.mms +48 -0
  244. package/vendor/zlib/old/os2/Makefile.os2 +136 -0
  245. package/vendor/zlib/old/os2/zlib.def +51 -0
  246. package/vendor/zlib/old/visual-basic.txt +160 -0
  247. package/vendor/zlib/os400/README400 +48 -0
  248. package/vendor/zlib/os400/bndsrc +133 -0
  249. package/vendor/zlib/os400/make.sh +366 -0
  250. package/vendor/zlib/os400/zlib.inc +531 -0
  251. package/vendor/zlib/qnx/package.qpg +141 -0
  252. package/vendor/zlib/test/CMakeLists.txt +265 -0
  253. package/vendor/zlib/test/add_subdirectory_exclude_test.cmake.in +29 -0
  254. package/vendor/zlib/test/add_subdirectory_test.cmake.in +28 -0
  255. package/vendor/zlib/test/example.c +552 -0
  256. package/vendor/zlib/test/find_package_test.cmake.in +26 -0
  257. package/vendor/zlib/test/infcover.c +672 -0
  258. package/vendor/zlib/test/minigzip.c +590 -0
  259. package/vendor/zlib/treebuild.xml +116 -0
  260. package/vendor/zlib/trees.c +1119 -0
  261. package/vendor/zlib/trees.h +128 -0
  262. package/vendor/zlib/uncompr.c +85 -0
  263. package/vendor/zlib/watcom/watcom_f.mak +43 -0
  264. package/vendor/zlib/watcom/watcom_l.mak +43 -0
  265. package/vendor/zlib/win32/DLL_FAQ.txt +381 -0
  266. package/vendor/zlib/win32/Makefile.bor +109 -0
  267. package/vendor/zlib/win32/Makefile.gcc +177 -0
  268. package/vendor/zlib/win32/Makefile.msc +159 -0
  269. package/vendor/zlib/win32/README-WIN32.txt +103 -0
  270. package/vendor/zlib/win32/VisualC.txt +3 -0
  271. package/vendor/zlib/win32/zlib.def +98 -0
  272. package/vendor/zlib/win32/zlib1.rc +37 -0
  273. package/vendor/zlib/zconf.h.in +544 -0
  274. package/vendor/zlib/zlib.3 +149 -0
  275. package/vendor/zlib/zlib.3.pdf +0 -0
  276. package/vendor/zlib/zlib.h +1957 -0
  277. package/vendor/zlib/zlib.map +104 -0
  278. package/vendor/zlib/zlib.pc.cmakein +13 -0
  279. package/vendor/zlib/zlib.pc.in +13 -0
  280. package/vendor/zlib/zlibConfig.cmake.in +26 -0
  281. package/vendor/zlib/zutil.c +299 -0
  282. package/vendor/zlib/zutil.h +257 -0
  283. package/vendor/zsign/.gitattributes +4 -0
  284. package/vendor/zsign/LICENSE +21 -0
  285. package/vendor/zsign/README.md +142 -0
  286. package/vendor/zsign/build/linux/Makefile +43 -0
  287. package/vendor/zsign/build/macos/Makefile +43 -0
  288. package/vendor/zsign/build/windows/vs2022/include/minizip/crypt.h +128 -0
  289. package/vendor/zsign/build/windows/vs2022/include/minizip/ioapi.h +216 -0
  290. package/vendor/zsign/build/windows/vs2022/include/minizip/iowin32.h +28 -0
  291. package/vendor/zsign/build/windows/vs2022/include/minizip/mztools.h +37 -0
  292. package/vendor/zsign/build/windows/vs2022/include/minizip/unzip.h +437 -0
  293. package/vendor/zsign/build/windows/vs2022/include/minizip/zip.h +364 -0
  294. package/vendor/zsign/build/windows/vs2022/include/openssl/__DECC_INCLUDE_EPILOGUE.H +22 -0
  295. package/vendor/zsign/build/windows/vs2022/include/openssl/__DECC_INCLUDE_PROLOGUE.H +26 -0
  296. package/vendor/zsign/build/windows/vs2022/include/openssl/aes.h +111 -0
  297. package/vendor/zsign/build/windows/vs2022/include/openssl/applink.c +153 -0
  298. package/vendor/zsign/build/windows/vs2022/include/openssl/asn1.h +1133 -0
  299. package/vendor/zsign/build/windows/vs2022/include/openssl/asn1_mac.h +10 -0
  300. package/vendor/zsign/build/windows/vs2022/include/openssl/asn1err.h +142 -0
  301. package/vendor/zsign/build/windows/vs2022/include/openssl/asn1t.h +946 -0
  302. package/vendor/zsign/build/windows/vs2022/include/openssl/async.h +104 -0
  303. package/vendor/zsign/build/windows/vs2022/include/openssl/asyncerr.h +29 -0
  304. package/vendor/zsign/build/windows/vs2022/include/openssl/bio.h +1015 -0
  305. package/vendor/zsign/build/windows/vs2022/include/openssl/bioerr.h +72 -0
  306. package/vendor/zsign/build/windows/vs2022/include/openssl/blowfish.h +78 -0
  307. package/vendor/zsign/build/windows/vs2022/include/openssl/bn.h +590 -0
  308. package/vendor/zsign/build/windows/vs2022/include/openssl/bnerr.h +47 -0
  309. package/vendor/zsign/build/windows/vs2022/include/openssl/buffer.h +62 -0
  310. package/vendor/zsign/build/windows/vs2022/include/openssl/buffererr.h +25 -0
  311. package/vendor/zsign/build/windows/vs2022/include/openssl/camellia.h +117 -0
  312. package/vendor/zsign/build/windows/vs2022/include/openssl/cast.h +71 -0
  313. package/vendor/zsign/build/windows/vs2022/include/openssl/cmac.h +52 -0
  314. package/vendor/zsign/build/windows/vs2022/include/openssl/cmp.h +727 -0
  315. package/vendor/zsign/build/windows/vs2022/include/openssl/cmp_util.h +56 -0
  316. package/vendor/zsign/build/windows/vs2022/include/openssl/cmperr.h +131 -0
  317. package/vendor/zsign/build/windows/vs2022/include/openssl/cms.h +508 -0
  318. package/vendor/zsign/build/windows/vs2022/include/openssl/cmserr.h +125 -0
  319. package/vendor/zsign/build/windows/vs2022/include/openssl/comp.h +98 -0
  320. package/vendor/zsign/build/windows/vs2022/include/openssl/comperr.h +38 -0
  321. package/vendor/zsign/build/windows/vs2022/include/openssl/conf.h +214 -0
  322. package/vendor/zsign/build/windows/vs2022/include/openssl/conf_api.h +46 -0
  323. package/vendor/zsign/build/windows/vs2022/include/openssl/conferr.h +52 -0
  324. package/vendor/zsign/build/windows/vs2022/include/openssl/configuration.h +188 -0
  325. package/vendor/zsign/build/windows/vs2022/include/openssl/conftypes.h +44 -0
  326. package/vendor/zsign/build/windows/vs2022/include/openssl/core.h +236 -0
  327. package/vendor/zsign/build/windows/vs2022/include/openssl/core_dispatch.h +1022 -0
  328. package/vendor/zsign/build/windows/vs2022/include/openssl/core_names.h +545 -0
  329. package/vendor/zsign/build/windows/vs2022/include/openssl/core_object.h +41 -0
  330. package/vendor/zsign/build/windows/vs2022/include/openssl/crmf.h +260 -0
  331. package/vendor/zsign/build/windows/vs2022/include/openssl/crmferr.h +50 -0
  332. package/vendor/zsign/build/windows/vs2022/include/openssl/crypto.h +580 -0
  333. package/vendor/zsign/build/windows/vs2022/include/openssl/cryptoerr.h +56 -0
  334. package/vendor/zsign/build/windows/vs2022/include/openssl/cryptoerr_legacy.h +1466 -0
  335. package/vendor/zsign/build/windows/vs2022/include/openssl/ct.h +573 -0
  336. package/vendor/zsign/build/windows/vs2022/include/openssl/cterr.h +45 -0
  337. package/vendor/zsign/build/windows/vs2022/include/openssl/decoder.h +133 -0
  338. package/vendor/zsign/build/windows/vs2022/include/openssl/decodererr.h +28 -0
  339. package/vendor/zsign/build/windows/vs2022/include/openssl/des.h +211 -0
  340. package/vendor/zsign/build/windows/vs2022/include/openssl/dh.h +339 -0
  341. package/vendor/zsign/build/windows/vs2022/include/openssl/dherr.h +59 -0
  342. package/vendor/zsign/build/windows/vs2022/include/openssl/dsa.h +280 -0
  343. package/vendor/zsign/build/windows/vs2022/include/openssl/dsaerr.h +44 -0
  344. package/vendor/zsign/build/windows/vs2022/include/openssl/dtls1.h +57 -0
  345. package/vendor/zsign/build/windows/vs2022/include/openssl/e_os2.h +310 -0
  346. package/vendor/zsign/build/windows/vs2022/include/openssl/e_ostime.h +38 -0
  347. package/vendor/zsign/build/windows/vs2022/include/openssl/ebcdic.h +39 -0
  348. package/vendor/zsign/build/windows/vs2022/include/openssl/ec.h +1588 -0
  349. package/vendor/zsign/build/windows/vs2022/include/openssl/ecdh.h +10 -0
  350. package/vendor/zsign/build/windows/vs2022/include/openssl/ecdsa.h +10 -0
  351. package/vendor/zsign/build/windows/vs2022/include/openssl/ecerr.h +104 -0
  352. package/vendor/zsign/build/windows/vs2022/include/openssl/encoder.h +124 -0
  353. package/vendor/zsign/build/windows/vs2022/include/openssl/encodererr.h +28 -0
  354. package/vendor/zsign/build/windows/vs2022/include/openssl/engine.h +833 -0
  355. package/vendor/zsign/build/windows/vs2022/include/openssl/engineerr.h +63 -0
  356. package/vendor/zsign/build/windows/vs2022/include/openssl/err.h +512 -0
  357. package/vendor/zsign/build/windows/vs2022/include/openssl/ess.h +128 -0
  358. package/vendor/zsign/build/windows/vs2022/include/openssl/esserr.h +32 -0
  359. package/vendor/zsign/build/windows/vs2022/include/openssl/evp.h +2231 -0
  360. package/vendor/zsign/build/windows/vs2022/include/openssl/evperr.h +140 -0
  361. package/vendor/zsign/build/windows/vs2022/include/openssl/fips_names.h +50 -0
  362. package/vendor/zsign/build/windows/vs2022/include/openssl/fipskey.h +41 -0
  363. package/vendor/zsign/build/windows/vs2022/include/openssl/hmac.h +62 -0
  364. package/vendor/zsign/build/windows/vs2022/include/openssl/hpke.h +169 -0
  365. package/vendor/zsign/build/windows/vs2022/include/openssl/http.h +118 -0
  366. package/vendor/zsign/build/windows/vs2022/include/openssl/httperr.h +56 -0
  367. package/vendor/zsign/build/windows/vs2022/include/openssl/idea.h +82 -0
  368. package/vendor/zsign/build/windows/vs2022/include/openssl/indicator.h +31 -0
  369. package/vendor/zsign/build/windows/vs2022/include/openssl/kdf.h +138 -0
  370. package/vendor/zsign/build/windows/vs2022/include/openssl/kdferr.h +16 -0
  371. package/vendor/zsign/build/windows/vs2022/include/openssl/lhash.h +398 -0
  372. package/vendor/zsign/build/windows/vs2022/include/openssl/macros.h +338 -0
  373. package/vendor/zsign/build/windows/vs2022/include/openssl/md2.h +56 -0
  374. package/vendor/zsign/build/windows/vs2022/include/openssl/md4.h +63 -0
  375. package/vendor/zsign/build/windows/vs2022/include/openssl/md5.h +62 -0
  376. package/vendor/zsign/build/windows/vs2022/include/openssl/mdc2.h +55 -0
  377. package/vendor/zsign/build/windows/vs2022/include/openssl/modes.h +219 -0
  378. package/vendor/zsign/build/windows/vs2022/include/openssl/obj_mac.h +5820 -0
  379. package/vendor/zsign/build/windows/vs2022/include/openssl/objects.h +184 -0
  380. package/vendor/zsign/build/windows/vs2022/include/openssl/objectserr.h +28 -0
  381. package/vendor/zsign/build/windows/vs2022/include/openssl/ocsp.h +483 -0
  382. package/vendor/zsign/build/windows/vs2022/include/openssl/ocsperr.h +53 -0
  383. package/vendor/zsign/build/windows/vs2022/include/openssl/opensslconf.h +17 -0
  384. package/vendor/zsign/build/windows/vs2022/include/openssl/opensslv.h +114 -0
  385. package/vendor/zsign/build/windows/vs2022/include/openssl/ossl_typ.h +16 -0
  386. package/vendor/zsign/build/windows/vs2022/include/openssl/param_build.h +63 -0
  387. package/vendor/zsign/build/windows/vs2022/include/openssl/params.h +160 -0
  388. package/vendor/zsign/build/windows/vs2022/include/openssl/pem.h +543 -0
  389. package/vendor/zsign/build/windows/vs2022/include/openssl/pem2.h +19 -0
  390. package/vendor/zsign/build/windows/vs2022/include/openssl/pemerr.h +58 -0
  391. package/vendor/zsign/build/windows/vs2022/include/openssl/pkcs12.h +366 -0
  392. package/vendor/zsign/build/windows/vs2022/include/openssl/pkcs12err.h +46 -0
  393. package/vendor/zsign/build/windows/vs2022/include/openssl/pkcs7.h +430 -0
  394. package/vendor/zsign/build/windows/vs2022/include/openssl/pkcs7err.h +63 -0
  395. package/vendor/zsign/build/windows/vs2022/include/openssl/prov_ssl.h +38 -0
  396. package/vendor/zsign/build/windows/vs2022/include/openssl/proverr.h +162 -0
  397. package/vendor/zsign/build/windows/vs2022/include/openssl/provider.h +66 -0
  398. package/vendor/zsign/build/windows/vs2022/include/openssl/quic.h +70 -0
  399. package/vendor/zsign/build/windows/vs2022/include/openssl/rand.h +125 -0
  400. package/vendor/zsign/build/windows/vs2022/include/openssl/randerr.h +69 -0
  401. package/vendor/zsign/build/windows/vs2022/include/openssl/rc2.h +68 -0
  402. package/vendor/zsign/build/windows/vs2022/include/openssl/rc4.h +47 -0
  403. package/vendor/zsign/build/windows/vs2022/include/openssl/rc5.h +79 -0
  404. package/vendor/zsign/build/windows/vs2022/include/openssl/ripemd.h +59 -0
  405. package/vendor/zsign/build/windows/vs2022/include/openssl/rsa.h +615 -0
  406. package/vendor/zsign/build/windows/vs2022/include/openssl/rsaerr.h +107 -0
  407. package/vendor/zsign/build/windows/vs2022/include/openssl/safestack.h +297 -0
  408. package/vendor/zsign/build/windows/vs2022/include/openssl/seed.h +113 -0
  409. package/vendor/zsign/build/windows/vs2022/include/openssl/self_test.h +98 -0
  410. package/vendor/zsign/build/windows/vs2022/include/openssl/sha.h +139 -0
  411. package/vendor/zsign/build/windows/vs2022/include/openssl/srp.h +285 -0
  412. package/vendor/zsign/build/windows/vs2022/include/openssl/srtp.h +68 -0
  413. package/vendor/zsign/build/windows/vs2022/include/openssl/ssl.h +2878 -0
  414. package/vendor/zsign/build/windows/vs2022/include/openssl/ssl2.h +30 -0
  415. package/vendor/zsign/build/windows/vs2022/include/openssl/ssl3.h +357 -0
  416. package/vendor/zsign/build/windows/vs2022/include/openssl/sslerr.h +379 -0
  417. package/vendor/zsign/build/windows/vs2022/include/openssl/sslerr_legacy.h +467 -0
  418. package/vendor/zsign/build/windows/vs2022/include/openssl/stack.h +90 -0
  419. package/vendor/zsign/build/windows/vs2022/include/openssl/store.h +377 -0
  420. package/vendor/zsign/build/windows/vs2022/include/openssl/storeerr.h +49 -0
  421. package/vendor/zsign/build/windows/vs2022/include/openssl/symhacks.h +39 -0
  422. package/vendor/zsign/build/windows/vs2022/include/openssl/thread.h +31 -0
  423. package/vendor/zsign/build/windows/vs2022/include/openssl/tls1.h +1220 -0
  424. package/vendor/zsign/build/windows/vs2022/include/openssl/trace.h +320 -0
  425. package/vendor/zsign/build/windows/vs2022/include/openssl/ts.h +522 -0
  426. package/vendor/zsign/build/windows/vs2022/include/openssl/tserr.h +67 -0
  427. package/vendor/zsign/build/windows/vs2022/include/openssl/txt_db.h +63 -0
  428. package/vendor/zsign/build/windows/vs2022/include/openssl/types.h +245 -0
  429. package/vendor/zsign/build/windows/vs2022/include/openssl/ui.h +407 -0
  430. package/vendor/zsign/build/windows/vs2022/include/openssl/uierr.h +38 -0
  431. package/vendor/zsign/build/windows/vs2022/include/openssl/whrlpool.h +62 -0
  432. package/vendor/zsign/build/windows/vs2022/include/openssl/x509.h +1304 -0
  433. package/vendor/zsign/build/windows/vs2022/include/openssl/x509_acert.h +263 -0
  434. package/vendor/zsign/build/windows/vs2022/include/openssl/x509_vfy.h +902 -0
  435. package/vendor/zsign/build/windows/vs2022/include/openssl/x509err.h +70 -0
  436. package/vendor/zsign/build/windows/vs2022/include/openssl/x509v3.h +1500 -0
  437. package/vendor/zsign/build/windows/vs2022/include/openssl/x509v3err.h +96 -0
  438. package/vendor/zsign/build/windows/vs2022/include/zlib/zconf.h +553 -0
  439. package/vendor/zsign/build/windows/vs2022/include/zlib/zlib.h +1938 -0
  440. package/vendor/zsign/build/windows/vs2022/lib/minizip/x64/mt/minizip.lib +0 -0
  441. package/vendor/zsign/build/windows/vs2022/lib/openssl/x64/mt/libcrypto.lib +0 -0
  442. package/vendor/zsign/build/windows/vs2022/lib/openssl/x64/mt/libssl.lib +0 -0
  443. package/vendor/zsign/build/windows/vs2022/lib/zlib/x64/mt/zlib.lib +0 -0
  444. package/vendor/zsign/build/windows/vs2022/zsign/src/common_win32.h +44 -0
  445. package/vendor/zsign/build/windows/vs2022/zsign/src/getopt.cpp +69 -0
  446. package/vendor/zsign/build/windows/vs2022/zsign/src/getopt.h +20 -0
  447. package/vendor/zsign/build/windows/vs2022/zsign/src/iconv.cpp +138 -0
  448. package/vendor/zsign/build/windows/vs2022/zsign/src/iconv.h +38 -0
  449. package/vendor/zsign/build/windows/vs2022/zsign/zsign.vcxproj +177 -0
  450. package/vendor/zsign/build/windows/vs2022/zsign/zsign.vcxproj.filters +120 -0
  451. package/vendor/zsign/build/windows/vs2022/zsign.sln +28 -0
  452. package/vendor/zsign/src/archo.cpp +742 -0
  453. package/vendor/zsign/src/archo.h +61 -0
  454. package/vendor/zsign/src/bundle.cpp +589 -0
  455. package/vendor/zsign/src/bundle.h +46 -0
  456. package/vendor/zsign/src/common/archive.cpp +246 -0
  457. package/vendor/zsign/src/common/archive.h +22 -0
  458. package/vendor/zsign/src/common/base64.cpp +166 -0
  459. package/vendor/zsign/src/common/base64.h +30 -0
  460. package/vendor/zsign/src/common/common.h +56 -0
  461. package/vendor/zsign/src/common/fs.cpp +573 -0
  462. package/vendor/zsign/src/common/fs.h +50 -0
  463. package/vendor/zsign/src/common/json.cpp +3380 -0
  464. package/vendor/zsign/src/common/json.h +530 -0
  465. package/vendor/zsign/src/common/log.cpp +145 -0
  466. package/vendor/zsign/src/common/log.h +37 -0
  467. package/vendor/zsign/src/common/mach-o.h +585 -0
  468. package/vendor/zsign/src/common/sha.cpp +133 -0
  469. package/vendor/zsign/src/common/sha.h +24 -0
  470. package/vendor/zsign/src/common/timer.cpp +28 -0
  471. package/vendor/zsign/src/common/timer.h +17 -0
  472. package/vendor/zsign/src/common/util.cpp +185 -0
  473. package/vendor/zsign/src/common/util.h +25 -0
  474. package/vendor/zsign/src/macho.cpp +273 -0
  475. package/vendor/zsign/src/macho.h +38 -0
  476. package/vendor/zsign/src/openssl.cpp +698 -0
  477. package/vendor/zsign/src/openssl.h +71 -0
  478. package/vendor/zsign/src/signing.cpp +745 -0
  479. package/vendor/zsign/src/signing.h +59 -0
  480. package/vendor/zsign/src/zsign.cpp +317 -0
  481. package/vendor/zsign/test/dylib/bin/demo1.dylib +0 -0
  482. package/vendor/zsign/test/dylib/bin/demo2.dylib +0 -0
  483. package/vendor/zsign/test/dylib/demo/Makefile +12 -0
  484. package/vendor/zsign/test/dylib/demo/control +9 -0
  485. package/vendor/zsign/test/dylib/demo/demo.m +21 -0
  486. package/vendor/zsign/test/linux/test.sh +19 -0
  487. package/vendor/zsign/test/macos/test.sh +19 -0
  488. package/vendor/zsign/test/windows/test.ps1 +17 -0
@@ -0,0 +1,742 @@
1
+ #include "common.h"
2
+ #include "json.h"
3
+ #include "archo.h"
4
+ #include "signing.h"
5
+
6
+ uint64_t ZArchO::s_uExecSegLimit = 0;
7
+
8
+ ZArchO::ZArchO()
9
+ {
10
+ m_pBase = NULL;
11
+ m_uLength = 0;
12
+ m_uCodeLength = 0;
13
+ m_pSignBase = NULL;
14
+ m_uSignLength = 0;
15
+ m_pHeader = NULL;
16
+ m_uHeaderSize = 0;
17
+ m_uFileType = 0;
18
+ m_bEncrypted = false;
19
+ m_b64Bit = false;
20
+ m_bBigEndian = false;
21
+ m_bEnoughSpace = true;
22
+ m_pCodeSignSegment = NULL;
23
+ m_pLinkEditSegment = NULL;
24
+ m_uLoadCommandsFreeSpace = 0;
25
+ }
26
+
27
+ bool ZArchO::Init(uint8_t* pBase, uint32_t uLength)
28
+ {
29
+ if (NULL == pBase || uLength <= 0) {
30
+ return false;
31
+ }
32
+
33
+ m_pBase = pBase;
34
+ m_uLength = uLength;
35
+ m_uCodeLength = (uLength % 16 == 0) ? uLength : uLength + 16 - (uLength % 16);
36
+ m_pHeader = (mach_header*)m_pBase;
37
+ if (MH_MAGIC != m_pHeader->magic && MH_CIGAM != m_pHeader->magic && MH_MAGIC_64 != m_pHeader->magic && MH_CIGAM_64 != m_pHeader->magic) {
38
+ return false;
39
+ }
40
+
41
+ m_uFileType = BO(m_pHeader->filetype);
42
+ m_b64Bit = (MH_MAGIC_64 == m_pHeader->magic || MH_CIGAM_64 == m_pHeader->magic) ? true : false;
43
+ m_bBigEndian = (MH_CIGAM == m_pHeader->magic || MH_CIGAM_64 == m_pHeader->magic) ? true : false;
44
+ m_uHeaderSize = m_b64Bit ? sizeof(mach_header_64) : sizeof(mach_header);
45
+
46
+ uint8_t* pLoadCommand = m_pBase + m_uHeaderSize;
47
+ for (uint32_t i = 0; i < BO(m_pHeader->ncmds); i++) {
48
+ load_command* plc = (load_command*)pLoadCommand;
49
+ switch (BO(plc->cmd)) {
50
+ case LC_SEGMENT:
51
+ {
52
+ segment_command* seglc = (segment_command*)pLoadCommand;
53
+ if (0 == strcmp("__TEXT", seglc->segname)) {
54
+ s_uExecSegLimit = seglc->vmsize;
55
+ for (uint32_t j = 0; j < BO(seglc->nsects); j++) {
56
+ section* sect = (section*)((pLoadCommand + sizeof(segment_command)) + sizeof(section) * j);
57
+ if (0 == strcmp("__text", sect->sectname)) {
58
+ if (BO(sect->offset) > (BO(m_pHeader->sizeofcmds) + m_uHeaderSize)) {
59
+ m_uLoadCommandsFreeSpace = BO(sect->offset) - BO(m_pHeader->sizeofcmds) - m_uHeaderSize;
60
+ }
61
+ } else if (0 == strcmp("__info_plist", sect->sectname)) {
62
+ m_strInfoPlist.append((const char*)m_pBase + BO(sect->offset), BO(sect->size));
63
+ }
64
+ }
65
+ } else if (0 == strcmp("__LINKEDIT", seglc->segname)) {
66
+ m_pLinkEditSegment = pLoadCommand;
67
+ }
68
+ }
69
+ break;
70
+ case LC_SEGMENT_64:
71
+ {
72
+ segment_command_64* seglc = (segment_command_64*)pLoadCommand;
73
+ if (0 == strcmp("__TEXT", seglc->segname)) {
74
+ s_uExecSegLimit = seglc->vmsize;
75
+ for (uint32_t j = 0; j < BO(seglc->nsects); j++) {
76
+ section_64* sect = (section_64*)((pLoadCommand + sizeof(segment_command_64)) + sizeof(section_64) * j);
77
+ if (0 == strcmp("__text", sect->sectname)) {
78
+ if (BO(sect->offset) > (BO(m_pHeader->sizeofcmds) + m_uHeaderSize)) {
79
+ m_uLoadCommandsFreeSpace = BO(sect->offset) - BO(m_pHeader->sizeofcmds) - m_uHeaderSize;
80
+ }
81
+ } else if (0 == strcmp("__info_plist", sect->sectname)) {
82
+ m_strInfoPlist.append((const char*)m_pBase + BO(sect->offset), BO((uint32_t)sect->size));
83
+ }
84
+ }
85
+ } else if (0 == strcmp("__LINKEDIT", seglc->segname)) {
86
+ m_pLinkEditSegment = pLoadCommand;
87
+ }
88
+ }
89
+ break;
90
+ case LC_ENCRYPTION_INFO:
91
+ case LC_ENCRYPTION_INFO_64:
92
+ {
93
+ encryption_info_command* crypt_cmd = (encryption_info_command*)pLoadCommand;
94
+ if (BO(crypt_cmd->cryptid) >= 1) {
95
+ m_bEncrypted = true;
96
+ }
97
+ }
98
+ break;
99
+ case LC_CODE_SIGNATURE:
100
+ {
101
+ codesignature_command* pcslc = (codesignature_command*)pLoadCommand;
102
+ m_pCodeSignSegment = pLoadCommand;
103
+ m_uCodeLength = BO(pcslc->dataoff);
104
+ m_pSignBase = m_pBase + m_uCodeLength;
105
+ m_uSignLength = ZSign::GetCodeSignatureLength(m_pSignBase);
106
+ }
107
+ break;
108
+ }
109
+
110
+ pLoadCommand += BO(plc->cmdsize);
111
+ }
112
+
113
+ return true;
114
+ }
115
+
116
+ const char* ZArchO::GetArch(int cpuType, int cpuSubType)
117
+ {
118
+ switch (cpuType) {
119
+ case CPU_TYPE_ARM:
120
+ {
121
+ switch (cpuSubType) {
122
+ case CPU_SUBTYPE_ARM_V6:
123
+ return "armv6";
124
+ break;
125
+ case CPU_SUBTYPE_ARM_V7:
126
+ return "armv7";
127
+ break;
128
+ case CPU_SUBTYPE_ARM_V7S:
129
+ return "armv7s";
130
+ break;
131
+ case CPU_SUBTYPE_ARM_V7K:
132
+ return "armv7k";
133
+ break;
134
+ case CPU_SUBTYPE_ARM_V8:
135
+ return "armv8";
136
+ break;
137
+ }
138
+ }
139
+ break;
140
+ case CPU_TYPE_ARM64:
141
+ {
142
+ switch (cpuSubType) {
143
+ case CPU_SUBTYPE_ARM64_ALL:
144
+ return "arm64";
145
+ break;
146
+ case CPU_SUBTYPE_ARM64_V8:
147
+ return "arm64v8";
148
+ break;
149
+ case 2:
150
+ return "arm64e";
151
+ break;
152
+ }
153
+ }
154
+ break;
155
+ case CPU_TYPE_ARM64_32:
156
+ {
157
+ switch (cpuSubType) {
158
+ case CPU_SUBTYPE_ARM64_ALL:
159
+ return "arm64_32";
160
+ break;
161
+ case CPU_SUBTYPE_ARM64_32_V8:
162
+ return "arm64e_32";
163
+ break;
164
+ }
165
+ }
166
+ break;
167
+ case CPU_TYPE_X86:
168
+ {
169
+ return "x86_32";
170
+ }
171
+ break;
172
+ case CPU_TYPE_X86_64:
173
+ {
174
+ return "x86_64";
175
+ }
176
+ break;
177
+ }
178
+ return "unknown";
179
+ }
180
+
181
+ const char* ZArchO::GetFileType(uint32_t uFileType)
182
+ {
183
+ switch (uFileType) {
184
+ case MH_OBJECT:
185
+ return "MH_OBJECT";
186
+ break;
187
+ case MH_EXECUTE:
188
+ return "MH_EXECUTE";
189
+ break;
190
+ case MH_FVMLIB:
191
+ return "MH_FVMLIB";
192
+ break;
193
+ case MH_CORE:
194
+ return "MH_CORE";
195
+ break;
196
+ case MH_PRELOAD:
197
+ return "MH_PRELOAD";
198
+ break;
199
+ case MH_DYLIB:
200
+ return "MH_DYLIB";
201
+ break;
202
+ case MH_DYLINKER:
203
+ return "MH_DYLINKER";
204
+ break;
205
+ case MH_BUNDLE:
206
+ return "MH_BUNDLE";
207
+ break;
208
+ case MH_DYLIB_STUB:
209
+ return "MH_DYLIB_STUB";
210
+ break;
211
+ case MH_DSYM:
212
+ return "MH_DSYM";
213
+ break;
214
+ case MH_KEXT_BUNDLE:
215
+ return "MH_KEXT_BUNDLE";
216
+ break;
217
+ }
218
+ return "MH_UNKNOWN";
219
+ }
220
+
221
+ uint32_t ZArchO::BO(uint32_t uValue)
222
+ {
223
+ return m_bBigEndian ? LE(uValue) : uValue;
224
+ }
225
+
226
+ bool ZArchO::IsExecute()
227
+ {
228
+ if (NULL != m_pHeader) {
229
+ return (MH_EXECUTE == BO(m_pHeader->filetype));
230
+ }
231
+ return false;
232
+ }
233
+
234
+ bool ZArchO::IsSigned() const
235
+ {
236
+ if (NULL == m_pSignBase || m_uSignLength <= 0) {
237
+ ZLog::PrintV("File is not signed.\n");
238
+ return false;
239
+ }
240
+
241
+ ZLog::PrintV("File is signed.\n");
242
+ return true;
243
+ }
244
+
245
+ void ZArchO::PrintInfo()
246
+ {
247
+ if (NULL == m_pHeader) {
248
+ return;
249
+ }
250
+
251
+ ZLog::Print("------------------------------------------------------------------\n");
252
+ ZLog::Print(">>> MachO Info: \n");
253
+ ZLog::PrintV("\tFileType: \t%s\n", GetFileType(BO(m_pHeader->filetype)));
254
+ ZLog::PrintV("\tTotalSize: \t%u (%s)\n", m_uLength, ZUtil::FormatSize(m_uLength).c_str());
255
+ ZLog::PrintV("\tPlatform: \t%u\n", m_b64Bit ? 64 : 32);
256
+ ZLog::PrintV("\tCPUArch: \t%s\n", GetArch(BO(m_pHeader->cputype), BO(m_pHeader->cpusubtype)));
257
+ ZLog::PrintV("\tCPUType: \t0x%x\n", BO(m_pHeader->cputype));
258
+ ZLog::PrintV("\tCPUSubType: \t0x%x\n", BO(m_pHeader->cpusubtype));
259
+ ZLog::PrintV("\tBigEndian: \t%d\n", m_bBigEndian);
260
+ ZLog::PrintV("\tEncrypted: \t%d\n", m_bEncrypted);
261
+ ZLog::PrintV("\tCommandCount: \t%d\n", BO(m_pHeader->ncmds));
262
+ ZLog::PrintV("\tCodeLength: \t%d (%s)\n", m_uCodeLength, ZUtil::FormatSize(m_uCodeLength).c_str());
263
+ ZLog::PrintV("\tSignLength: \t%d (%s)\n", m_uSignLength, ZUtil::FormatSize(m_uSignLength).c_str());
264
+ ZLog::PrintV("\tSpareLength: \t%d (%s)\n", m_uLength - m_uCodeLength - m_uSignLength, ZUtil::FormatSize(m_uLength - m_uCodeLength - m_uSignLength).c_str());
265
+
266
+ uint8_t* pLoadCommand = m_pBase + m_uHeaderSize;
267
+ for (uint32_t i = 0; i < BO(m_pHeader->ncmds); i++) {
268
+ load_command* plc = (load_command*)pLoadCommand;
269
+ if (LC_VERSION_MIN_IPHONEOS == BO(plc->cmd)) {
270
+ ZLog::PrintV("\tMIN_IPHONEOS: \t0x%x\n", *((uint32_t*)(pLoadCommand + sizeof(load_command))));
271
+ } else if (LC_RPATH == BO(plc->cmd)) {
272
+ ZLog::PrintV("\tLC_RPATH: \t%s\n", (char*)(pLoadCommand + sizeof(load_command) + 4));
273
+ }
274
+ pLoadCommand += BO(plc->cmdsize);
275
+ }
276
+
277
+ bool bHasWeakDylib = false;
278
+ ZLog::PrintV("\tLC_LOAD_DYLIB: \n");
279
+ pLoadCommand = m_pBase + m_uHeaderSize;
280
+ for (uint32_t i = 0; i < BO(m_pHeader->ncmds); i++) {
281
+ load_command* plc = (load_command*)pLoadCommand;
282
+ if (LC_LOAD_DYLIB == BO(plc->cmd)) {
283
+ dylib_command* dlc = (dylib_command*)pLoadCommand;
284
+ const char* szDylib = (const char*)(pLoadCommand + BO(dlc->dylib.name.offset));
285
+ ZLog::PrintV("\t\t\t%s\n", szDylib);
286
+ } else if (LC_LOAD_WEAK_DYLIB == BO(plc->cmd)) {
287
+ bHasWeakDylib = true;
288
+ }
289
+ pLoadCommand += BO(plc->cmdsize);
290
+ }
291
+
292
+ if (bHasWeakDylib) {
293
+ ZLog::PrintV("\tLC_LOAD_WEAK_DYLIB: \n");
294
+ pLoadCommand = m_pBase + m_uHeaderSize;
295
+ for (uint32_t i = 0; i < BO(m_pHeader->ncmds); i++) {
296
+ load_command* plc = (load_command*)pLoadCommand;
297
+ if (LC_LOAD_WEAK_DYLIB == BO(plc->cmd)) {
298
+ dylib_command* dlc = (dylib_command*)pLoadCommand;
299
+ const char* szDylib = (const char*)(pLoadCommand + BO(dlc->dylib.name.offset));
300
+ ZLog::PrintV("\t\t\t%s (weak)\n", szDylib);
301
+ }
302
+ pLoadCommand += BO(plc->cmdsize);
303
+ }
304
+ }
305
+
306
+ if (!m_strInfoPlist.empty()) {
307
+ ZLog::Print("\n>>> Embedded Info.plist: \n");
308
+ ZLog::PrintV("\tlength: \t%lu\n", m_strInfoPlist.size());
309
+
310
+ string strInfoPlist = m_strInfoPlist;
311
+ ZUtil::StringReplace(strInfoPlist, "\n", "\n\t\t\t");
312
+ ZLog::PrintV("\tcontent: \t%s\n", strInfoPlist.c_str());
313
+
314
+ ZSHA::PrintData1("\tSHA-1: \t", m_strInfoPlist);
315
+ ZSHA::PrintData256("\tSHA-256:\t", m_strInfoPlist);
316
+ }
317
+
318
+ if (NULL == m_pSignBase || m_uSignLength <= 0) {
319
+ ZLog::Warn(">>> Can't find CodeSignature segment!\n");
320
+ } else {
321
+ ZSign::ParseCodeSignature(m_pSignBase);
322
+ }
323
+
324
+ ZLog::Print("------------------------------------------------------------------\n");
325
+ }
326
+
327
+ bool ZArchO::BuildCodeSignature(ZSignAsset* pSignAsset,
328
+ bool bForce,
329
+ const string& strBundleId,
330
+ const string& strInfoSHA1,
331
+ const string& strInfoSHA256,
332
+ const string& strCodeResourcesSHA1,
333
+ const string& strCodeResourcesSHA256,
334
+ string& strOutput)
335
+ {
336
+ string strRequirementsSlot;
337
+ string strEntitlementsSlot;
338
+ string strDerEntitlementsSlot;
339
+
340
+ string strEmptyEntitlements = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict/>\n</plist>\n";
341
+ ZSign::SlotBuildRequirements(strBundleId, pSignAsset->m_strSubjectCN, strRequirementsSlot);
342
+ ZSign::SlotBuildEntitlements(IsExecute() ? pSignAsset->m_strEntitleData : strEmptyEntitlements, strEntitlementsSlot);
343
+ ZSign::SlotBuildDerEntitlements(IsExecute() ? pSignAsset->m_strEntitleData : "", strDerEntitlementsSlot);
344
+
345
+ string strRequirementsSlotSHA1;
346
+ string strRequirementsSlotSHA256;
347
+ if (strRequirementsSlot.empty()) { //empty
348
+ strRequirementsSlotSHA1.append(20, 0);
349
+ strRequirementsSlotSHA256.append(32, 0);
350
+ } else {
351
+ ZSHA::SHA(strRequirementsSlot, strRequirementsSlotSHA1, strRequirementsSlotSHA256);
352
+ }
353
+
354
+ string strEntitlementsSlotSHA1;
355
+ string strEntitlementsSlotSHA256;
356
+ if (strEntitlementsSlot.empty()) { //empty
357
+ strEntitlementsSlotSHA1.append(20, 0);
358
+ strEntitlementsSlotSHA256.append(32, 0);
359
+ } else {
360
+ ZSHA::SHA(strEntitlementsSlot, strEntitlementsSlotSHA1, strEntitlementsSlotSHA256);
361
+ }
362
+
363
+ string strDerEntitlementsSlotSHA1;
364
+ string strDerEntitlementsSlotSHA256;
365
+ if (strDerEntitlementsSlot.empty()) { //empty
366
+ strDerEntitlementsSlotSHA1.append(20, 0);
367
+ strDerEntitlementsSlotSHA256.append(32, 0);
368
+ } else {
369
+ ZSHA::SHA(strDerEntitlementsSlot, strDerEntitlementsSlotSHA1, strDerEntitlementsSlotSHA256);
370
+ }
371
+
372
+ uint8_t* pCodeSlots1Data = NULL;
373
+ uint8_t* pCodeSlots256Data = NULL;
374
+ uint32_t uCodeSlots1DataLength = 0;
375
+ uint32_t uCodeSlots256DataLength = 0;
376
+ if (!bForce) {
377
+ ZSign::GetCodeSignatureExistsCodeSlotsData(m_pSignBase, pCodeSlots1Data, uCodeSlots1DataLength, pCodeSlots256Data, uCodeSlots256DataLength);
378
+ }
379
+
380
+ uint64_t uExecSegFlags = 0;
381
+ if (MH_EXECUTE == m_uFileType) {
382
+ if (pSignAsset->m_bAdhoc || pSignAsset->m_bSingleBinary) {
383
+ uExecSegFlags = CS_EXECSEG_MAIN_BINARY;
384
+ }
385
+ }
386
+
387
+ if (NULL != strstr(strEntitlementsSlot.data() + 8, "<key>get-task-allow</key>")) {
388
+ // TODO: Check if get-task-allow is actually set to true
389
+ uExecSegFlags |= CS_EXECSEG_MAIN_BINARY | CS_EXECSEG_ALLOW_UNSIGNED;
390
+ }
391
+
392
+ string strCodeDirectorySlot;
393
+ string strAltnateCodeDirectorySlot;
394
+ if (!pSignAsset->m_bSHA256Only) {
395
+ ZSign::SlotBuildCodeDirectory(false,
396
+ m_pBase,
397
+ m_uCodeLength,
398
+ pCodeSlots1Data,
399
+ uCodeSlots1DataLength,
400
+ s_uExecSegLimit,
401
+ uExecSegFlags,
402
+ strBundleId,
403
+ pSignAsset->m_strTeamId,
404
+ strInfoSHA1,
405
+ strRequirementsSlotSHA1,
406
+ strCodeResourcesSHA1,
407
+ strEntitlementsSlotSHA1,
408
+ strDerEntitlementsSlotSHA1,
409
+ IsExecute(),
410
+ pSignAsset->m_bAdhoc,
411
+ strCodeDirectorySlot);
412
+ }
413
+
414
+ ZSign::SlotBuildCodeDirectory(true,
415
+ m_pBase,
416
+ m_uCodeLength,
417
+ pCodeSlots256Data,
418
+ uCodeSlots256DataLength,
419
+ s_uExecSegLimit,
420
+ uExecSegFlags,
421
+ strBundleId,
422
+ pSignAsset->m_strTeamId,
423
+ strInfoSHA256,
424
+ strRequirementsSlotSHA256,
425
+ strCodeResourcesSHA256,
426
+ strEntitlementsSlotSHA256,
427
+ strDerEntitlementsSlotSHA256,
428
+ IsExecute(),
429
+ pSignAsset->m_bAdhoc,
430
+ strAltnateCodeDirectorySlot);
431
+ if (pSignAsset->m_bSHA256Only) {
432
+ // SHA256-based code directory is usually the alternate; however, make it the primary (and only)
433
+ // code directory if `m_bUseSHA256Only == true`.
434
+ strAltnateCodeDirectorySlot.swap(strCodeDirectorySlot);
435
+ }
436
+
437
+ string strCMSSignatureSlot;
438
+ if (!pSignAsset->m_bAdhoc) { //adhoc remove cms signature slot
439
+ ZSign::SlotBuildCMSSignature(pSignAsset, strCodeDirectorySlot, strAltnateCodeDirectorySlot, strCMSSignatureSlot);
440
+ }
441
+
442
+ uint32_t uCodeDirectorySlotLength = (uint32_t)strCodeDirectorySlot.size();
443
+ uint32_t uRequirementsSlotLength = (uint32_t)strRequirementsSlot.size();
444
+ uint32_t uEntitlementsSlotLength = (uint32_t)strEntitlementsSlot.size();
445
+ uint32_t uDerEntitlementsLength = (uint32_t)strDerEntitlementsSlot.size();
446
+ uint32_t uAltnateCodeDirectorySlotLength = (uint32_t)strAltnateCodeDirectorySlot.size();
447
+ uint32_t uCMSSignatureSlotLength = (uint32_t)strCMSSignatureSlot.size();
448
+
449
+ uint32_t uCodeSignBlobCount = 0;
450
+ uCodeSignBlobCount += (uCodeDirectorySlotLength > 0) ? 1 : 0;
451
+ uCodeSignBlobCount += (uRequirementsSlotLength > 0) ? 1 : 0;
452
+ uCodeSignBlobCount += (uEntitlementsSlotLength > 0) ? 1 : 0;
453
+ uCodeSignBlobCount += (uDerEntitlementsLength > 0) ? 1 : 0;
454
+ uCodeSignBlobCount += (uAltnateCodeDirectorySlotLength > 0) ? 1 : 0;
455
+ uCodeSignBlobCount += (uCMSSignatureSlotLength > 0) ? 1 : 0;
456
+
457
+ uint32_t uSuperBlobHeaderLength = sizeof(CS_SuperBlob) + uCodeSignBlobCount * sizeof(CS_BlobIndex);
458
+ uint32_t uCodeSignLength = uSuperBlobHeaderLength +
459
+ uCodeDirectorySlotLength +
460
+ uRequirementsSlotLength +
461
+ uEntitlementsSlotLength +
462
+ uDerEntitlementsLength +
463
+ uAltnateCodeDirectorySlotLength +
464
+ uCMSSignatureSlotLength;
465
+
466
+ vector<CS_BlobIndex> arrBlobIndexes;
467
+ if (uCodeDirectorySlotLength > 0) {
468
+ CS_BlobIndex blob;
469
+ blob.type = BE((uint32_t)CSSLOT_CODEDIRECTORY);
470
+ blob.offset = BE(uSuperBlobHeaderLength);
471
+ arrBlobIndexes.push_back(blob);
472
+ }
473
+
474
+ if (uRequirementsSlotLength > 0) {
475
+ CS_BlobIndex blob;
476
+ blob.type = BE((uint32_t)CSSLOT_REQUIREMENTS);
477
+ blob.offset = BE(uSuperBlobHeaderLength + uCodeDirectorySlotLength);
478
+ arrBlobIndexes.push_back(blob);
479
+ }
480
+
481
+ if (uEntitlementsSlotLength > 0) {
482
+ CS_BlobIndex blob;
483
+ blob.type = BE((uint32_t)CSSLOT_ENTITLEMENTS);
484
+ blob.offset = BE(uSuperBlobHeaderLength + uCodeDirectorySlotLength + uRequirementsSlotLength);
485
+ arrBlobIndexes.push_back(blob);
486
+ }
487
+
488
+ if (uDerEntitlementsLength > 0) {
489
+ CS_BlobIndex blob;
490
+ blob.type = BE((uint32_t)CSSLOT_DER_ENTITLEMENTS);
491
+ blob.offset = BE(uSuperBlobHeaderLength + uCodeDirectorySlotLength + uRequirementsSlotLength + uEntitlementsSlotLength);
492
+ arrBlobIndexes.push_back(blob);
493
+ }
494
+
495
+ if (uAltnateCodeDirectorySlotLength > 0) {
496
+ CS_BlobIndex blob;
497
+ blob.type = BE((uint32_t)CSSLOT_ALTERNATE_CODEDIRECTORIES);
498
+ blob.offset = BE(uSuperBlobHeaderLength + uCodeDirectorySlotLength + uRequirementsSlotLength + uEntitlementsSlotLength + uDerEntitlementsLength);
499
+ arrBlobIndexes.push_back(blob);
500
+ }
501
+
502
+ if (uCMSSignatureSlotLength > 0) {
503
+ CS_BlobIndex blob;
504
+ blob.type = BE((uint32_t)CSSLOT_SIGNATURESLOT);
505
+ blob.offset = BE(uSuperBlobHeaderLength + uCodeDirectorySlotLength + uRequirementsSlotLength + uEntitlementsSlotLength + uDerEntitlementsLength + uAltnateCodeDirectorySlotLength);
506
+ arrBlobIndexes.push_back(blob);
507
+ }
508
+
509
+ CS_SuperBlob superblob;
510
+ superblob.magic = BE((uint32_t)CSMAGIC_EMBEDDED_SIGNATURE);
511
+ superblob.length = BE(uCodeSignLength);
512
+ superblob.count = BE(uCodeSignBlobCount);
513
+
514
+ strOutput.clear();
515
+ strOutput.reserve(uCodeSignLength);
516
+ strOutput.append((const char*)&superblob, sizeof(superblob));
517
+ for (size_t i = 0; i < arrBlobIndexes.size(); i++) {
518
+ CS_BlobIndex& blob = arrBlobIndexes[i];
519
+ strOutput.append((const char*)&blob, sizeof(blob));
520
+ }
521
+ strOutput += strCodeDirectorySlot;
522
+ strOutput += strRequirementsSlot;
523
+ strOutput += strEntitlementsSlot;
524
+ strOutput += strDerEntitlementsSlot;
525
+ strOutput += strAltnateCodeDirectorySlot;
526
+ strOutput += strCMSSignatureSlot;
527
+
528
+ if (ZLog::IsDebug()) {
529
+ ZFile::WriteFile("./.zsign_debug/Requirements.slot.new", strRequirementsSlot);
530
+ ZFile::WriteFile("./.zsign_debug/Entitlements.slot.new", strEntitlementsSlot);
531
+ ZFile::WriteFile("./.zsign_debug/Entitlements.der.slot.new", strDerEntitlementsSlot);
532
+ ZFile::WriteFile("./.zsign_debug/Entitlements.plist.new", strEntitlementsSlot.data() + 8, strEntitlementsSlot.size() - 8);
533
+ ZFile::WriteFile("./.zsign_debug/CodeDirectory_SHA1.slot.new", strCodeDirectorySlot);
534
+ ZFile::WriteFile("./.zsign_debug/CodeDirectory_SHA256.slot.new", strAltnateCodeDirectorySlot);
535
+ ZFile::WriteFile("./.zsign_debug/CMSSignature.slot.new", strCMSSignatureSlot);
536
+ ZFile::WriteFile("./.zsign_debug/CMSSignature.der.new", strCMSSignatureSlot.data() + 8, strCMSSignatureSlot.size() - 8);
537
+ ZFile::WriteFile("./.zsign_debug/CodeSignature.blob.new", strOutput);
538
+ }
539
+
540
+ return true;
541
+ }
542
+
543
+ bool ZArchO::Sign(ZSignAsset* pSignAsset,
544
+ bool bForce,
545
+ const string& strBundleId,
546
+ const string& strInfoSHA1,
547
+ const string& strInfoSHA256,
548
+ const string& strCodeResourcesData)
549
+ {
550
+ if (NULL == m_pSignBase) {
551
+ m_bEnoughSpace = false;
552
+ ZLog::Warn(">>> Can't find CodeSignature segment!\n");
553
+ return false;
554
+ }
555
+
556
+ string strCodeResourcesSHA1;
557
+ string strCodeResourcesSHA256;
558
+ if (strCodeResourcesData.empty()) {
559
+ strCodeResourcesSHA1.append(20, 0);
560
+ strCodeResourcesSHA256.append(32, 0);
561
+ } else {
562
+ ZSHA::SHA(strCodeResourcesData, strCodeResourcesSHA1, strCodeResourcesSHA256);
563
+ }
564
+
565
+ string strCodeSignBlob;
566
+ BuildCodeSignature(pSignAsset, bForce, strBundleId, strInfoSHA1, strInfoSHA256, strCodeResourcesSHA1, strCodeResourcesSHA256, strCodeSignBlob);
567
+ if (strCodeSignBlob.empty()) {
568
+ ZLog::Error(">>> Build CodeSignature failed!\n");
569
+ return false;
570
+ }
571
+
572
+ int nSpaceLength = (int)m_uLength - (int)m_uCodeLength - (int)strCodeSignBlob.size();
573
+ if (nSpaceLength < 0) {
574
+ m_bEnoughSpace = false;
575
+ ZLog::WarnV(">>> No enough CodeSignature space (now: %d, need: %d).\n", (int)m_uLength - (int)m_uCodeLength, (int)strCodeSignBlob.size());
576
+ return false;
577
+ }
578
+
579
+ memcpy(m_pBase + m_uCodeLength, strCodeSignBlob.data(), strCodeSignBlob.size());
580
+ //memset(m_pBase + m_uCodeLength + strCodeSignBlob.size(), 0, nSpaceLength);
581
+ return true;
582
+ }
583
+
584
+ uint32_t ZArchO::ReallocCodeSignSpace(const string& strNewFile)
585
+ {
586
+ ZFile::RemoveFile(strNewFile.c_str());
587
+
588
+ uint32_t uNewLength = m_uCodeLength + ZUtil::ByteAlign(((m_uCodeLength / 4096) + 1) * (20 + 32), 4096) + 16384; //16K May Be Enough
589
+ if (NULL == m_pLinkEditSegment || uNewLength <= m_uLength) {
590
+ return 0;
591
+ }
592
+
593
+ load_command* pseglc = (load_command*)m_pLinkEditSegment;
594
+ switch (BO(pseglc->cmd)) {
595
+ case LC_SEGMENT:
596
+ {
597
+ segment_command* seglc = (segment_command*)m_pLinkEditSegment;
598
+ seglc->vmsize = ZUtil::ByteAlign(BO(seglc->vmsize) + (uNewLength - m_uLength), 4096);
599
+ seglc->vmsize = BO(seglc->vmsize);
600
+ seglc->filesize = uNewLength - BO(seglc->fileoff);
601
+ seglc->filesize = BO(seglc->filesize);
602
+ }
603
+ break;
604
+ case LC_SEGMENT_64:
605
+ {
606
+ segment_command_64* seglc = (segment_command_64*)m_pLinkEditSegment;
607
+ seglc->vmsize = ZUtil::ByteAlign(BO((uint32_t)seglc->vmsize) + (uNewLength - m_uLength), 4096);
608
+ seglc->vmsize = BO((uint32_t)seglc->vmsize);
609
+ seglc->filesize = uNewLength - BO((uint32_t)seglc->fileoff);
610
+ seglc->filesize = BO((uint32_t)seglc->filesize);
611
+ }
612
+ break;
613
+ }
614
+
615
+ codesignature_command* pcslc = (codesignature_command*)m_pCodeSignSegment;
616
+ if (NULL == pcslc) {
617
+ if (m_uLoadCommandsFreeSpace < 4) {
618
+ ZLog::Error(">>> Can't find free space of LoadCommands for CodeSignature!\n");
619
+ return 0;
620
+ }
621
+
622
+ pcslc = (codesignature_command*)(m_pBase + m_uHeaderSize + BO(m_pHeader->sizeofcmds));
623
+ pcslc->cmd = BO(LC_CODE_SIGNATURE);
624
+ pcslc->cmdsize = BO((uint32_t)sizeof(codesignature_command));
625
+ pcslc->dataoff = BO(m_uCodeLength);
626
+ m_pHeader->ncmds = BO(BO(m_pHeader->ncmds) + 1);
627
+ m_pHeader->sizeofcmds = BO(BO(m_pHeader->sizeofcmds) + sizeof(codesignature_command));
628
+ }
629
+ pcslc->datasize = BO(uNewLength - m_uCodeLength);
630
+
631
+ if (!ZFile::AppendFile(strNewFile.c_str(), (const char*)m_pBase, m_uLength)) {
632
+ return 0;
633
+ }
634
+
635
+ string strPadding;
636
+ strPadding.append(uNewLength - m_uLength, 0);
637
+ if (!ZFile::AppendFile(strNewFile.c_str(), strPadding)) {
638
+ ZFile::RemoveFile(strNewFile.c_str());
639
+ return 0;
640
+ }
641
+
642
+ return uNewLength;
643
+ }
644
+
645
+ bool ZArchO::InjectDylib(bool bWeakInject, const char* szDylibFile)
646
+ {
647
+ if (NULL == m_pHeader) {
648
+ return false;
649
+ }
650
+
651
+ uint8_t* pLoadCommand = m_pBase + m_uHeaderSize;
652
+ for (uint32_t i = 0; i < BO(m_pHeader->ncmds); i++) {
653
+ load_command* plc = (load_command*)pLoadCommand;
654
+ uint32_t uLoadType = BO(plc->cmd);
655
+ if (LC_LOAD_DYLIB == uLoadType || LC_LOAD_WEAK_DYLIB == uLoadType) {
656
+ dylib_command* dlc = (dylib_command*)pLoadCommand;
657
+ const char* szDylib = (const char*)(pLoadCommand + BO(dlc->dylib.name.offset));
658
+ if (0 == strcmp(szDylib, szDylibFile)) {
659
+ if ((bWeakInject && (LC_LOAD_WEAK_DYLIB != uLoadType)) || (!bWeakInject && (LC_LOAD_DYLIB != uLoadType))) {
660
+ dlc->cmd = BO((uint32_t)(bWeakInject ? LC_LOAD_WEAK_DYLIB : LC_LOAD_DYLIB));
661
+ const char* oldLoadType = bWeakInject ? "LC_LOAD_DYLIB" : "LC_LOAD_WEAK_DYLIB";
662
+ const char* newLoadType = bWeakInject ? "LC_LOAD_WEAK_DYLIB" : "LC_LOAD_DYLIB";
663
+ ZLog::WarnV(">>>\t\t %s -> %s\n", oldLoadType, newLoadType);
664
+ }
665
+ return true;
666
+ }
667
+ }
668
+ pLoadCommand += BO(plc->cmdsize);
669
+ }
670
+
671
+ uint32_t uDylibFileLength = (uint32_t)strlen(szDylibFile);
672
+ uint32_t uDylibFilePadding = (8 - uDylibFileLength % 8);
673
+ uint32_t uDylibCommandSize = sizeof(dylib_command) + uDylibFileLength + uDylibFilePadding;
674
+ if (m_uLoadCommandsFreeSpace > 0 && m_uLoadCommandsFreeSpace < uDylibCommandSize) { // some bin doesn't have '__text'
675
+ ZLog::Error(">>> Can't find free space of LoadCommands for LC_LOAD_DYLIB or LC_LOAD_WEAK_DYLIB!\n");
676
+ return false;
677
+ }
678
+
679
+ //add
680
+ dylib_command* dlc = (dylib_command*)(m_pBase + m_uHeaderSize + BO(m_pHeader->sizeofcmds));
681
+ dlc->cmd = BO((uint32_t)(bWeakInject ? LC_LOAD_WEAK_DYLIB : LC_LOAD_DYLIB));
682
+ dlc->cmdsize = BO(uDylibCommandSize);
683
+ dlc->dylib.name.offset = BO((uint32_t)sizeof(dylib_command));
684
+ dlc->dylib.timestamp = BO((uint32_t)2);
685
+ dlc->dylib.current_version = 0;
686
+ dlc->dylib.compatibility_version = 0;
687
+
688
+ string strDylibFile = szDylibFile;
689
+ strDylibFile.append(uDylibFilePadding, 0);
690
+
691
+ uint8_t* pDylibFile = (uint8_t*)dlc + sizeof(dylib_command);
692
+ memcpy(pDylibFile, strDylibFile.data(), strDylibFile.size());
693
+
694
+ m_pHeader->ncmds = BO(BO(m_pHeader->ncmds) + 1);
695
+ m_pHeader->sizeofcmds = BO(BO(m_pHeader->sizeofcmds) + uDylibCommandSize);
696
+
697
+ return true;
698
+ }
699
+
700
+ void ZArchO::RemoveDylibs(set<string> setDylibs)
701
+ {
702
+ uint8_t* pLoadCommand = m_pBase + m_uHeaderSize;
703
+ uint32_t old_load_command_size = m_pHeader->sizeofcmds;
704
+ uint8_t* new_load_command_data = (uint8_t*)malloc(old_load_command_size);
705
+ if (NULL == new_load_command_data) {
706
+ return;
707
+ }
708
+
709
+ memset(new_load_command_data, 0, old_load_command_size);
710
+ uint32_t new_load_command_size = 0;
711
+ uint32_t clear_num = 0;
712
+ uint32_t clear_data_size = 0;
713
+ for (uint32_t i = 0; i < BO(m_pHeader->ncmds); i++) {
714
+ load_command* plc = (load_command*)pLoadCommand;
715
+ uint32_t load_command_size = BO(plc->cmdsize);
716
+ if (LC_LOAD_DYLIB == BO(plc->cmd) || LC_LOAD_WEAK_DYLIB == BO(plc->cmd)) {
717
+ dylib_command* dlc = (dylib_command*)pLoadCommand;
718
+ const char* szDylib = (const char*)(pLoadCommand + BO(dlc->dylib.name.offset));
719
+ string dylibName = szDylib;
720
+ if (setDylibs.count(dylibName) > 0) {
721
+ ZLog::PrintV("\t\t\t%s\tclear\n", szDylib);
722
+ clear_num++;
723
+ clear_data_size += load_command_size;
724
+ pLoadCommand += BO(plc->cmdsize);
725
+ continue;
726
+ }
727
+ ZLog::PrintV("\t\t\t%s\n", szDylib);
728
+ }
729
+ new_load_command_size += load_command_size;
730
+ memcpy(new_load_command_data, pLoadCommand, load_command_size);
731
+ new_load_command_data += load_command_size;
732
+ pLoadCommand += BO(plc->cmdsize);
733
+ }
734
+ pLoadCommand -= m_pHeader->sizeofcmds;
735
+
736
+ m_pHeader->ncmds -= clear_num;
737
+ m_pHeader->sizeofcmds -= clear_data_size;
738
+ new_load_command_data -= new_load_command_size;
739
+ memset(pLoadCommand, 0, old_load_command_size);
740
+ memcpy(pLoadCommand, new_load_command_data, new_load_command_size);
741
+ free(new_load_command_data);
742
+ }