Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- bold=$(tput bold)
- normal=$(tput sgr0)
- usage() {
- echo ""
- echo "usage: $0 -i <input search path> -s <entitlement keyword>"
- echo ""
- echo -e "\tDump entitlements into a plist file OR do a fuzzy case insensitive search for entitlements in frameworks, applications and LaunchDaemons"
- 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"
- echo -e "\n\t-f --frameworks\t\tprocess/search frameworks [defaults to off]"
- echo -e "\t-a --apps\t\tprocess/search applications [defaults to off]"
- echo -e "\t-l --launchdaemons\tprocess/search LaunchDaemons [defaults to on]\n"
- trap - INT TERM EXIT
- exit 1
- }
- if [ "$#" = 0 ]; then
- #echo "You must enter at least 1 command line arguments"
- usage
- exit 0
- fi
- ldid=`which ldid`
- pbuddy=`which PlistBuddy`
- signargs="$ldid -e"
- if [ -z $ldid ]; then
- ldid=`which jtool`
- if [ -z $ldid ]; then
- echo -e "\n\tERROR: ldid or jtool are required to run!\n"
- exit 1
- else
- signargs="$ldid --ent"
- fi
- fi
- PLBUDDY_ALT=0
- FRAMEWORKS="false"
- APPS="false"
- LDS="true"
- VERBOSE="false"
- if [ -z $pbuddy ]; then
- pbuddy="/usr/libexec/PlistBuddy"
- if [ ! -f $pbuddy ]; then
- pbuddy=`which plutil`
- if [ ! -f $pbuddy ]; then
- echo -e "\n\tERROR PlistBuddy or plutil is required to run!\n"
- exit 1
- else
- PLBUDDY_ALT=1
- fi
- fi
- fi
- #if [ ! -d "$1" ]; then
- # echo -e "\n\tNo directory exists at path $1 try again specifying a valid path please!\n"
- #exit 1
- #fi
- while test $# -gt 0; do
- case "$1" in
- -h|--help)
- usage
- ;;
- -f|--frameworks)
- FRAMEWORKS="true"
- shift
- ;;
- -a|--apps)
- APPS="true"
- shift
- ;;
- -l|--launchdaemons)
- LDS="true"
- shift
- ;;
- -v|--verbose)
- VERBOSE="true"
- shift
- ;;
- -i|--input-folder)
- shift
- if test $# -gt 0; then
- INPUT_FOLDER="$1"
- if [ ! -d "$INPUT_FOLDER" ]; then
- echo "Error: Invalid input folder"
- trap - INT TERM EXIT
- exit 1
- fi
- else
- echo "Error: No input path given."
- trap - INT TERM EXIT
- exit 1
- fi
- shift
- ;;
- -s|--search-keyword)
- shift
- if test $# -gt 0; then
- KEYWORD="$1"
- fi
- shift
- ;;
- *)
- break
- ;;
- esac
- done
- echo -e "\ninput folder: $INPUT_FOLDER\nkeyword: $KEYWORD\n"
- #exit 0
- if [ "$FRAMEWORKS" == "true" ]; then
- echo ""
- if [ ! -z $KEYWORD ]; then
- echo "Testing framework entitlements for ${bold}'$KEYWORD'${normal}"
- else
- echo "Dumping framework entitlements"
- fi
- echo ""
- FILES=`find $INPUT_FOLDER -path "*.framework"`
- for f in $FILES
- do
- echo "Processing $f file..."
- filename=`basename $f`
- name=${filename%\.*}
- fullpath="$f/$name"
- #echo "full path: $fullpath"
- if [ -f "$fullpath" ]; then
- if [ ! -z $KEYWORD ]; then
- match=`$signargs $fullpath 2> /dev/null | grep -i $KEYWORD`
- if [ ! -z "$match" ]; then
- echo "** MATCHED: ${bold}$filename"${normal}
- echo -e "\n\t\t$match"
- echo ""
- fi
- else
- #ldid -e "$fullpath"
- echo ""
- if [ ! -d "entitlements/Frameworks" ]; then
- mkdir -p entitlements/Frameworks
- fi
- echo "Dumping entitlements for: $filename"
- $signargs "$fullpath" > entitlements/Frameworks/$filename.plist 2> /dev/null
- fi
- fi
- done
- fi
- if [ "$APPS" == "true" ]; then
- echo ""
- if [ ! -z $KEYWORD ]; then
- echo "Testing App entitlements for ${bold}'$KEYWORD'${normal}"
- else
- echo "Dumping App entitlements"
- fi
- echo ""
- FILES=`find $INPUT_FOLDER -path "*.app"`
- if [ "$VERBOSE" == "true" ]; then
- echo "find $INPUT_FOLDER -path .app"
- fi
- #echo $FILES
- for f in $FILES
- do
- filename=`basename $f`
- name=${filename%\.*}
- fullpath="$f/$name"
- #echo "full path: $fullpath"
- if [ "$VERBOSE" == "true" ]; then
- echo "Processing $fullpath..."
- fi
- if [ -f "$fullpath" ]; then
- if [ ! -z $KEYWORD ]; then
- match=`$signargs "$fullpath" 2> /dev/null | grep -i $KEYWORD`
- if [ ! -z "$match" ]; then
- echo "** MATCHED: ${bold}$filename"${normal}
- echo -e "\n\t\t$match"
- echo ""
- fi
- else
- echo ""
- if [ ! -d "entitlements/Apps" ]; then
- mkdir -p entitlements/Apps
- fi
- echo "Dumping entitlements for: $filename"
- $signargs "$fullpath" > entitlements/Apps/$filename.plist 2> /dev/null
- fi
- fi
- done
- fi
- if [ "$LDS" == "true" ]; then
- echo "Searching Launch Daemon entitlements..."
- if [ "$VERBOSE" == "true" ]; then
- echo "find $INPUT_FOLDER -name com.*.plist"
- fi
- FILES=`find $INPUT_FOLDER -name "com.*.plist"`
- echo ""
- if [ ! -z $KEYWORD ]; then
- echo "Testing Launch Daemon entitlements for ${bold}'$KEYWORD'${normal}"
- else
- echo "Dumping Launch Daemon entitlements"
- fi
- echo ""
- for f in $FILES
- do
- if [ "$VERBOSE" == "true" ]; then
- echo "processing $f..."
- echo "Searching for 'Program' Key..."
- fi
- if [ $PLBUDDY_ALT = 0 ]; then
- $pbuddy -c 'Print Program' $f > .tmpout 2> /dev/null
- else
- plutil -key Program "$f" > .tmpout 2> /dev/null
- fi
- program=`cat .tmpout | tr -d "\""`
- #echo $program
- if [ -z "${program}" ] ;then
- if [ "$VERBOSE" == "true" ]; then
- echo -e "\nNot found!!\nSearching for 'ProgramArguments' Key..."
- fi
- if [ $PLBUDDY_ALT = 0 ]; then
- $pbuddy -c 'Print :ProgramArguments:0' $f > .tmpout 2> /dev/null
- else
- plutil -key ProgramArguments "$f" > .tmpout 2> /dev/null
- fi
- program=`cat .tmpout | tr -d " ()\"\n"`
- fi
- #echo $program
- if [ ! -z "${program}" ] ;then
- if [ "$VERBOSE" == "true" ]; then
- echo -e "\t\t$program found!"
- fi
- ARCH=`arch`
- if [ $ARCH == "arm"* ]; then
- fullpath="$program"
- else
- fullpath="$INPUT_FOLDER$program"
- fi
- filename=`basename $fullpath`
- plistname=`basename "$f"`
- if [ -f "$fullpath" ]; then
- if [ ! -z $KEYWORD ]; then
- match=`$signargs "$fullpath" 2> /dev/null | grep -i $KEYWORD`
- if [ ! -z "$match" ]; then
- #echo $fullpath
- echo -e "** MATCHED: ${bold}$filename${normal} in ${bold}$f${normal}"
- #echo -e "\n\t\t$match"
- echo -e "\n\t\t${bold}$match${normal}" #"\033[4mThis is a underlined line.\033[0m"
- echo ""
- fi
- else
- echo ""
- if [ ! -d "entitlements/Daemons" ]; then
- mkdir -p entitlements/Daemons
- fi
- echo "Dumping entitlements for: $filename"
- $signargs "$fullpath" > "entitlements/Daemons/$filename.plist" 2> /dev/null
- fi
- fi
- fi
- done
- fi
- echo ""
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement