Advertisement
Guest User

Untitled

a guest
Sep 17th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.15 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. bold=$(tput bold)
  4. normal=$(tput sgr0)
  5.  
  6. usage() {
  7. echo ""
  8. echo "usage: $0 -i <input search path> -s <entitlement keyword>"
  9. echo ""
  10. echo -e "\tDump entitlements into a plist file OR do a fuzzy case insensitive search for entitlements in frameworks, applications and LaunchDaemons"
  11. echo -e "\tIf you provide the search/keyword argument, it will perform the search, if only input argument and it will perform the dump operation"
  12. echo -e "\n\t-f --frameworks\t\tprocess/search frameworks [defaults to off]"
  13. echo -e "\t-a --apps\t\tprocess/search applications [defaults to off]"
  14. echo -e "\t-l --launchdaemons\tprocess/search LaunchDaemons [defaults to on]\n"
  15. trap - INT TERM EXIT
  16. exit 1
  17. }
  18.  
  19. if [ "$#" = 0 ]; then
  20. #echo "You must enter at least 1 command line arguments"
  21. usage
  22. exit 0
  23. fi
  24.  
  25. ldid=`which ldid`
  26. pbuddy=`which PlistBuddy`
  27. signargs="$ldid -e"
  28.  
  29. if [ -z $ldid ]; then
  30.  
  31. ldid=`which jtool`
  32. if [ -z $ldid ]; then
  33. echo -e "\n\tERROR: ldid or jtool are required to run!\n"
  34. exit 1
  35. else
  36. signargs="$ldid --ent"
  37. fi
  38. fi
  39.  
  40. PLBUDDY_ALT=0
  41. FRAMEWORKS="false"
  42. APPS="false"
  43. LDS="true"
  44. VERBOSE="false"
  45.  
  46. if [ -z $pbuddy ]; then
  47. pbuddy="/usr/libexec/PlistBuddy"
  48. if [ ! -f $pbuddy ]; then
  49. pbuddy=`which plutil`
  50. if [ ! -f $pbuddy ]; then
  51. echo -e "\n\tERROR PlistBuddy or plutil is required to run!\n"
  52. exit 1
  53. else
  54. PLBUDDY_ALT=1
  55. fi
  56. fi
  57. fi
  58.  
  59. #if [ ! -d "$1" ]; then
  60. # echo -e "\n\tNo directory exists at path $1 try again specifying a valid path please!\n"
  61. #exit 1
  62. #fi
  63.  
  64. while test $# -gt 0; do
  65. case "$1" in
  66. -h|--help)
  67. usage
  68. ;;
  69. -f|--frameworks)
  70. FRAMEWORKS="true"
  71. shift
  72. ;;
  73. -a|--apps)
  74. APPS="true"
  75. shift
  76. ;;
  77. -l|--launchdaemons)
  78. LDS="true"
  79. shift
  80. ;;
  81. -v|--verbose)
  82. VERBOSE="true"
  83. shift
  84. ;;
  85. -i|--input-folder)
  86. shift
  87. if test $# -gt 0; then
  88. INPUT_FOLDER="$1"
  89. if [ ! -d "$INPUT_FOLDER" ]; then
  90. echo "Error: Invalid input folder"
  91. trap - INT TERM EXIT
  92. exit 1
  93. fi
  94. else
  95. echo "Error: No input path given."
  96. trap - INT TERM EXIT
  97. exit 1
  98. fi
  99. shift
  100. ;;
  101. -s|--search-keyword)
  102. shift
  103. if test $# -gt 0; then
  104. KEYWORD="$1"
  105. fi
  106. shift
  107. ;;
  108. *)
  109. break
  110. ;;
  111. esac
  112. done
  113.  
  114. echo -e "\ninput folder: $INPUT_FOLDER\nkeyword: $KEYWORD\n"
  115. #exit 0
  116.  
  117. if [ "$FRAMEWORKS" == "true" ]; then
  118. echo ""
  119. if [ ! -z $KEYWORD ]; then
  120. echo "Testing framework entitlements for ${bold}'$KEYWORD'${normal}"
  121. else
  122. echo "Dumping framework entitlements"
  123. fi
  124. echo ""
  125. FILES=`find $INPUT_FOLDER -path "*.framework"`
  126.  
  127. for f in $FILES
  128. do
  129. echo "Processing $f file..."
  130. filename=`basename $f`
  131. name=${filename%\.*}
  132. fullpath="$f/$name"
  133. #echo "full path: $fullpath"
  134. if [ -f "$fullpath" ]; then
  135. if [ ! -z $KEYWORD ]; then
  136. match=`$signargs $fullpath 2> /dev/null | grep -i $KEYWORD`
  137. if [ ! -z "$match" ]; then
  138. echo "** MATCHED: ${bold}$filename"${normal}
  139. echo -e "\n\t\t$match"
  140. echo ""
  141. fi
  142. else
  143. #ldid -e "$fullpath"
  144. echo ""
  145. if [ ! -d "entitlements/Frameworks" ]; then
  146. mkdir -p entitlements/Frameworks
  147. fi
  148. echo "Dumping entitlements for: $filename"
  149. $signargs "$fullpath" > entitlements/Frameworks/$filename.plist 2> /dev/null
  150. fi
  151. fi
  152. done
  153. fi
  154.  
  155. if [ "$APPS" == "true" ]; then
  156. echo ""
  157. if [ ! -z $KEYWORD ]; then
  158. echo "Testing App entitlements for ${bold}'$KEYWORD'${normal}"
  159. else
  160. echo "Dumping App entitlements"
  161. fi
  162. echo ""
  163.  
  164. FILES=`find $INPUT_FOLDER -path "*.app"`
  165. if [ "$VERBOSE" == "true" ]; then
  166. echo "find $INPUT_FOLDER -path .app"
  167. fi
  168. #echo $FILES
  169.  
  170. for f in $FILES
  171. do
  172. filename=`basename $f`
  173. name=${filename%\.*}
  174. fullpath="$f/$name"
  175. #echo "full path: $fullpath"
  176. if [ "$VERBOSE" == "true" ]; then
  177. echo "Processing $fullpath..."
  178. fi
  179. if [ -f "$fullpath" ]; then
  180. if [ ! -z $KEYWORD ]; then
  181. match=`$signargs "$fullpath" 2> /dev/null | grep -i $KEYWORD`
  182. if [ ! -z "$match" ]; then
  183. echo "** MATCHED: ${bold}$filename"${normal}
  184. echo -e "\n\t\t$match"
  185. echo ""
  186. fi
  187. else
  188. echo ""
  189. if [ ! -d "entitlements/Apps" ]; then
  190. mkdir -p entitlements/Apps
  191. fi
  192. echo "Dumping entitlements for: $filename"
  193. $signargs "$fullpath" > entitlements/Apps/$filename.plist 2> /dev/null
  194. fi
  195. fi
  196. done
  197. fi
  198.  
  199. if [ "$LDS" == "true" ]; then
  200. echo "Searching Launch Daemon entitlements..."
  201. if [ "$VERBOSE" == "true" ]; then
  202. echo "find $INPUT_FOLDER -name com.*.plist"
  203. fi
  204. FILES=`find $INPUT_FOLDER -name "com.*.plist"`
  205.  
  206. echo ""
  207. if [ ! -z $KEYWORD ]; then
  208. echo "Testing Launch Daemon entitlements for ${bold}'$KEYWORD'${normal}"
  209. else
  210. echo "Dumping Launch Daemon entitlements"
  211. fi
  212. echo ""
  213. for f in $FILES
  214. do
  215.  
  216. if [ "$VERBOSE" == "true" ]; then
  217. echo "processing $f..."
  218. echo "Searching for 'Program' Key..."
  219. fi
  220.  
  221. if [ $PLBUDDY_ALT = 0 ]; then
  222. $pbuddy -c 'Print Program' $f > .tmpout 2> /dev/null
  223. else
  224. plutil -key Program "$f" > .tmpout 2> /dev/null
  225. fi
  226. program=`cat .tmpout | tr -d "\""`
  227. #echo $program
  228. if [ -z "${program}" ] ;then
  229. if [ "$VERBOSE" == "true" ]; then
  230. echo -e "\nNot found!!\nSearching for 'ProgramArguments' Key..."
  231. fi
  232. if [ $PLBUDDY_ALT = 0 ]; then
  233. $pbuddy -c 'Print :ProgramArguments:0' $f > .tmpout 2> /dev/null
  234. else
  235. plutil -key ProgramArguments "$f" > .tmpout 2> /dev/null
  236. fi
  237. program=`cat .tmpout | tr -d " ()\"\n"`
  238.  
  239. fi
  240. #echo $program
  241. if [ ! -z "${program}" ] ;then
  242.  
  243. if [ "$VERBOSE" == "true" ]; then
  244. echo -e "\t\t$program found!"
  245. fi
  246.  
  247. ARCH=`arch`
  248. if [ $ARCH == "arm"* ]; then
  249. fullpath="$program"
  250. else
  251. fullpath="$INPUT_FOLDER$program"
  252. fi
  253. filename=`basename $fullpath`
  254. plistname=`basename "$f"`
  255. if [ -f "$fullpath" ]; then
  256. if [ ! -z $KEYWORD ]; then
  257. match=`$signargs "$fullpath" 2> /dev/null | grep -i $KEYWORD`
  258. if [ ! -z "$match" ]; then
  259. #echo $fullpath
  260. echo -e "** MATCHED: ${bold}$filename${normal} in ${bold}$f${normal}"
  261. #echo -e "\n\t\t$match"
  262. echo -e "\n\t\t${bold}$match${normal}" #"\033[4mThis is a underlined line.\033[0m"
  263. echo ""
  264. fi
  265. else
  266. echo ""
  267. if [ ! -d "entitlements/Daemons" ]; then
  268. mkdir -p entitlements/Daemons
  269. fi
  270. echo "Dumping entitlements for: $filename"
  271. $signargs "$fullpath" > "entitlements/Daemons/$filename.plist" 2> /dev/null
  272. fi
  273. fi
  274. fi
  275.  
  276. done
  277. fi
  278. echo ""
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement