fs-patcher.sh 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. #!/bin/bash
  2. # by DSR! from https://github.com/xchwarze/wifi-pineapple-cloner
  3. ARCHITECTURE="$1"
  4. FLAVOR="$2"
  5. ROOT_FS="$3"
  6. declare -a ARCHITECTURE_TYPES=("mips" "mipsel")
  7. declare -a FLAVOR_TYPES=("nano" "tetra" "universal")
  8. if [[ ! -d "$ROOT_FS" ]] || ! grep -q "$ARCHITECTURE" <<< "${ARCHITECTURE_TYPES[*]}" || ! grep -q "$FLAVOR" <<< "${FLAVOR_TYPES[*]}"; then
  9. echo "Run with \"fs-patcher.sh [ARCHITECTURE] [FLAVOR] [FS_FOLDER]\""
  10. echo " ARCHITECTURE -> must be one of these values: mips, mipsel"
  11. echo " FLAVOR -> must be one of these values: nano, tetra, universal"
  12. echo " FS_FOLDER -> folder containing the fs to use"
  13. exit 1
  14. fi
  15. ROOT_FS="$(realpath $ROOT_FS)"
  16. FILES_FOLDER="$(realpath $(dirname $0)/../files)"
  17. common_patch () {
  18. echo "[*] Device detection fix"
  19. # fix "unknown operand" error
  20. sed -i 's/print $6/print $1/' "$ROOT_FS/etc/hotplug.d/block/20-sd"
  21. sed -i 's/print $6/print $1/' "$ROOT_FS/etc/hotplug.d/usb/30-sd"
  22. sed -i 's/print $6/print $1/' "$ROOT_FS/etc/init.d/pineapple"
  23. sed -i 's/print $6/print $1/' "$ROOT_FS/etc/rc.button/BTN_1"
  24. sed -i 's/print $6/print $1/' "$ROOT_FS/etc/rc.button/reset"
  25. sed -i 's/print $6/print $1/' "$ROOT_FS/etc/rc.local"
  26. sed -i 's/print $6/print $1/' "$ROOT_FS/etc/uci-defaults/90-firewall.sh"
  27. sed -i 's/print $6/print $1/' "$ROOT_FS/etc/uci-defaults/91-fstab.sh"
  28. sed -i 's/print $6/print $1/' "$ROOT_FS/etc/uci-defaults/92-system.sh"
  29. sed -i 's/print $6/print $1/' "$ROOT_FS/etc/uci-defaults/95-network.sh"
  30. sed -i 's/print $6/print $1/' "$ROOT_FS/etc/uci-defaults/97-pineapple.sh"
  31. sed -i 's/print $6/print $1/' "$ROOT_FS/sbin/led"
  32. # force setup
  33. sed -i 's/..Get Device/device="NANO"/' "$ROOT_FS/etc/rc.button/BTN_1"
  34. sed -i 's/..Get Device/device="NANO"/' "$ROOT_FS/etc/rc.button/reset"
  35. sed -i 's/..Get Device/device="NANO"/' "$ROOT_FS/etc/rc.local"
  36. sed -i 's/..Get Version and Device/device="TETRA"/' "$ROOT_FS/etc/uci-defaults/90-firewall.sh"
  37. sed -i 's/..Get Version and Device/device="NANO"/' "$ROOT_FS/etc/uci-defaults/91-fstab.sh"
  38. sed -i 's/..Get Version and Device/device="NANO"/' "$ROOT_FS/etc/uci-defaults/95-network.sh"
  39. sed -i 's/..Get Version and Device/device="NANO"/' "$ROOT_FS/etc/uci-defaults/97-pineapple.sh"
  40. sed -i 's/..Get device type/device="NANO"/' "$ROOT_FS/etc/uci-defaults/92-system.sh"
  41. #sed -i 's/..led (C) Hak5 2018/device="NANO"/' "$ROOT_FS/sbin/led"
  42. echo "[*] Correct OPKG feed url"
  43. cp "$FILES_FOLDER/$ARCHITECTURE/customfeeds.conf" "$ROOT_FS/etc/opkg/customfeeds.conf"
  44. echo "[*] Pineap"
  45. cp "$FILES_FOLDER/$ARCHITECTURE/pineap/pineapd" "$ROOT_FS/usr/sbin/pineapd"
  46. cp "$FILES_FOLDER/$ARCHITECTURE/pineap/pineap" "$ROOT_FS/usr/bin/pineap"
  47. cp "$FILES_FOLDER/$ARCHITECTURE/pineap/resetssids" "$ROOT_FS/usr/sbin/resetssids"
  48. cp "$FILES_FOLDER/$ARCHITECTURE/pineap/libwifi.so" "$ROOT_FS/usr/lib/libwifi.so"
  49. chmod +x "$ROOT_FS/usr/sbin/pineapd"
  50. chmod +x "$ROOT_FS/usr/bin/pineap"
  51. chmod +x "$ROOT_FS/usr/sbin/resetssids"
  52. chmod +x "$ROOT_FS/usr/lib/libwifi.so"
  53. echo "[*] Add Karma support"
  54. mkdir -p "$ROOT_FS/lib/netifd/wireless"
  55. cp "$FILES_FOLDER/common/karma/mac80211.sh" "$ROOT_FS/lib/netifd/wireless/mac80211.sh"
  56. cp "$FILES_FOLDER/common/karma/hostapd.sh" "$ROOT_FS/lib/netifd/hostapd.sh"
  57. cp "$FILES_FOLDER/$ARCHITECTURE/karma/hostapd_cli" "$ROOT_FS/usr/sbin/hostapd_cli"
  58. cp "$FILES_FOLDER/$ARCHITECTURE/karma/wpad" "$ROOT_FS/usr/sbin/wpad"
  59. chmod +x "$ROOT_FS/lib/netifd/wireless/mac80211.sh"
  60. chmod +x "$ROOT_FS/lib/netifd/hostapd.sh"
  61. chmod +x "$ROOT_FS/usr/sbin/hostapd_cli"
  62. chmod +x "$ROOT_FS/usr/sbin/wpad"
  63. echo "[*] Install panel fixes and improvements"
  64. # update panel code
  65. rm -rf "$ROOT_FS/pineapple"
  66. wget -q https://github.com/xchwarze/wifi-pineapple-panel/archive/refs/heads/wpc.zip -O updated-panel.zip
  67. unzip -q updated-panel.zip
  68. cp -r wifi-pineapple-panel-wpc/src/* "$ROOT_FS/"
  69. rm -rf wifi-pineapple-panel-wpc updated-panel.zip
  70. chmod +x "$ROOT_FS/etc/init.d/pineapd"
  71. chmod +x "$ROOT_FS/etc/uci-defaults/93-pineap.sh"
  72. chmod +x "$ROOT_FS/pineapple/modules/Advanced/formatSD/format_sd"
  73. chmod +x "$ROOT_FS/pineapple/modules/Help/files/debug"
  74. chmod +x "$ROOT_FS/pineapple/modules/PineAP/executable/executable"
  75. chmod +x "$ROOT_FS/pineapple/modules/Reporting/files/reporting"
  76. cp "$FILES_FOLDER/common/pineapple/favicon.ico" "$ROOT_FS/pineapple/img/favicon.ico"
  77. cp "$FILES_FOLDER/common/pineapple/favicon-16x16.png" "$ROOT_FS/pineapple/img/favicon-16x16.png"
  78. cp "$FILES_FOLDER/common/pineapple/favicon-32x32.png" "$ROOT_FS/pineapple/img/favicon-32x32.png"
  79. # fix docs size
  80. truncate -s 0 "$ROOT_FS/pineapple/modules/Setup/eula.txt"
  81. truncate -s 0 "$ROOT_FS/pineapple/modules/Setup/license.txt"
  82. echo "[*] Enable ssh by default"
  83. sed -i 's/\/etc\/init.d\/sshd/#\/etc\/init.d\/sshd/' "$ROOT_FS/etc/rc.local"
  84. echo "[*] Change root password to: root"
  85. cp "$FILES_FOLDER/common/etc/shadow" "$ROOT_FS/etc/shadow"
  86. echo "[*] Fix uci-defaults"
  87. cp "$FILES_FOLDER/common/etc/92-system.sh" "$ROOT_FS/etc/uci-defaults/92-system.sh"
  88. cp "$FILES_FOLDER/common/etc/95-network.sh" "$ROOT_FS/etc/uci-defaults/95-network.sh"
  89. cp "$FILES_FOLDER/common/etc/97-pineapple.sh" "$ROOT_FS/etc/uci-defaults/97-pineapple.sh"
  90. echo "[*] Fix pendrive hotplug"
  91. cp "$FILES_FOLDER/common/etc/20-sd-universal" "$ROOT_FS/etc/hotplug.d/block/20-sd-universal"
  92. rm "$ROOT_FS/etc/hotplug.d/block/20-sd"
  93. rm "$ROOT_FS/etc/hotplug.d/usb/30-sd"
  94. echo "[*] Add support for reflash"
  95. mkdir -p "$ROOT_FS/lib/upgrade/keep.d"
  96. cp "$FILES_FOLDER/common/lib/pineapple.keep" "$ROOT_FS/lib/upgrade/keep.d/pineapple"
  97. echo "[*] Fix airmon-ng listInterfaces()"
  98. mkdir -p "$ROOT_FS/usr/sbin"
  99. cp "$FILES_FOLDER/common/usr/airmon-ng" "$ROOT_FS/usr/sbin/airmon-ng"
  100. chmod +x "$ROOT_FS/usr/sbin/airmon-ng"
  101. echo "[*] Add wpc-tools and service"
  102. cp "$FILES_FOLDER/common/etc/wpc-tools" "$ROOT_FS/etc/init.d/wpc-tools"
  103. cp "$FILES_FOLDER/common/usr/wpc-tools" "$ROOT_FS/usr/bin/wpc-tools"
  104. chmod +x "$ROOT_FS/etc/init.d/wpc-tools"
  105. chmod +x "$ROOT_FS/usr/bin/wpc-tools"
  106. echo "[*] Other fixs"
  107. # clean files
  108. rm -f "$ROOT_FS/etc/pineapple/changes"
  109. rm -f "$ROOT_FS/etc/pineapple/pineapple_version"
  110. # default wifi config
  111. cp "$FILES_FOLDER/common/lib/mac80211.sh" "$ROOT_FS/lib/wifi/mac80211.sh"
  112. # fix wifi detection
  113. cp "$FILES_FOLDER/common/etc/30-fix_wifi" "$ROOT_FS/etc/hotplug.d/usb/30-fix_wifi"
  114. # copy clean version of led script
  115. cp "$FILES_FOLDER/common/sbin/led" "$ROOT_FS/sbin/led"
  116. chmod +x "$ROOT_FS/sbin/led"
  117. # add setup support for routers that do not have a reset button but do have wps
  118. # this modified the package "hostapd-common" wps button script
  119. mkdir -p "$ROOT_FS/etc/rc.button"
  120. cp "$FILES_FOLDER/common/etc/wps" "$ROOT_FS/etc/rc.button/wps"
  121. chmod +x "$ROOT_FS/etc/rc.button/wps"
  122. # add new banner
  123. cp "$FILES_FOLDER/common/etc/banner" "$ROOT_FS/etc/banner"
  124. }
  125. mipsel_patch () {
  126. echo "[*] Add mipsel support"
  127. cp "$FILES_FOLDER/$ARCHITECTURE/aircrack/aircrack-ng" "$ROOT_FS/usr/bin/aircrack-ng"
  128. cp "$FILES_FOLDER/$ARCHITECTURE/aircrack/aireplay-ng" "$ROOT_FS/usr/sbin/aireplay-ng"
  129. cp "$FILES_FOLDER/$ARCHITECTURE/aircrack/airodump-ng" "$ROOT_FS/usr/sbin/airodump-ng"
  130. cp "$FILES_FOLDER/$ARCHITECTURE/aircrack/airodump-ng-oui-update" "$ROOT_FS/usr/sbin/airodump-ng-oui-update"
  131. cp "$FILES_FOLDER/$ARCHITECTURE/aircrack/libaircrack-osdep-1.5.2.so" "$ROOT_FS/usr/lib/libaircrack-osdep-1.5.2.so"
  132. cp "$FILES_FOLDER/$ARCHITECTURE/aircrack/libaircrack-ce-wpa-1.5.2.so" "$ROOT_FS/usr/lib/libaircrack-ce-wpa-1.5.2.so"
  133. cp "$FILES_FOLDER/$ARCHITECTURE/aircrack/libaircrack-osdep.so" "$ROOT_FS/usr/lib/libaircrack-osdep.so"
  134. cp "$FILES_FOLDER/$ARCHITECTURE/aircrack/libaircrack-ce-wpa.la" "$ROOT_FS/usr/lib/libaircrack-ce-wpa.la"
  135. cp "$FILES_FOLDER/$ARCHITECTURE/aircrack/libaircrack-ce-wpa.so" "$ROOT_FS/usr/lib/libaircrack-ce-wpa.so"
  136. cp "$FILES_FOLDER/$ARCHITECTURE/aircrack/libaircrack-osdep.la" "$ROOT_FS/usr/lib/libaircrack-osdep.la"
  137. chmod +x "$ROOT_FS/usr/bin/aircrack-ng"
  138. chmod +x "$ROOT_FS/usr/sbin/aireplay-ng"
  139. chmod +x "$ROOT_FS/usr/sbin/airodump-ng"
  140. chmod +x "$ROOT_FS/usr/sbin/airodump-ng-oui-update"
  141. chmod +x "$ROOT_FS/usr/lib/libaircrack-osdep-1.5.2.so"
  142. chmod +x "$ROOT_FS/usr/lib/libaircrack-ce-wpa-1.5.2.so"
  143. chmod +x "$ROOT_FS/usr/lib/libaircrack-osdep.so"
  144. chmod +x "$ROOT_FS/usr/lib/libaircrack-ce-wpa.la"
  145. chmod +x "$ROOT_FS/usr/lib/libaircrack-ce-wpa.so"
  146. chmod +x "$ROOT_FS/usr/lib/libaircrack-osdep.la"
  147. cp "$FILES_FOLDER/$ARCHITECTURE/others/http_sniffer" "$ROOT_FS/usr/sbin/http_sniffer"
  148. chmod +x "$ROOT_FS/usr/sbin/http_sniffer"
  149. }
  150. nano_patch () {
  151. # correct python-codecs version (from python-codecs_2.7.18-3_mips_24kc.ipk)
  152. mkdir -p "$ROOT_FS/usr/lib/python2.7/encodings"
  153. cp "$FILES_FOLDER/$ARCHITECTURE/python/encodings/__init__.pyc" "$ROOT_FS/usr/lib/python2.7/encodings/__init__.pyc"
  154. cp "$FILES_FOLDER/$ARCHITECTURE/python/encodings/aliases.pyc" "$ROOT_FS/usr/lib/python2.7/encodings/aliases.pyc"
  155. cp "$FILES_FOLDER/$ARCHITECTURE/python/encodings/base64_codec.pyc" "$ROOT_FS/usr/lib/python2.7/encodings/base64_codec.pyc"
  156. cp "$FILES_FOLDER/$ARCHITECTURE/python/encodings/hex_codec.pyc" "$ROOT_FS/usr/lib/python2.7/encodings/hex_codec.pyc"
  157. # panel changes
  158. # sed -i "s/\$data = file_get_contents('\/proc\/cpuinfo')/return 'nano'/" "$ROOT_FS/pineapple/api/pineapple.php"
  159. cp "$FILES_FOLDER/common/pineapple/config.php.nano" "$ROOT_FS/pineapple/config.php"
  160. # other changes
  161. sed -i "s/exec(\"cat \/proc\/cpuinfo | grep 'machine'\")/'nano'/" "$ROOT_FS/usr/bin/pineapple/site_survey"
  162. # fix banner info
  163. sed -i 's/DEVICE/NANO/' "$ROOT_FS/etc/banner"
  164. }
  165. tetra_patch () {
  166. # correct python-codecs version (from python-codecs_2.7.18-3_mips_24kc.ipk)
  167. mkdir -p "$ROOT_FS/usr/lib/python2.7/encodings"
  168. cp "$FILES_FOLDER/$ARCHITECTURE/python/encodings/__init__.pyc" "$ROOT_FS/usr/lib/python2.7/encodings/__init__.pyc"
  169. cp "$FILES_FOLDER/$ARCHITECTURE/python/encodings/aliases.pyc" "$ROOT_FS/usr/lib/python2.7/encodings/aliases.pyc"
  170. cp "$FILES_FOLDER/$ARCHITECTURE/python/encodings/base64_codec.pyc" "$ROOT_FS/usr/lib/python2.7/encodings/base64_codec.pyc"
  171. cp "$FILES_FOLDER/$ARCHITECTURE/python/encodings/hex_codec.pyc" "$ROOT_FS/usr/lib/python2.7/encodings/hex_codec.pyc"
  172. # panel changes
  173. # sed -i 's/tetra/nulled/' "$ROOT_FS/pineapple/js/directives.js"
  174. # sed -i 's/tetra/nulled/' "$ROOT_FS/pineapple/modules/ModuleManager/js/module.js"
  175. # sed -i 's/tetra/nulled/' "$ROOT_FS/pineapple/modules/Advanced/module.html"
  176. # sed -i 's/nano/tetra/' "$ROOT_FS/pineapple/html/install-modal.html"
  177. # sed -i 's/nano/tetra/' "$ROOT_FS/pineapple/modules/Advanced/module.html"
  178. # sed -i 's/nano/tetra/' "$ROOT_FS/pineapple/modules/ModuleManager/js/module.js"
  179. # sed -i 's/nano/tetra/' "$ROOT_FS/pineapple/modules/Reporting/js/module.js"
  180. # sed -i 's/nano/tetra/' "$ROOT_FS/pineapple/modules/Reporting/api/module.php"
  181. # sed -i "s/\$data = file_get_contents('\/proc\/cpuinfo')/return 'tetra'/" "$ROOT_FS/pineapple/api/pineapple.php"
  182. cp "$FILES_FOLDER/common/pineapple/config.php.tetra" "$ROOT_FS/pineapple/config.php"
  183. # other changes
  184. sed -i "s/exec(\"cat \/proc\/cpuinfo | grep 'machine'\")/'tetra'/" "$ROOT_FS/usr/bin/pineapple/site_survey"
  185. # fix banner info
  186. sed -i 's/DEVICE/TETRA/' "$ROOT_FS/etc/banner"
  187. }
  188. universal_patch () {
  189. # panel changes
  190. cp "$FILES_FOLDER/common/pineapple/config.php.tetra" "$ROOT_FS/pineapple/config.php"
  191. # other changes
  192. sed -i "s/exec(\"cat \/proc\/cpuinfo | grep 'machine'\")/'tetra'/" "$ROOT_FS/usr/bin/pineapple/site_survey"
  193. # fix banner info
  194. sed -i 's/DEVICE/OMEGA/' "$ROOT_FS/etc/banner"
  195. }
  196. # implement....
  197. echo "Wifi Pineapple Cloner v4"
  198. echo "by DSR!"
  199. echo "******************************"
  200. echo ""
  201. # apply patches in order
  202. common_patch
  203. if [[ "$ARCHITECTURE" == "mipsel" ]]; then
  204. mipsel_patch
  205. fi
  206. echo "[*] Setting target as: $FLAVOR"
  207. if [[ $FLAVOR = 'nano' ]]
  208. then
  209. nano_patch
  210. elif [[ $FLAVOR = 'tetra' ]]
  211. then
  212. tetra_patch
  213. elif [[ $FLAVOR = 'universal' ]]
  214. then
  215. universal_patch
  216. fi
  217. echo "[*] Done!"
  218. echo ""