Editing Lv1.self
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
This is the Hypervisor ( | This is the Hypervisor see ([[Hypervisor Reverse Engineering]]) and follows the format of every self see([[Signed Executable and Linkable Format (SELF)]]) | ||
= Embedded Files Segment = | =Embedded Files Segment= | ||
lv1 contains many embedded selfs inside of a special segment "Embedded Files Segment" | lv1 contains many embedded selfs inside of a special segment "Embedded Files Segment" | ||
This is a segment within the program itself, loading in a hex editor gives a small file table | |||
which appears different from the others that sony has used. | |||
== File Table == | ==File Table== | ||
The file table follows this structure | The file table follows this structure | ||
Line 29: | Line 31: | ||
* ss_server3.fself | * ss_server3.fself | ||
lv1.self delegates a lot of work to the embedded selfs | =Files common on lv1= | ||
lv1.self delegates a lot of his work to the embedded selfs wich it loads to different process see ([[Hypervisor Reverse Engineering]]) | |||
{|class="wikitable" | {|class="wikitable" | ||
Line 108: | Line 111: | ||
|updater_frontend.fself || 0xB8F1C || 0x239F0 || 0x35 || 0x289004 | |updater_frontend.fself || 0xB8F1C || 0x239F0 || 0x35 || 0x289004 | ||
|- | |- | ||
|ss_server1.fself || 0xDC90C || | |ss_server1.fself || 0xDC90C || 0x811D0 || 0x4C || 0x2AC9F4 | ||
|- | |- | ||
|ss_server2.fself || 0x15DADC || 0x4A940 || 0x5D || | |ss_server2.fself || 0x15DADC || 0x4A940 || 0x5D || 0x32DBC4 | ||
|- | |- | ||
|ss_server3.fself || 0x1A841C || 0x38ED0 || 0x6E || 0x378504 | |ss_server3.fself || 0x1A841C || 0x38ED0 || 0x6E || 0x378504 | ||
|} | |} | ||
==pme_init.conf Example== | |||
== pme_init.conf | |||
<pre> | <pre> | ||
Line 155: | Line 133: | ||
</pre> | </pre> | ||
== Dump lv1 embedded | ==Dump lv1 embedded elfs Script== | ||
I did this script quickly to | I did this script quickly to exctract the embedded files within lv1. This script doesnt use the file table, its ugly, but works... anyone feel free to improve it --[[User:PsiCoLeO|PsiCoLeO]] 16:11, 22 May 2011 (CDT) | ||
How to use it | |||
Save the script in a file named | |||
<pre> | <pre> | ||
dump_lv1_embedded_files.sh | dump_lv1_embedded_files.sh | ||
</pre> | </pre> | ||
give it execute permisions | |||
<pre> | <pre> | ||
ch mod +x dump_lv1_embedded_files.sh | |||
</pre> | </pre> | ||
feed it with decrypted lv1.self | |||
<pre> | <pre> | ||
./dump_lv1_embedded_files.sh lv1.elf | ./dump_lv1_embedded_files.sh lv1.elf | ||
</pre> | </pre> | ||
< | <pre> | ||
#!/bin/bash | #!/bin/bash | ||
# PsiCoLeO 2011 | # PsiCoLeO 2011 | ||
# | # | ||
# Script to extract the embedded files from lv1.self | # Script to extract the embedded files from lv1.self | ||
# There is no warranty that this script will work for you | # There is no warranty that this script will work for you | ||
# I can not be held | # I can not be held responsable of what you do with this script or any damage you get from using it | ||
# Use it as you please | # Use it as you please | ||
# File names | # File names | ||
files=( "pme_init" "sysmgr_ss.fself" "pme_init.conf" "ss_init.fself" "updater_frontend.fself" "ss_server1.fself" "ss_server2.fself" "ss_server3.fself" ) | files=( "pme_init" "sysmgr_ss.fself" "pme_init.conf" "ss_init.fself" "updater_frontend.fself" "ss_server1.fself" "ss_server2.fself" "ss_server3.fself" ) | ||
# File sizes | |||
size=( 0x24824 0x5f790 0xAF 0x34eb8 0x239F0 0x811D0 0x4A940 0x38ED0 ) | |||
# File sizes | |||
# File offsets | |||
offset=( 0x1D00E8 0x1F490C 0x25409C 0x25414C 0x289004 0x2AC9F4 0x32DBC4 0x378504 ) | |||
# File offsets | |||
cont=0 | cont=0 | ||
printf "***************************** \n" | printf "***************************** \n" | ||
printf "* Psicoleo's * \n" | printf "* Psicoleo's * \n" | ||
printf "* Dump lv1 Embedded files | printf "* Dump lv1 Embedded files * \n" | ||
printf "***************************** \n\n" | printf "***************************** \n\n" | ||
for file in "${files[@]}" | for file in "${files[@]}" | ||
do | do | ||
Line 241: | Line 187: | ||
printf " %s\n" "${file}" | printf " %s\n" "${file}" | ||
printf "***************************** \n\n" | printf "***************************** \n\n" | ||
printf "%s\n" "${offset[$cont]}" | |||
printf "%s\n" "${size[$cont]}" | |||
printf "%s\n" "${cont}" | |||
dd if=$1 of=$file bs=1 obs=1 skip=$((${offset[$cont]})) count=$((${size[$cont]})) | |||
cont=$(($cont+1)) | |||
done | done | ||
</ | </pre> | ||