iRET/Menu.sh

281 lines
9.2 KiB
Bash

#!/bin/sh
function checkInstall()
{
local path
case $1 in
otool)
path=$(which otool)
echo "$path"
;;
sqlite3)
path=$(which sqlite3)
echo "$path"
;;
file)
path=$(which file)
echo "$path"
;;
plutil)
path=$(which plutil)
echo "$path"
;;
theos)
path=$(find / -name theos -type d)
echo "$path"
;;
dumpdecrypted)
path=$(find / -name dumpdecrypted.dylib -type f)
echo "$path"
;;
keychainDumper)
path=$(find / -name keychain_dumper -type f)
echo "$path"
;;
classDumpZ)
path=$(find / -name class-dump-z -type f)
echo "$path"
;;
*) break
esac
}
#File that stores paths of tools
file="/Applications/iRE.app/toolPaths.txt"
#check if "toolPaths.txt" file exists
if [ -f "$file" ]
then
#File already exists. Read it and check if any tool paths are missing
while IFS=$':' read -r -a myArray
do
toolName=${myArray[0]}
toolPath=${myArray[1]}
if [ ! -n "$toolPath" ]
then
toolArray+=($toolName)
fi
done < "$file"
if [ ${#toolArray[@]} -ge "1" ]
then
#echo "Inside tool array"
for i in "${toolArray[@]}"
do
#echo $i
result=$(checkInstall $i)
#echo "Path: $result"
if [ "$result" != "" ]
then
sed -i "s,"$i:","$i:$result",g" /Applications/iRE.app/toolPaths.txt
#mv temp.txt toolPaths.txt
fi
done
fi
else
#First time tool has run, check if tools are installed
#OTOOL
otoolPath=$(checkInstall otool)
strTools="otool:$otoolPath\n"
#SQLITE
sqlitePath=$(checkInstall sqlite3)
strTools+="sqlite3:$sqlitePath\n"
#FILE
fileToolPath=$(checkInstall file)
strTools+="file:$fileToolPath\n"
#PLUTIL
plutilPath=$(checkInstall plutil)
strTools+="plutil:$plutilPath\n"
#THEOS
theosPath=$(checkInstall theos)
strTools+="theos:$theosPath\n"
#DUMPDECRYPTED
dumpPath=$(checkInstall dumpdecrypted)
strTools+="dumpdecrypted:$dumpPath\n"
#KEYCHAIN
keychainPath=$(checkInstall keychainDumper)
strTools+="keychainDumper:$keychainPath\n"
#CLASS-DUMP-Z
classDumpPath=$(checkInstall classDumpZ)
strTools+="classDumpZ:$classDumpPath"
echo -e $strTools > /Applications/iRE.app/toolPaths.txt
fi
#Read if the paths of the tools and show installed or not
#check if "toolPaths.txt" file exists
if [ -f "$file" ]
then
while IFS=':' read -r f1 f2
do
case $f1 in
otool)
if [ "$f2" != "" ]
then
otoolInstalled="<font color="green">Installed</font>"
else
otoolInstalled="<font color="red">Not Installed</font>"
fi
;;
sqlite3)
if [ "$f2" != "" ]
then
sqliteInstalled="<font color="green">Installed</font>"
else
sqliteInstalled="<font color="red">Not Installed</font>"
fi
;;
file)
if [ "$f2" != "" ]
then
fileInstalled="<font color="green">Installed</font>"
else
fileInstalled="<font color="red">Not Installed</font>"
fi
;;
plutil)
if [ "$f2" != "" ]
then
plutilInstalled="<font color="green">Installed</font>"
else
plutilInstalled="<font color="red">Not Installed</font>"
fi
;;
theos)
if [ "$f2" != "" ]
then
theosInstalled="<font color="green">Installed</font>"
else
theosInstalled="<font color="red">Not Installed</font>"
fi
;;
dumpdecrypted)
if [ "$f2" != "" ]
then
dumpInstalled="<font color="green">Installed</font>"
else
dumpInstalled="<font color="red">Not Installed</font>"
fi
;;
keychainDumper)
if [ "$f2" != "" ]
then
keychainInstalled="<font color="green">Installed</font>"
else
keychainInstalled="<font color="red">Not Installed</font>"
fi
;;
classDumpZ)
if [ "$f2" != "" ]
then
classDumpZInstalled="<font color="green">Installed</font>"
else
classDumpZInstalled="<font color="red">Not Installed</font>"
fi
;;
*) break
esac
done < "$file"
else
echo "/Applications/iRE.app/toolPaths.txt File Does Not Exist"
fi
guids=$(ls /var/mobile/Applications/*/*.app/Info.plist |sort | cut -d"/" -f5)
dropDownList="<option value=>Select Application</option>"
for a in ${guids}
do
name=$( ls /var/mobile/Applications/$a/*.app/Info.plist | cut -d"/" -f6 | cut -d. -f1 )
dropDownList+="<option value="$a">"$name"</option>"
done
echo '<html>
<head>
<meta charset="UTF-8">
<title>iRET - iOS Reverse Engineering Toolkit</title>
</head>
<script type="text/javascript">
function submitForm(strValue)
{
var oForm = document.getElementById("form1");
oForm.action = "/Binary?" + strValue;
oForm.submit();
}
</script>
<body bgcolor="#0377CC">
<table width="100%" height="100%">
<tr>
<td align="center" valign="center">
<table style="background-color:white;border:1px solid black;" height="90%" width="90%">
<tr>
<td align="center" valign="top" colspan="2" height="20%"><font face="arial black" color="black" size="6">Welcome to iRET<br>The iOS Reverse Engineering Toolkit</font></td>
</tr>
<tr>
<td align="center" valign="top" width="50%">
<table style="background-color:white;border:1px solid black;" height="90%" width="90%">
<tr>
<td align="center" width="50%" cellpadding="4">
<table style="background-color:white;border:1px solid black;" height="100%" width="100%">
<tr>
<td valign="top">
<center><font face="arial black" color="black" size="3">What is in the toolkit?</font></center><br><br>
<font face="arial" color="black" size="3">
<span style="padding:150px">- oTool ('${otoolInstalled}')</span><br>
<span style="padding:150px">- dumpDecrypted ('${dumpInstalled}')</span><br>
<span style="padding:150px">- Sqlite ('${sqliteInstalled}')</span><br>
<span style="padding:150px">- Theos ('${theosInstalled}')</span><br>
<span style="padding:150px">- Keychain_dumper ('${keychainInstalled}')</span><br>
<span style="padding:150px">- file ('${fileInstalled}')</span><br>
<span style="padding:150px">- plutil ('${plutilInstalled}')</span><br>
<span style="padding:150px">- class-dump-z ('${classDumpZInstalled}')</span>
<br><br>
<span style="padding:100px">Note: All tools listed above must be installed.</span></font>
</td>
</tr>
</table>
</td>
<td>
<table style="background-color:white;border:1px solid black;" height="100%" width="100%">
<tr>
<td valign="top">
<center><font face="arial black" color="black" size="3">To begin, select an app from the list below:</font><br><br>
<form id="form1" method="GET">
<select name="AppID" onchange="submitForm(this.value);">'
echo ${dropDownList}
echo '</select></form></center>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
<tr>
</table>
</td>
</tr>
</table>
</body>
</html>'