しばらく前に、私が使用している機能に影響を与えずにAndroid ROMから何を削除できるかを調べる方法を探していたときdeptree
。xda forums
これは2012年に作成されたため、期待どおりに機能しませんでした。使用されているツール(dex2jar
、、、)を更新し、スクリプトを少し変更し(例:フォルダを現在smali
使用中のフォルダに変更するなど)、再実行しました。魔法の一部は、同様の3つのスクリプトで発生します。 ...
Android
system/app-private
system/priv-app/*/
while [ -n "$1" ]; do
for bin in "$1"/*; do
[ -f "$bin" ] || continue
case "$bin" in
*.so)
;;
*)
[ -x "$bin" ] || continue
;;
esac
"$FILE_DIR/perls/parse_bin.pl" "$bin" dbi:SQLite:dbname="$ACTIVE_DB/test.sqlite" 2>>"$ACTIVE_DB/logs/parse_bin.log"
done
shift
done
コーディングを全く学ばない私の超能力を活用して、私は次のようなことが起きているという結論を下しました。 (私が間違っている場合は修正してください。)
- 入力フォルダにアクセスすると
$1
、 - すべての
bin(ary)
ファイルは - それが本当にファイルであることを確認し
binary
、そうであれば、
(何を意味するのかわかりません||
) - 拡張子(
.so
またはnone
)を確認して - 見つかったファイル(
*.so
および拡張子のないファイル)をスクリプトへの入力として使用するparse_bin.pl
入力フォルダは非常に具体的でなければなりません。このスクリプトでは、次のようになります。
$ACTIVE_DB/rom/system/lib $ACTIVE_DB/rom/system/lib/*/ $ACTIVE_DB/rom/system/usr/lib you get how this continues, super long list of folders
私が知りたいのは、これらの3つのスクリプトを入力フォルダにするためにどのように変更する必要がありますか$ACTIVE_DB/rom/system
?
編集:入力フォルダ内のファイルを見つけるメカニズムは、他の2つのスクリプトが検索していることを除いて、3つのスクリプトすべてで同じです*.jar
。*.apk
EDIT2:bash
シェルはこれを実行するために使用されます。
fromnaboo
私はこれがスクリプトの最初の2行で起こるべきであることを知っていて答えを試みました。ここフォルダ内のすべてのバイナリファイルをエクスポートします$ACTIVE_DB/rom
が、入力に渡すわけではありませんparse_bin.pl
。
ログを残してください:
+ PARSE_BIN DB_45763/rom/system
+ '[' -n DB_45763/rom/system ']'
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/CSCVersion.txt ']'
+ case "$bin" in
+ '[' -x DB_45763/rom/system/CSCVersion.txt ']'
+ printf 'DB_45763/rom/system/CSCVersion.txt:\t'
+ echo DB_45763/rom/system/CSCVersion.txt
+ ./files/perls/parse_bin.pl DB_45763/rom/system/CSCVersion.txt dbi:SQLite:dbname=DB_45763/test.sqlite
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/app ']'
+ continue
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/bin ']'
+ continue
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/build.prop ']'
+ case "$bin" in
+ '[' -x DB_45763/rom/system/build.prop ']'
+ printf 'DB_45763/rom/system/build.prop:\t'
+ echo DB_45763/rom/system/build.prop
+ ./files/perls/parse_bin.pl DB_45763/rom/system/build.prop dbi:SQLite:dbname=DB_45763/test.sqlite
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/cameradata ']'
+ continue
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/csc ']'
+ continue
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/csc_contents ']'
+ continue
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/etc ']'
+ continue
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/fonts ']'
+ continue
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/framework ']'
+ continue
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/kern_sec_info ']'
+ case "$bin" in
+ '[' -x DB_45763/rom/system/kern_sec_info ']'
+ printf 'DB_45763/rom/system/kern_sec_info:\t'
+ echo DB_45763/rom/system/kern_sec_info
+ ./files/perls/parse_bin.pl DB_45763/rom/system/kern_sec_info dbi:SQLite:dbname=DB_45763/test.sqlite
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/lib ']'
+ continue
+ shift
+ '[' -n '' ']'
答え1
まず、スクリプト機能に関するあなたの仮定が正しいようです。に含まれるすべてのファイル、フォルダ、シンボリックリンクなどを見て$1
、ファイルの場合はライブラリか実行ファイルかを確認するためにさらに深く掘り下げます。
シェルスクリプトでは、$1
これはスクリプトに渡される最初の引数なので、その$ACTIVE_DB/rom/system
場所でこのスクリプトを実行するには、$1
次のようにします。
./scriptname $ACTIVE_DB/rom/system
注:コマンドプロンプトでこのコマンドを呼び出す場合は、$ACTIVE
実際のパスを置き換える必要があります。
このスクリプトがターゲットディレクトリに再帰的にダウンするようにするには、スクリプトに追加してみてください。
while [ -n "$1" ]; do
# use globbing to descend into all subdirectories
for bin in $(find "$1" | tr '\n' ' '); do
# change this ^^^^
[ -f "$bin" ] || continue
# leave the rest of the script as is
# ....
答え2
だから私が何をしたのか疑問に思う人がいるなら、ここに現在のコードがあります。
助けてくれた@the_velour_fogに感謝します。
誰かがこれが最悪の解決策だと思ったら
(私もそれが非常にセクシーだとは思わないが、やるべきことをします)、ここに持ってきてください。
while [ -n "$1" ]; do
for bin in $(find "$1"); do
[ -f "$bin" ] || continue
case "$bin" in
*.so)
export start=$(date +"%T")
printf "$bin:\t"
echo -n "$start " >>"$ACTIVE_DB/logs/parse_bin.log"
echo "$bin" >>"$ACTIVE_DB/logs/parse_bin.log"
"$FILE_DIR/perls/parse_bin.pl" "$bin" dbi:SQLite:dbname="$ACTIVE_DB/test.sqlite" 2>>"$ACTIVE_DB/logs/parse_bin.log"
;;
*.jar)
export start=$(date +"%T")
printf "$bin:\t"
echo -n "$start " >>"$ACTIVE_DB/logs/parse_jar.log"
echo "$bin" >>"$ACTIVE_DB/logs/parse_jar.log"
"$FILE_DIR/perls/parse_jar.pl" "$bin" dbi:SQLite:dbname="$ACTIVE_DB/test.sqlite" 2>>"$ACTIVE_DB/logs/parse_jar.log"
;;
*.apk)
export start=$(date +"%T")
printf "$bin:\t"
echo -n "$start " >>"$ACTIVE_DB/logs/parse_apk.log"
echo "$bin" >>"$ACTIVE_DB/logs/parse_apk.log"
"$FILE_DIR/perls/parse_apk.pl" "$bin" dbi:SQLite:dbname="$ACTIVE_DB/test.sqlite" 2>>"$ACTIVE_DB/logs/parse_apk.log"
;;
*)
if [ -x "$bin" ] ; then
export start=$(date +"%T")
printf "$bin:\t"
echo -n "$start " >>"$ACTIVE_DB/logs/parse_bin.log"
echo "$bin" >>"$ACTIVE_DB/logs/parse_bin.log"
"$FILE_DIR/perls/parse_bin.pl" "$bin" dbi:SQLite:dbname="$ACTIVE_DB/test.sqlite" 2>>"$ACTIVE_DB/logs/parse_bin.log"
else
continue
fi
;;
esac
done
shift
done
私が知る限り、これは可能ですが、この最後の部分についてはわかりません。
*)
if [ -x "$bin" ] ; then
export start=$(date +"%T")
printf "$bin:\t"
echo -n "$start " >>"$ACTIVE_DB/logs/parse_bin.log"
echo "$bin" >>"$ACTIVE_DB/logs/parse_bin.log"
"$FILE_DIR/perls/parse_bin.pl" "$bin" dbi:SQLite:dbname="$ACTIVE_DB/test.sqlite" 2>>"$ACTIVE_DB/logs/parse_bin.log"
else
continue
fi
未来が見えます^^