某個蝰蛇音效的卡刷包代碼分析

解壓後的文件:



├─META-INF
│  │  CERT.RSA
│  │  CERT.SF
│  │  MANIFEST.MF
│  │
│  └─com
│      ├─android
│      │      otacert
│      │
│      └─google
│          └─android
│                  update-binary
│                  updater-script

├─system
│  ├─etc
│  │      audio_effects.conf
│  │
│  ├─lib
│  │  └─soundfx
│  │          libv4a_fx_ics.so
│  │
│  ├─priv-app
│  │  └─Viper4Android
│  │          ViPERFX.apk
│  │
│  ├─su.d
│  │      permissive.sh
│  │
│  └─vendor
│      └─etc
│              audio_effects.conf

└─tmp
        misc
        vipertweaks.sh

META-INF\com\google\android\updater-script的代碼:

功能:安裝程序並執行腳本\tmp\vipertweaks.sh

#RECOVERY交互性提示
ui_print("---------------------------------"); #在控制檯顯示的信息
ui_print("蝰蛇音效-ViPERFX");
ui_print("ViPERFX 2.5.0.5");
ui_print("For Android6.0");
ui_print("----By想飛的小夥(jsjson)");
ui_print("詐屍更新蝰蛇音效!");
ui_print("----2016.09.01 21:14 update");
ui_print("---------------------------------");
#執行程序
#掛載文件夾
run_program(
"/sbin/busybox", 
"mount", 
"/system"
); 
#運行/sbin/busybox mount /system 掛載/system文件夾 

ui_print("刪除舊文件以及一些默認音效管理器,並替換成爲蝰蛇...");
ui_print("Delete default sound Manager...");
#刪除文件原有的音效管理器
delete_recursive(
"/system/app/AudioFX", 
"/system/app/DSPManager", 
"/system/app/Viper4Android", 
"/system/app/MaxxAudioFX", 
"/system/app/MusicFX", 
"/system/app/MaxxAudio", 
"/system/app/Material_V4A"
);
#刪除的文件或文件夾,
刪除文件
"/system/app/AudioFX", 
"/system/app/DSPManager", 
"/system/app/Viper4Android", 
"/system/app/MaxxAudioFX", 
"/system/app/MusicFX", 
"/system/app/MaxxAudio", 
"/system/app/Material_V4A"

delete_recursive(
"/system/priv-app/AudioFX", 
"/system/priv-app/DSPManager", 
"/system/priv-app/Viper4Android", 
"/system/priv-app/MaxxAudioFX", 
"/system/priv-app/MusicFX", 
"/system/priv-app/MaxxAudio", 
"/system/priv-app/Material_V4A"
);
#開始安裝
ui_print("starting...");
ui_print("安裝蝰蛇開始...");
ui_print("---------------------------------");

show_progress(1, 15); #下面的操作可能進行15秒鐘完成,完成後進度前進1(100%)

package_extract_dir(
"system", 
"/system"
); 
#釋放ROM包裏system文件夾下所有文件和子文件夾至/system

show_progress(1, 15); #下面的操作可能進行15秒鐘完成,完成後進度前進1(100%)

ui_print("安裝中...");
#賦予權限
set_metadata_recursive(
"/system/priv-app", 
"uid", 0,  #ROOT用戶
"gid", 0,  #任何組
"dmode", 0755, #賦予755權限
"fmode", 0644, #賦予644權限
"capabilities", 0x0, 
"selabel", 
"u:object_r:system_file:s0"
);

#遞歸地設置給定的目錄dirname機器所有子目錄,對應key的值
set_metadata_recursive(
"/system/su.d", 
"uid", 0, 
"gid", 0, 
"dmode", 0755, 
"fmode", 0755, 
"capabilities", 0x0, 
"selabel", 
"u:object_r:system_file:s0"
);
set_metadata_recursive(
"/system/lib", 
"uid", 0, 
"gid", 0, 
"dmode", 0755, 
"fmode", 0644, 
"capabilities", 0x0, 
"selabel", 
"u:object_r:system_file:s0"
);
set_metadata_recursive(
"/system/lib/soundfx", 
"uid", 0, 
"gid", 0, 
"dmode", 0755, 
"fmode", 0644, 
"capabilities", 0x0, 
"selabel", 
"u:object_r:system_file:s0"
);
set_metadata_recursive(
"/system/vendor/pittpatt", 
"uid", 0, 
"gid", 0, 
"dmode", 0755, 
"fmode", 0644, 
"capabilities", 0x0, 
"selabel", 
"u:object_r:system_file:s0"
);
set_metadata_recursive(
"/system/vendor/etc", 
"uid", 0, 
"gid", 0, 
"dmode", 0755, 
"fmode", 0644, 
"capabilities", 0x0, 
"selabel", 
"u:object_r:system_file:s0"
);

set_metadata_recursive(
"/system/vendor/pittpatt", 
"uid", 0, 
"gid", 0, 
"dmode", 0755, 
"fmode", 0755, 
"capabilities", 0x0, 
"selabel", 
"u:object_r:system_file:s0"
);
#解壓tmp
package_extract_dir("tmp", "/tmp");

set_perm(
0, 
0, 
0777, 
"/tmp/vipertweaks.sh"
); 
#set_perm 0 2000 0550 SYSTEM:etc/init.goldfish.sh
(設置手機system中的etc/init.goldfish.sh的
用戶爲root,
用戶組爲shell,
所有者以及所屬用戶組成員可以進行讀取和執行操作,其他用戶無操作權限

ui_print("");
#運行vipertweaks.sh
run_program("/tmp/vipertweaks.sh", "vipertweak");

ui_print("");
ui_print("繼續安裝中...");
ui_print("");
run_program("/sbin/busybox", "umount", "/system");
ui_print("安裝完成!");
ui_print("----------Enjoy!--------");
ui_print("只爲單純的蝰蛇音效!");
ui_print("享受極致音效吧!");
ui_print("Done!");

安裝完後執行\tmp\vipertweaks.sh:
功能:修改build.prop文件中的參數
#!/sbin/sh

bp="/system/build.prop" #設置變量爲系統下的/system/build.prop的字符串

busybox mount /system #掛在/system
busybox mount /data #掛在/data



if [ -f /system/build.prop.bak ];  #當/system/build.prop.bak文件存在並且是正規文件時返回真
  then
    rm -rf $bp #刪除變量$bp
    cp $bp.bak $bp #將/system/build.prop.bak的“.bak”去掉
  else
    cp $bp $bp.bak #若爲假,則將/system/build.prop後的加上“.bak”
fi


#將misc文件中的字符串加入到build.prop中

echo " " >> $bp #向/system/build.prop後加空格
echo "# ViPER4Android Build.prop Tweaks" >> $bp #向/system/build.prop後加# ViPER4Android Build.prop Tweaks
echo " " >> $bp #向/system/build.prop後加空格


for mod in misc; #當變量mod中的值符合misc文件中的值時執行
  do

    for prop in `cat /tmp/$mod`;
	do
      export newprop=$(echo ${prop} | cut -d '=' -f1) #以'=' 爲分隔符,取第一個字段
      sed -i "/${newprop}/d" /system/build.prop
      echo $prop >> /system/build.prop
    done
done

#misc文件中的值
#lpa.decode=false
#lpa.releaselock=false
#lpa.use-stagefright=false
#tunnel.decode=false

\system\su.d\permissive.sh代碼:

功能:設置Selinux成permissive,解決蝰蛇音效不能用的問題

su #獲取ROOT
mount -o remount,rw /system #重新掛在/system爲rw讀寫
mkdir -p /system/su.d #建立目錄su.d,“-p”若所要建立目錄的上層目錄目system前尚未建立,則會一併建立上層目錄
echo "#!/system/bin/sh" > /system/su.d/permissive.sh #直接清空原來的內容,填入新內容"#!/system/bin/sh"
echo "setenforce 0" > /system/su.d/permissive.sh #填入內容 setenforce 0
echo "0" > /sys/fs/selinux/enforce  #執行 enforce 0
chmod 755 /system/su.d/permissive.sh #設置755權限

其它的就是蝰蛇APK包和它所需的文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章