Bash Script para Dumping the Android Partition não é consistente

3

Eu realmente preciso da sua sugestão sobre o meu problema atual. Eu estou tentando despejar as partições inteiras no Android com o netcat. Eu criei 4 scripts bash para o processo de automação. Então, eu só preciso executar o RunThis1.sh que realmente executa script1.sh, script2.sh e script3.sh. Eu uso a tela para executar esses 3 scripts para execução no terminal 3 diferente. Os 3 scripts devem estar executando consecutivamente, portanto, deve haver um intervalo de tempo entre esses 3 scripts a serem executados. O problema é e eu não sei porque o problema persiste, a saída não é consistente. No começo, eu consegui pegar as imagens dd dele. Mas atualmente, ele falhou. Ou eu recebi um arquivo de tamanho zero ou era um arquivo de texto. Em vez disso, a imagem dd.

Este é o RunThis1.sh:

#!/bin/bash
function GetPartitionName () {
#init number of line
sum=0
PartNameArray=""
while IFS=$' ' read -r column1 column2 column3 column4 ; do
    temp=${column4}
    if [ -n $temp ]; 
    then
        PartNameArray[$sum]=$temp;
        sum=$((sum+1));
    fi                      
done < ProcPart.txt
sum=$((sum-1));
}

#set working folder path, change to machine's specific path
 path="/home/android/Work/"

 #set partition list source file name
 partList="ProcPart.txt"

 #Lock files to maintain sequences
 lock1=$path"file1.lock"
 lock2=$path"file2.lock"
 lock3=$path"file3.lock"

#initialize no of partition
 sum=0
 i=1

#Starting port, the next port is increment by 2
 PortStart=8888

#initialize files and folder
 find $path -name 'screenlog*' -delete
 find $path"partitions/" -name '*' -delete
 mkdir -p $path/partitions || exit 1

#run the get partition name function
 if (test -f "$partList") then GetPartitionName
else
    echo "Partition list file $partList not found!"
    echo "script aborted."
    exit
fi

#start iteration
for (( c=0; c<"$sum"; c++ ))
do  
touch "$lock1"; screen -d -m -L -S "Screen PID for script #1"     ./script1.sh "$PortStart";rm -f "$lock1";
echo "==========================================================="  
echo "Establish forward socket connection at tcp port# $PortStart"
echo ". <done>"
if !(test -f "$lock1"); then                
    DevBlockPath="/dev/block/${PartNameArray[$c]}"
    echo "Open Remote Shell and send $DevBlockPath to NC Server at port# $PortStart"
    echo "Processing partition no $i out of $sum"   
    touch "$lock2"; screen -d -m -L -S "Screen PID for script #2" ./script2.sh "$PortStart $DevBlockPath"; 
    echo "."
    echo ".. <done>"
fi
if (test -f "$lock2") then
    sleep 5
    FileName=$path"partitions/${PartNameArray[$c]}.dd"      
    echo "Transfer data from Remote NC server port# $PortStart to localfile $FileName"  
    rm -f "$lock2"; touch "$lock3"; screen -d -m -L -S "Screen PID for script #3" ./script3.sh "$PortStart $FileName"; rm -f "$lock3";
    echo "."
    echo ".."
    echo "... <done>"   
fi
i=$((i+1));
PortStart=$((PortStart+2));
done
echo ===========================================================

Script1.sh:

#!/bin/bash
# first script
function script1 {
echo script1 port=$1
adb forward tcp:"$1" tcp:"$1"
}

script1 $1

Script2.sh:

#!/bin/bash
# second script
function script2 {
echo path=$2
strcommand="dd if=$2 | /dev/examiner/nc -l -p $1"
echo command=$strcommand
adb shell "$strcommand"
}

script2 $1 $2

Script3.sh:

#!/bin/bash
# third script
function script3 {
echo port=$1
echo filename=$2
#dump random words from openned NC ports to mtdbackup.dd
nc 127.0.0.1 $1 > "$2";
echo " dump randomFile $2 from NC has completed";
exit;
}
function quit {
exit
}

Qualquer conselho e sugestão são mais do que bem-vindos e serão apreciados.

Felicidades

    
por aph4nc 03.09.2015 / 05:15

1 resposta

0

Você está fazendo muito difícil. Este código é configurado para executar os três comandos concorrentemente , e você está tendo que trabalhar com bloqueios e tal para forçá-lo a executar consecutivamente . Eu não acho que você precise de screen aqui.

Tente substituir os comandos screen pelo comando que eles chamam. Isto é, substitua

screen -d -m -L -S "Screen PID for script #1" ./script1.sh "$PortStart"

com

./script1.sh "$PortStart"

Em seguida, elimine todos os comandos de bloqueio. Você deve acabar executando os três scripts em ordem.

    
por Ron Romero 07.10.2015 / 02:57