add a basic hack pkg (without any complicated process)
does three things (startprocess.sh): 1. replacing diagnosis root password 2. enabling diagnosis mode without OTG 3. patching the customized updater script with key detections
This commit is contained in:
parent
454ddf012c
commit
930d8166c4
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2018 Jan-Gerd Tenberge
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
#!/bin/sh
|
||||
|
||||
|
||||
|
||||
# -- private functions --
|
||||
|
||||
DIAG_get_usb_device ()
|
||||
{
|
||||
echo $(( $(i2cget -y -f 1 0x35 0x04) & 0x1F ))
|
||||
}
|
||||
|
||||
|
||||
DIAG_get_hash ()
|
||||
{
|
||||
md5sum | cut -f1 -d' '
|
||||
}
|
||||
|
||||
|
||||
DIAG_set_welcome_screen ()
|
||||
{
|
||||
epd_fb_test gray GC16 FULL 8 0 700 1020 250 155
|
||||
}
|
||||
|
||||
|
||||
|
||||
# -- public functions --
|
||||
|
||||
DIAG_get_mode ()
|
||||
{
|
||||
return 0
|
||||
device_hash=$(rawdata --get_dump=diag_mode |
|
||||
DIAG_get_hash)
|
||||
target_hash=$(dd if=/dev/zero count=1 \
|
||||
bs=$(echo $(rawdata --get_offset=diag_mode | cut -f3 -d:)) \
|
||||
2>/dev/null |
|
||||
DIAG_get_hash)
|
||||
|
||||
if test $(DIAG_get_usb_device) -eq 7; then
|
||||
echo "USB key detected."
|
||||
return 0
|
||||
fi
|
||||
|
||||
if test $device_hash = $target_hash; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
|
||||
DIAG_enter ()
|
||||
{
|
||||
|
||||
initctl start usb
|
||||
DIAG_set_welcome_screen
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
DIAG_enable ()
|
||||
{
|
||||
rawdata --set_dump=diag_mode < /dev/zero
|
||||
}
|
||||
|
||||
|
||||
DIAG_disable ()
|
||||
{
|
||||
rawdata --set_dump=diag_mode < /dev/urandom
|
||||
}
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
#!/bin/sh
|
||||
|
||||
LOG_FP="/root/updater_$(date +%s).log"
|
||||
exec &>"$LOG_FP"
|
||||
|
||||
UPDATER_BASE=$(dirname ${0})
|
||||
cd "$UPDATER_BASE"
|
||||
|
||||
###
|
||||
### Initialize printing on screen service
|
||||
###
|
||||
|
||||
YAFT_PID=0
|
||||
./yaft </dev/null >/tmp/pty.txt &
|
||||
YAFT_PID=$!
|
||||
pty=""
|
||||
for i in $(seq 1 10); do
|
||||
pty="$(cat /tmp/pty.txt)"
|
||||
if [ -n "$pty" ]; then
|
||||
break;
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
if [ -z "$pty" ]; then
|
||||
echo "openpty failed"
|
||||
kill -INT $YAFT_PID
|
||||
exit 0;
|
||||
fi
|
||||
|
||||
echo "will open pty $pty"
|
||||
rm "/tmp/_fifo"
|
||||
mkfifo "/tmp/_fifo"
|
||||
tee "$pty" < /tmp/_fifo &
|
||||
|
||||
exec &>"/tmp/_fifo"
|
||||
|
||||
###
|
||||
### Starting message
|
||||
###
|
||||
cat LICENSE
|
||||
|
||||
./greetings.sh
|
||||
|
||||
|
||||
###
|
||||
### Start the process
|
||||
###
|
||||
./startprocess.sh
|
||||
|
||||
|
||||
###
|
||||
### Ending message
|
||||
###
|
||||
./finished.sh
|
||||
|
||||
for i in $(seq 5 -1 1); do
|
||||
echo "Reboot in ${i} seconds."
|
||||
sleep 1
|
||||
done
|
||||
|
||||
|
||||
exit 0
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
#!/bin/sh
|
||||
|
||||
echo ""
|
||||
echo "====================================="
|
||||
echo "Done!"
|
||||
echo "====================================="
|
||||
echo ""
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
#!/bin/sh
|
||||
|
||||
echo ""
|
||||
echo "====================================="
|
||||
echo "Welcome DPT Users"
|
||||
echo "We will begin the process soon"
|
||||
echo "Fingers crossed!"
|
||||
echo "====================================="
|
||||
echo ""
|
||||
|
|
@ -0,0 +1,139 @@
|
|||
#!/bin/sh
|
||||
|
||||
ROOTPWD=/etc/passwd
|
||||
DIAGFUNC=/usr/local/bin/diag_functions
|
||||
UPDATER=/usr/local/bin/updater_check.sh
|
||||
KEY_DETECTION_TMPF=/tmp/key_pressed.log
|
||||
|
||||
|
||||
###
|
||||
### key detection function
|
||||
###
|
||||
detect_key_pressed () {
|
||||
echo "---- Waiting for key pressing (${1}s count down)..."
|
||||
tmpcontent=""
|
||||
for i in $(seq ${1} -1 1)
|
||||
do
|
||||
echo "---- Waiting for response for ${i} seconds.."
|
||||
tmpcontent="$(busybox script -c 'timeout -t 1 keyscan' -f -q ${KEY_DETECTION_TMPF})"
|
||||
echo $tmpcontent | grep -Fq "HOME"
|
||||
if [ $? -eq 0 ]
|
||||
then
|
||||
echo "---- found HOME!"
|
||||
return 1
|
||||
fi
|
||||
echo $tmpcontent | grep -Fq "POWER"
|
||||
if [ $? -eq 0 ]
|
||||
then
|
||||
echo "----found POWER!"
|
||||
return 2
|
||||
fi
|
||||
done
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
echo ""
|
||||
echo "================================================"
|
||||
echo " Replacing diagnosis root password to 12345.."
|
||||
echo "================================================"
|
||||
if [ ! -f ${ROOTPWD} ]
|
||||
then
|
||||
echo "!! Error: Cannot find ${ROOTPWD}, exiting.."
|
||||
exit 0
|
||||
fi
|
||||
echo "== Original ${ROOTPWD}:"
|
||||
cat ${ROOTPWD}
|
||||
echo "== Backing up..."
|
||||
cp ${ROOTPWD} ${ROOTPWD}_bak
|
||||
echo "== Replacing..."
|
||||
# sed in place
|
||||
sed -i '/root:/c\root:$6$i2VmFAOV$sEMLa5no1zFKnEpFdobNI2dJFqGZE3sWUFJDf1Jn34vO8\.Q9EuwP5\.7aGpmwNLsyX\/lOrh285\.xSzjSHNzMau0:0:0::\/root:\/bin\/sh' $ROOTPWD
|
||||
echo "== New ${ROOTPWD}:"
|
||||
cat ${ROOTPWD}
|
||||
|
||||
# validation
|
||||
echo "== Looking fine?"
|
||||
echo "==== If YES, do nothing, or press HOME to continue (default)..."
|
||||
echo "==== If NO, press POWER to rollback..."
|
||||
detect_key_pressed 30
|
||||
status=$?
|
||||
if [ $status -eq 2 ]
|
||||
then
|
||||
echo "== Rolling back..."
|
||||
# use cat to prevent permission change
|
||||
cat ${ROOTPWD}_bak > ${ROOTPWD}
|
||||
echo "== Current ${ROOTPWD}:"
|
||||
cat ${ROOTPWD}
|
||||
echo "== Done. No modifications were made."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
||||
echo ""
|
||||
echo "========================================="
|
||||
echo " Enabling diagnosis mode without OTG.."
|
||||
echo "========================================="
|
||||
echo ""
|
||||
echo "== Original ${DIAGFUNC} (30 lines):"
|
||||
head -n 30 ${DIAGFUNC}
|
||||
echo "== Backing up..."
|
||||
cp ${DIAGFUNC} ${DIAGFUNC}_bak
|
||||
echo "== Enabling..."
|
||||
# use cat to prevent permission change
|
||||
cat diag_functions > ${DIAGFUNC}
|
||||
echo "== New ${DIAGFUNC} (30 lines):"
|
||||
head -n 30 ${DIAGFUNC}
|
||||
|
||||
# validation
|
||||
echo "== Looking fine?"
|
||||
echo "==== If YES, do nothing, or press HOME to continue (default)..."
|
||||
echo "==== If NO, press POWER to rollback..."
|
||||
detect_key_pressed 30
|
||||
status=$?
|
||||
if [ $status -eq 2 ]
|
||||
then
|
||||
echo "== Rolling back..."
|
||||
# use cat to prevent permission change
|
||||
cat ${DIAGFUNC}_bak > ${DIAGFUNC}
|
||||
echo "== Current ${DIAGFUNC} (30 lines):"
|
||||
head -n 30 ${DIAGFUNC}
|
||||
echo "== Done. No modifications were made."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
||||
echo ""
|
||||
echo "======================================="
|
||||
echo " Patching customized updater script.."
|
||||
echo "======================================="
|
||||
echo ""
|
||||
echo "== Original ${UPDATER} (30 lines):"
|
||||
tail -n 30 ${UPDATER}
|
||||
echo "== Backing up..."
|
||||
cp ${UPDATER} ${UPDATER}_bak
|
||||
echo "== Enabling..."
|
||||
# use cat to prevent permission change
|
||||
cat updater_check.sh > ${UPDATER}
|
||||
echo "== New ${UPDATER} (30 lines):"
|
||||
tail -n 30 ${UPDATER}
|
||||
|
||||
# validation
|
||||
echo "== Looking fine?"
|
||||
echo "==== If YES, do nothing, or press HOME to continue (default)..."
|
||||
echo "==== If NO, press POWER to rollback..."
|
||||
detect_key_pressed 30
|
||||
status=$?
|
||||
if [ $status -eq 2 ]
|
||||
then
|
||||
echo "== Rolling back..."
|
||||
# use cat to prevent permission change
|
||||
cat ${UPDATER}_bak > ${UPDATER}
|
||||
echo "== Current ${UPDATER} (30 lines):"
|
||||
tail -n 30 ${UPDATER}
|
||||
echo "== Done. No modifications were made."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,114 @@
|
|||
#!/bin/sh
|
||||
|
||||
|
||||
DDAT_MOUNT_PATH=/tmp/ddat
|
||||
END_USER_UPDATER_PKG=${DDAT_MOUNT_PATH}/FwUpdater.pkg
|
||||
KEY_DETECTION_TMPF=/tmp/keyDetect.log
|
||||
|
||||
|
||||
|
||||
# $1 : reboot=1, shutdown 0
|
||||
local_reboot()
|
||||
{
|
||||
umount $DDAT_MOUNT_PATH
|
||||
sync
|
||||
sync
|
||||
mount -o remount,ro /
|
||||
if [ $1 -eq 1 ]
|
||||
then
|
||||
/sbin/reboot
|
||||
else
|
||||
/sbin/poweroff
|
||||
fi
|
||||
|
||||
while [ 1 ]
|
||||
do
|
||||
sleep 3
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
#########################
|
||||
# mount tmp file system
|
||||
#########################
|
||||
mount -t tmpfs tmpfs /tmp
|
||||
|
||||
#########################
|
||||
# Button check
|
||||
#########################
|
||||
|
||||
# animation hint
|
||||
epd_fb_test gray DU PART 0 && \
|
||||
epd_fb_test gray GC16 PART 10 0 50 50 150 50 && \
|
||||
sleep 1 && \
|
||||
epd_fb_test gray GC16 PART 10 0 50 150 150 50 && \
|
||||
sleep 1 && \
|
||||
epd_fb_test gray GC16 PART 10 0 50 250 150 50 && \
|
||||
sleep 1 &
|
||||
|
||||
# if HOME pressed, go into diagnosis mode directly
|
||||
busybox script -c "timeout -t 3 keyscan" -f -q ${KEY_DETECTION_TMPF}
|
||||
grep -Fq "HOME" ${KEY_DETECTION_TMPF}
|
||||
if [ $? -eq 0 ]
|
||||
then
|
||||
rm ${KEY_DETECTION_TMPF}
|
||||
epd_fb_test gray GC16 PART 10 0 50 50 150 250
|
||||
initctl start diag
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# if POWER pressed, cancel and remove update
|
||||
grep -Fq "POWER" ${KEY_DETECTION_TMPF}
|
||||
if [ $? -eq 0 ]
|
||||
then
|
||||
rm ${KEY_DETECTION_TMPF}
|
||||
mkdir ${DDAT_MOUNT_PATH}
|
||||
mount /dev/mmcblk0p16 ${DDAT_MOUNT_PATH}
|
||||
change_boot_mode.sh normal
|
||||
rm -rf ${END_USER_UPDATER_PKG}
|
||||
local_reboot 1
|
||||
umount ${DDAT_MOUNT_PATH}
|
||||
fi
|
||||
|
||||
rm ${KEY_DETECTION_TMPF}
|
||||
|
||||
|
||||
#########################
|
||||
# End User Updater check
|
||||
#########################
|
||||
|
||||
mkdir ${DDAT_MOUNT_PATH}
|
||||
mount /dev/mmcblk0p16 ${DDAT_MOUNT_PATH}
|
||||
if [ -f ${END_USER_UPDATER_PKG} ]
|
||||
then
|
||||
rawdata --get_dump=sig_key > /tmp/sig.key
|
||||
rawdata --get_dump=dec_key > /tmp/dec.key
|
||||
start_eufwupdater.sh ${END_USER_UPDATER_PKG} /tmp /tmp/sig.key /tmp/dec.key
|
||||
ret=$?
|
||||
if [ $ret -eq 0 ]
|
||||
then
|
||||
# remove pkg, change normal boot and reboot
|
||||
change_boot_mode.sh normal
|
||||
rm -rf ${END_USER_UPDATER_PKG}
|
||||
local_reboot 1
|
||||
# elif [ $ret -eq 1 ]
|
||||
# then
|
||||
# # remain pkg, keep boot mode and shutdown
|
||||
# local_reboot 0
|
||||
else
|
||||
# remove pkg, change normal boot and shutdown
|
||||
change_boot_mode.sh normal
|
||||
rm -rf ${END_USER_UPDATER_PKG}
|
||||
local_reboot 0
|
||||
fi
|
||||
fi
|
||||
|
||||
umount ${DDAT_MOUNT_PATH}
|
||||
|
||||
#########################
|
||||
# Diag check
|
||||
#########################
|
||||
|
||||
initctl start diag
|
||||
exit 0
|
||||
|
||||
Binary file not shown.
|
|
@ -0,0 +1,20 @@
|
|||
all: fw.pkg
|
||||
|
||||
fw.pkg: base.pkg payload.tar.gz
|
||||
echo 12836160f229d466bf4f051ba26fb46697bfa748e81b279b69ad9a5bd340958e $< | openssl sha256 -c
|
||||
cp $< $@
|
||||
echo "55 -none -in /tmp/anim_sig.dat" | dd bs=8 count=4 seek=67 of=$@ conv=notrunc
|
||||
echo "00 00 00 00" | xxd -r -p >> $@
|
||||
echo "00 00 00 00" | xxd -r -p >> $@
|
||||
printf '%08x' $$(wc -c < payload.tar.gz) | sed -E 's/(..)(..)(..)(..)/\4\3\2\1/' | xxd -r -p | head -c 4 >> fw.pkg
|
||||
cat payload.tar.gz >> $@
|
||||
|
||||
|
||||
payload.tar.gz: FwUpdater
|
||||
[ -x $</eufwupdater.sh ]
|
||||
tar -cvz --exclude=".*" --numeric-owner -f $@ $<
|
||||
|
||||
.PHONY: all check_sig payload.tar.gz
|
||||
|
||||
clean:
|
||||
-rm fw.pkg payload.tar.gz
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
all: fw.pkg
|
||||
|
||||
fw.pkg: base.pkg payload.tar.gz
|
||||
echo 12836160f229d466bf4f051ba26fb46697bfa748e81b279b69ad9a5bd340958e $< | sha256sum -c
|
||||
cp $< $@
|
||||
echo "55 -none -in /tmp/anim_sig.dat" | dd bs=32 count=1 seek=536 oflag=seek_bytes of=$@ conv=notrunc
|
||||
echo "00 00 00 00" | xxd -r -p >> $@
|
||||
echo "00 00 00 00" | xxd -r -p >> $@
|
||||
printf '%08x' $$(wc -c < payload.tar.gz) | \
|
||||
sed -r 's/(..)(..)(..)(..)/\4\3\2\1/' | \
|
||||
xxd -r -p | head -c 4 >> fw.pkg
|
||||
cat payload.tar.gz >> $@
|
||||
|
||||
|
||||
payload.tar.gz: FwUpdater
|
||||
[ -x $</eufwupdater.sh ]
|
||||
tar -cvz --exclude=".*" --owner=0 --group=0 --numeric-owner --no-acls --no-xattrs -f $@ $<
|
||||
|
||||
.PHONY: all check_sig payload.tar.gz
|
||||
|
||||
clean:
|
||||
-rm fw.pkg payload.tar.gz
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
all: fw.pkg
|
||||
|
||||
fw.pkg: base.pkg payload.tar.gz
|
||||
echo 12836160f229d466bf4f051ba26fb46697bfa748e81b279b69ad9a5bd340958e $< | openssl sha256 -c
|
||||
cp $< $@
|
||||
echo "55 -none -in /tmp/anim_sig.dat" | dd bs=8 count=4 seek=67 of=$@ conv=notrunc
|
||||
echo "00 00 00 00" | xxd -r -p >> $@
|
||||
echo "00 00 00 00" | xxd -r -p >> $@
|
||||
printf '%08x' $$(wc -c < payload.tar.gz) | sed -E 's/(..)(..)(..)(..)/\4\3\2\1/' | xxd -r -p | head -c 4 >> fw.pkg
|
||||
cat payload.tar.gz >> $@
|
||||
|
||||
|
||||
payload.tar.gz: FwUpdater
|
||||
[ -x $</eufwupdater.sh ]
|
||||
tar -cvz --exclude=".*" --numeric-owner -f $@ $<
|
||||
|
||||
.PHONY: all check_sig payload.tar.gz
|
||||
|
||||
clean:
|
||||
-rm fw.pkg payload.tar.gz
|
||||
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue