-
Notifications
You must be signed in to change notification settings - Fork 0
/
hack_tivoapp_TiVo
127 lines (106 loc) · 4.71 KB
/
hack_tivoapp_TiVo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/bin/bash
# Version 1.0 by Bryce Powell
# Originally derived from the first version of Lrhorer's script with a similar name
# This script applies patches to any tivoapp from a modified S3 US TiVo running
# software versions 11.0k to 11.0m.
# USE AT YOUR OWN RISK! I will not be held responsible if you break your TiVo.
# It absolutely CANNOT be used with S3 AU/NZ TiVo units (ozTiVo). If you run this on
# an AU/NZ TiVo, look forward to being able to do nothing with it!
# The UI you've come to love so much will be gone, as well as the ability to boot up.
# More specifically, infinite loops will begin at the "Almost There" screen and all
# you'll have now is a piece of hacked you-know-what.
# Luckily, there's an good solution for this, and it's easier than getting a
# tivoapp off of another TiVo with the same software.
# I've included a way to backup your tivoapp without affecting your drive itself.
# The script will automatically detect the tivoapp and back it up.
# If you want to risk losing access to your TiVo, comment the backup section
# and it will skip that part. I wouldn't recommend it, but if you are feeling
# confident that you know what you're doing, go ahead. Just remember what I said.
# If you want to restore the saved tivoapp, you will have to the the drive out
# (again) and replace the dysfunctional tivoapp with the backup made earlier.
# And voila! Congrats on finally getting your TiVo working! Tell yourself not
# to do that again, and you can continue using your device without the patches.
# If you have any questions or concerns, please message me on Discord
# @snaillover18 or TiVo Community Forum under the username brycepowell.
# Thanks for understanding, and happy patching!
###############################################
###################################################################################################################
# Run from root. Otherwise it will not work.
# Set up the static variables. Edit as needed.
dstring=`date +%m-%d-%y`
# Check if this is running on a TiVo
# Assumes if the environment variable TIVO_ROOT exists
set | grep -q "TIVO_ROOT="
# Get the software version
sver=`cat /etc/build-version`
sver=${sver##*\ }
if [[ $? -eq 0 ]]
then
# Set up the static variables
SaveFile=/tvbin/tivoapp.tmp
Archive=/tvbin/tivoapp.sav
HackBinDir=/hack/bin
PatchDir=$HackBinDir/tivoapp_patches
HackFile=$PatchDir/"$sver"_hacks.fil
Platform=TiVo
# Change to the directory containing tivoapp
cd /tvbin
# Change the root filesystem to read/write
mount -o remount,rw /
fi
if ! [[ -f $HackFile ]]
then
echo "Text file "$sver"_hacks.fil not found in /tivoapp_patches. Exiting..."
exit 1
fi
echo Creating temporary tivoapp
cp tivoapp $SaveFile
echo Getting the hacking parameters for tivoapp
fail=1
while read line
do
offset=$(($(echo $line | cut -d" " -f1) - 0x00400000))
oldword=$(echo $line | cut -d" " -f2 | sed s'/"//g')
newword=$(echo $line | cut -d" " -f3 | sed s'/"//g')
echo $oldword $newword $offset
if [[ $Platform == TiVo ]]
then
B1=$( dd if=tivoapp skip=$offset bs=1 count=4 2> /dev/null | hexdump | grep 0000000 | cut -c9-12 )
B2=$( dd if=tivoapp skip=$offset bs=1 count=4 2> /dev/null | hexdump | grep 0000000 | cut -c14-17 )
testword=$B1$B2
fi
echo $testword
# Check to make sure the bytes match
if [[ "$testword" == "$oldword" ]]
then
echo Updating tivoapp $(echo $line | cut -d" " -f4)
# Convert the string into a 4 byte number expression
escape="\x"
H1=${newword:0:2}
H2=${newword:2:2}
H3=${newword:4:2}
H4=${newword:6:2}
newword=$escape$H1$escape$H2$escape$H3$escape$H4
echo -ne "$newword" | dd conv=notrunc of=$SaveFile bs=1 seek=$offset
elif [[ "$testword" == "$newword" ]]
then
echo Failed for $oldword $newword $offset
echo Tivoapp already has patch at this location.
test -e $SaveFile && rm $SaveFile
[[ $Platform == TiVo ]] && mount -o remount,ro /
exit 1
else
echo Failed for $oldword $newword $offset Old value: $testword
echo Exiting
[[ $Platform == TiVo ]] && mount -o remount,ro /
test -e $SaveFile && rm $SaveFile
exit 1
fi
done < $HackFile
echo Saving a backup of the old tivoapp
test -e $Archive.$dstring && mv $Archive.$dstring $Archive.$dstring.safety
mv tivoapp $Archive.$dstring
mv $SaveFile tivoapp
[[ $Platform == TiVo ]] && mount -o remount,ro /
echo
echo Done!