1
1
#! /data/data/com.termux/files/usr/bin/bash -e
2
2
3
- VERSION=2024091801
3
+ VERSION=20250525
4
4
BASE_URL=https://kali.download/nethunter-images/current/rootfs
5
5
USERNAME=kali
6
6
# https://gitlab.com/kalilinux/nethunter/build-scripts/kali-nethunter-rootless/raw/main/install-nethunter-termux 原版连链接
7
7
8
- # SHA512 哈希值
9
- declare -A SHA512_HASHES=(
10
- [" full_arm64" ]=" 1fe0305803dbac57111e04cbc36b1e2d7365a293171474b83616c9df91cf89a05d1d0313488974f3cd2c8131e5ecdc25d5230091743c458bbac41ca109d8b12f"
11
- [" minimal_arm64" ]=" 061502bb2c28b4f1202eebea70d3bbe2f5c61e9f43fa7ab16080dbcfdf41f9363b2a00e29598502cdc8f5d15f7b116e336f043b1924aaabc4b08841f281601f8"
12
- [" nano_arm64" ]=" 6a244b108aec3d612e50e03d9af4c503ce636f7d5bb752f0f7a893a21e5384657da4579cfb1a8ef6902914e6f46d4720c6f385c00a5bc950803c7f5d141133db"
13
- # 可以添加更多架构的哈希值
14
- )
15
-
16
8
log () {
17
9
current_time=$( date +' %H:%M:%S' )
18
10
case " $1 " in
@@ -47,7 +39,9 @@ function unsupported_arch() {
47
39
}
48
40
49
41
function ask() {
42
+ # http://djm.me/ask
50
43
while true ; do
44
+
51
45
if [ " ${2:- } " = " Y" ]; then
52
46
prompt=" Y/n"
53
47
default=Y
@@ -59,28 +53,28 @@ function ask() {
59
53
default=
60
54
fi
61
55
62
- printf " ${light_cyan} [?] "
56
+ # Ask the question
57
+ printf " ${light_cyan} \n[?] "
63
58
read -p " $1 [$prompt ] " REPLY
64
59
60
+ # Default?
65
61
if [ -z " $REPLY " ]; then
66
62
REPLY=$default
67
63
fi
68
64
69
65
printf " ${reset} "
70
66
67
+ # Check if the reply is valid
71
68
case " $REPLY " in
72
69
Y* |y* ) return 0 ;;
73
70
N* |n* ) return 1 ;;
74
- * ) log " WARN" " 请输入 y 或 n" ;;
75
71
esac
76
72
done
77
73
}
78
74
79
75
function get_arch() {
80
76
log " INFO" " 检查设备架构..."
81
-
82
- local cpu_abi=$( getprop ro.product.cpu.abi)
83
- case " $cpu_abi " in
77
+ case $( getprop ro.product.cpu.abi) in
84
78
arm64-v8a)
85
79
SYS_ARCH=arm64
86
80
log " INFO" " 检测到架构: ARM64"
@@ -101,10 +95,10 @@ function set_strings() {
101
95
102
96
if [[ ${SYS_ARCH} == " arm64" ]]; then
103
97
menu_options=(" full" " minimal" " nano" )
104
- descriptions=(" NetHunter ARM64 (完整版 - 包含所有工具 )" " NetHunter ARM64 (精简版 - 基本工具 )" " NetHunter ARM64 (纳米版 - 最小安装 )" )
98
+ descriptions=(" NetHunter ARM64 (完整版 - 2.1 GiB )" " NetHunter ARM64 (精简版 - 131.6 MiB )" " NetHunter ARM64 (纳米版 - 185.2 MiB )" )
105
99
elif [[ ${SYS_ARCH} == " armhf" ]]; then
106
100
menu_options=(" full" " minimal" " nano" )
107
- descriptions=(" NetHunter ARMhf (完整版 - 包含所有工具 )" " NetHunter ARMhf (精简版 - 基本工具 )" " NetHunter ARMhf (纳米版 - 最小安装 )" )
101
+ descriptions=(" NetHunter ARMhf (完整版 - 2.0 GiB )" " NetHunter ARMhf (精简版 - 122.2 MiB )" " NetHunter ARMhf (纳米版 - 174.2 MiB )" )
108
102
fi
109
103
110
104
echo
@@ -240,25 +234,24 @@ function get_rootfs() {
240
234
}
241
235
242
236
function verify_sha() {
243
- log " INFO" " 验证 rootfs 完整性..."
244
-
245
- local hash_key=" ${wimg} _${SYS_ARCH} "
246
- local expected_hash=" ${SHA512_HASHES[$hash_key]} "
247
-
248
- if [ -z " $expected_hash " ]; then
249
- log " WARN" " 未找到 $hash_key 的预期哈希值,跳过验证"
250
- return 0
251
- fi
252
-
253
- log " INFO" " 计算 SHA-512 哈希值..."
254
- local actual_hash=$( sha512sum " $IMAGE_NAME " | awk ' {print $1}' )
255
-
256
- if [ " $expected_hash " = " $actual_hash " ]; then
257
- log " SUCCESS" " Rootfs SHA-512 哈希验证通过"
258
- return 0
237
+ log " INFO" " 开始下载rootfs验证文件..."
238
+ wget -c " ${BASE_URL} /SHA256SUMS"
239
+ if [ -f " SHA256SUMS" ]; then
240
+ # 从SHA256SUMS中提取该文件的哈希值
241
+ EXPECTED_HASH=$( grep " $IMAGE_NAME " SHA256SUMS | awk ' {print $1}' )
242
+ # 计算实际哈希值
243
+ log " INFO" " 计算 SHA-512 哈希值..."
244
+ ACTUAL_HASH=$( sha256sum " $IMAGE_NAME " | awk ' {print $1}' )
245
+ if [ " $EXPECTED_HASH " = " $ACTUAL_HASH " ]; then
246
+ log " SUCCESS" " Rootfs SHA-256 哈希验证通过"
247
+ return 0
248
+ else
249
+ rm -f " $IMAGE_NAME "
250
+ error_exit " Rootfs 文件已损坏或版本不匹配,请重新下载"
251
+ fi
259
252
else
260
- rm -f " $IMAGE_NAME "
261
- error_exit " Rootfs 文件已损坏或版本不匹配,请重新下载 "
253
+ log " WARN " " 未找到验证文件,跳过验证 "
254
+ return 0
262
255
fi
263
256
}
264
257
@@ -267,7 +260,7 @@ function extract_rootfs() {
267
260
log " INFO" " 开始解压 rootfs..."
268
261
269
262
# 显示解压进度
270
- pv " $IMAGE_NAME " | proot --link2symlink tar --exclude= ' dev/* ' -xJf - 2> /dev/null || {
263
+ pv " $IMAGE_NAME " | proot --link2symlink tar -xf - 2> /dev/null || {
271
264
error_exit " 解压失败,请检查镜像文件是否完整"
272
265
}
273
266
@@ -286,18 +279,10 @@ function create_launcher() {
286
279
287
280
cat > " $NH_LAUNCHER " << - EOF
288
281
#!/data/data/com.termux/files/usr/bin/bash -e
289
-
290
282
cd \$ {HOME}
291
-
292
283
# 取消设置 termux-exec 的 LD_PRELOAD
293
284
unset LD_PRELOAD
294
285
295
- # 检查 rootfs 是否存在
296
- if [ ! -d "kali-arm64" ]; then
297
- echo "错误: kali-arm64 目录不存在,请先运行安装脚本"
298
- exit 1
299
- fi
300
-
301
286
# Libreoffice 的临时解决方案
302
287
if [ ! -f $CHROOT /root/.version ]; then
303
288
touch $CHROOT /root/.version
@@ -502,6 +487,10 @@ function update_sources_list() {
502
487
503
488
# 替换为清华镜像源
504
489
sed -i " s@http://http.kali.org/kali@https://mirrors.tuna.tsinghua.edu.cn/kali@g" " $sources_list "
490
+ if [ " $wimg " = " nano" ] || [ " $wimg " = " minimal" ]; then
491
+ nh sudo apt update && nh sudo apt install -y tightvncserver kali-desktop-xfce
492
+ fi
493
+
505
494
log " SUCCESS" " Kali 软件源已更新为清华镜像"
506
495
else
507
496
log " WARN" " 未找到 Kali sources.list 文件"
0 commit comments