Recently my old phone ( Armor 3W ) finally died, after dropping it once too many times and cycling with it in the rain once too often. After looking through the internet for the next rugged phone to buy, and seeing many other options with thermal cameras, I decided on the 18T. This because the build and camera placement appeared the most sensible out of all rugged phones.
Just like the older armor 3W this thing is a beast. Knowing that this thing will last me a while, I set out to root it. Rooting it was easy enough with Magisk, as the stock firmware can easily be found online. Flashing a patched kernel however leaves us with an ugly orange/red state message. You can see this message below, for a different phone.
This was quickly fixed using ghidra to patch the little kernel ( lk.img ) that runs before the bootloader. And to think that military intelligence used to be a joke, ghidra is an awesome tool to use.
After this, I had to deal with the system being a/b and thus unwriteable. Luckily there is a thread on doing this that can be found here. Armed with lpunpack I set out to modify the system to be read/write. That was easy enough following the guide, however the system as it was had very little in the way of inode entries. With no way to copy the /system partition even using magisk --clone, and have a bootable system, I instead reformatted and cloned the vendor and product partitions - which is where I stored all directories I had with many small files.
Having to unpack and repack the image often ( lpunpack and lpmake are included in the ROM because of it), I wrote a small script to automate this process.
#!/bin/sh
SYSTEM_A="system_a.img"
VENDOR="vendor_a.img"
PRODUCT="product_a.img"
get_size(){
du -b $1 | grep -o [0-9]*
}
total_size(){
echo $(get_size $SYSTEM_A) +$(get_size $VENDOR) +$(get_size $PRODUCT) | bc
}
rm $1 2>/dev/null
echo "Total size: $( total_size )"
lpmake --super-name super --metadata-size 65536 --device super:7516192768 --metadata-slots 2 --group main:$( total_size ) --partition system_a:none:$( get_size $SYSTEM_A ):main --image system_a=$SYSTEM_A --partition system_b:none:0:main --partition product_a:none:$( get_size $PRODUCT ):main --image product_a=$PRODUCT --partition product_b:none:0:main --partition vendor_a:none:$( get_size $VENDOR):main --image vendor_a=$VENDOR --partition vendor_b:none:0:main --output=$1
magiskpolicy --live "allow shell * * *"
magiskpolicy --live "allow appdomain * * *"
magiskpolicy --live "allow untrusted_app * * *"
File | armor_18t.7z |
Size | 1.79GB |
crc32 | 2144025216 |
md5 | eb3182841f0b717b7695823ff6535250 |
sha512 | e6a14724459cd072a4a399639d857f1f2e6c6c89fedda76a7baedce0c1f53535b188887ab67d64dee730987d71e2dab6d42e6959d54c74a3953016013c0bff5d |