-
-
Save maboloshi/77cb8e5d0ba83b82f7cc4ace506068da to your computer and use it in GitHub Desktop.
[Download MEGA files from command-line] `./mega-dl.sh '<URL>' <file name>` (Note the single quotes around the URL, otherwise bash complains "event not found") #mega #shell
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# 原作者: t0n1 | |
# 来自: http://hacktracking.blogspot.ca/2013/07/download-mega-files-from-command-line.html | |
# | |
# 修改: maboloshi | |
# <file_url>: https://mega.nz/#!<id>!<decyption Key> | |
url=$1 | |
out_file="$2" | |
id=`echo $url | sed 's/.*#!\(.*\)!\(.*\)/\1/'` | |
key=`echo $url | sed 's/.*#!\(.*\)!\(.*\)/\2/;s/-/+/g;s/_/\//g;s/,//g'` | |
if [ "$(uname -s)" = "Darwin" ]; then | |
# mac | |
b64_hex_key=`echo -n $key | base64 --decode --ignore-garbage 2> /dev/null | od -v -An -t x1 | tr -d '\n '` | |
else | |
b64_hex_key=`echo -n $key | base64 --decode --ignore-garbage 2> /dev/null | xxd -p | tr -d '\n'` | |
fi | |
hex_key[0]=$(( 0x${b64_hex_key:00:16} ^ 0x${b64_hex_key:32:16} )) | |
hex_key[1]=$(( 0x${b64_hex_key:16:16} ^ 0x${b64_hex_key:48:16} )) | |
hex_key=`printf "%x" ${hex_key[*]}` | |
hex_iv="${b64_hex_key:32:16}0000000000000000" | |
new_url=`curl --silent --request POST --data-binary '[{"a":"g","g":1,"p":"'$id'"}]' https://eu.api.mega.co.nz/cs | sed 's/.*"g":"\(.*\)",.*/\1/'` | |
curl --fail "$new_url" | openssl enc -d -aes-128-ctr -K "$hex_key" -iv "$hex_iv" -out $out_file |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# 原作者: t0n1 | |
# 来自: http://hacktracking.blogspot.ca/2013/07/download-mega-files-from-command-line.html | |
# | |
# 另参考: https://raw.githubusercontent.com/tonikelope/megadown/master/megadown | |
# 修改: maboloshi | |
# <file_url>: https://mega.nz/#!<id>!<decyption Key> | |
url=${1?Error: no url given!!!} | |
out_path=${2:-./} | |
# 默认输出路径为当前 | |
id=`echo $url | sed 's/.*#!\(.*\)!\(.*\)/\1/'` | |
key=`echo $url | sed 's/.*#!\(.*\)!\(.*\)/\2/;s/-/+/g;s/_/\//g;s/,//g;'`=== | |
# -替换为+ _替换为/ 删除, | |
# 傻瓜式补足末尾标记= | |
# macOS `base64` 不会自动补足末尾标记= 导致解密错误 | |
# 且多余的= 不会影响`base64`解码 | |
# 但是`openssl enc -base64` 比较严格,末尾标记=不足和多余 直接返回空值 | |
# 可使用以下函数,进行预处理 | |
# 1:b64_encoded_string | |
#function urlb64_to_b64 { | |
# local b64=$(echo -n "$1" | tr '\-_' '+/' | tr -d ',') | |
# local pad=$(((4-${#1}%4)%4)) | |
# | |
# for i in $(seq 1 $pad); do | |
# b64="${b64}=" | |
# done | |
# | |
# echo -n "$b64" | |
while [ "$key" = "" ] | |
do | |
read -p "Enter decyption Key:" key | |
done | |
b64_hex_key=`echo -n $key | base64 --decode 2> /dev/null | od -v -An -t x1 | tr -d '\n '` | |
hex_key[1]=$(( 0x${b64_hex_key:00:16} ^ 0x${b64_hex_key:32:16} )) | |
hex_key[2]=$(( 0x${b64_hex_key:16:16} ^ 0x${b64_hex_key:48:16} )) | |
hex_key=`printf "%x" ${hex_key[*]}` | |
hex_iv="${b64_hex_key:32:16}0000000000000000" | |
hex_public_iv=00000000000000000000000000000000 | |
mega_res_json=`curl --silent --request POST --data-binary '[{"a":"g","g":1,"p":"'$id'"}]' https://g.api.mega.co.nz/cs` | |
file_metadata=`echo $mega_res_json | sed 's/.*"at":"\(.*\)",".*/\1/;s/-/+/g;s/_/\//g;s/,//g' | openssl enc -a -A -d -aes-128-cbc -K "$hex_key" -iv "$hex_public_iv" -nopad | tr -d '\0'` | |
file_url=`echo $mega_res_json | sed 's/.*"g":"\(.*\)".*/\1/'` | |
file_size=`echo $mega_res_json | sed 's/.*"s":\([0-9].*\),"at".*/\1/' | awk '{ split( "B KB MB GB TB PB" , v ); s=1; while( $1>1024 ){ $1/=1024; s++ } printf "%.2f %s", $1, v[s] }'` | |
file_name=`echo $file_metadata | sed 's/.*"n":"\(.*\)",.*/\1/'` | |
printf "Downloading %s [size: %s]...\n" "$file_name" "$file_size" | |
curl --progress-bar --fail "$file_url" | openssl enc -d -aes-128-ctr -K "$hex_key" -iv "$hex_iv" -out "$out_path$file_name" | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# 原作者: t0n1 | |
# 来自: http://hacktracking.blogspot.ca/2013/07/download-mega-files-from-command-line.html | |
# | |
# 另参考: https://raw.githubusercontent.com/tonikelope/megadown/master/megadown | |
# 修改: maboloshi | |
# <file_url>: https://mega.nz/#!<id>!<decyption Key> | |
url=${1?Error: no url given!!!} | |
out_path=${2:-./} | |
# 默认输出路径为当前 | |
id=`echo $url | awk -F '!' '{print $2}'` | |
key=`echo $url | awk -F '!' '{print $3}'| tr '\-_' '+/' | tr -d ','`=== | |
# -替换为+ _替换为/ 删除, | |
# 傻瓜式补足末尾标记= | |
# macOS `base64` 不会自动补足末尾标记= 导致解密错误 | |
# 且多余的= 不会影响`base64`解码 | |
# 但是`openssl enc -base64` 比较严格,末尾标记=不足和多余 直接返回空值 | |
# 可使用以下函数,进行预处理 | |
# 1:b64_encoded_string | |
#function urlb64_to_b64 { | |
# local b64=$(echo -n "$1" | tr '\-_' '+/' | tr -d ',') | |
# local pad=$(((4-${#1}%4)%4)) | |
# | |
# for i in $(seq 1 $pad); do | |
# b64="${b64}=" | |
# done | |
# | |
# echo -n "$b64" | |
while [ "$key" = "" ] | |
do | |
read -p "Enter decyption Key:" key | |
done | |
b64_hex_key=`echo -n $key | base64 --decode 2> /dev/null | od -v -An -t x1 | tr -d '\n '` | |
hex_key[1]=$(( 0x${b64_hex_key:00:16} ^ 0x${b64_hex_key:32:16} )) | |
hex_key[2]=$(( 0x${b64_hex_key:16:16} ^ 0x${b64_hex_key:48:16} )) | |
hex_key=`printf "%x" ${hex_key[*]}` | |
hex_iv="${b64_hex_key:32:16}0000000000000000" | |
hex_public_iv=00000000000000000000000000000000 | |
mega_res_json=`curl --silent --request POST --data-binary '[{"a":"g","g":1,"p":"'$id'"}]' https://g.api.mega.co.nz/cs` | |
file_metadata=`echo $mega_res_json | awk -F '"' '{print $6}' | tr '\-_' '+/' | tr -d ',' | openssl enc -a -A -d -aes-128-cbc -K "$hex_key" -iv "$hex_public_iv" -nopad | tr -d '\0'` | |
file_url=`echo $mega_res_json | awk -F '"' '{print $12}'` | |
file_size=`echo $mega_res_json | sed 's/.*"s":\([0-9].*\),"at".*/\1/' | awk '{ split( "B KB MB GB TB PB" , v ); s=1; while( $1>1024 ){ $1/=1024; s++ } printf "%.2f %s", $1, v[s] }'` | |
file_name=`echo $file_metadata | awk -F '"' '{print $4}'` | |
printf "Downloading %s [size: %s]...\n" "$file_name" "$file_size" | |
curl --progress-bar --fail "$file_url" | openssl enc -d -aes-128-ctr -K "$hex_key" -iv "$hex_iv" -out "$out_path$file_name" | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# 原作者: t0n1 | |
# 来自: http://hacktracking.blogspot.ca/2013/07/download-mega-files-from-command-line.html | |
# | |
# 另参考: https://raw.githubusercontent.com/tonikelope/megadown/master/megadown | |
# 修改: maboloshi | |
# <file_url>: https://mega.nz/#!<id>!<decyption Key> | |
url=${1?Error: no url given!!!} | |
out_path=${2:-./} | |
# 默认输出路径为当前 | |
id=`echo $url | awk -F '!' '{print $2}'` | |
key=`echo $url | awk -F '!' '{print $3}'| tr '\-_' '+/' | tr -d ','`=== | |
# -替换为+ _替换为/ 删除, | |
# 傻瓜式补足末尾标记= | |
# macOS `base64` 不会自动补足末尾标记= 导致解密错误 | |
# 且多余的= 不会影响`base64`解码 | |
# 但是`openssl enc -base64` 比较严格,末尾标记=不足和多余 直接返回空值 | |
# 可使用以下函数,进行预处理 | |
# 1:b64_encoded_string | |
#function urlb64_to_b64 { | |
# local b64=$(echo -n "$1" | tr '\-_' '+/' | tr -d ',') | |
# local pad=$(((4-${#1}%4)%4)) | |
# | |
# for i in $(seq 1 $pad); do | |
# b64="${b64}=" | |
# done | |
# | |
# echo -n "$b64" | |
while [ "$key" = "" ] | |
do | |
read -p "Enter decyption Key:" key | |
done | |
b64_hex_key=`echo -n $key | base64 --decode 2> /dev/null | od -v -An -t x1 | tr -d '\n '` | |
hex_key[1]=$(( 0x${b64_hex_key:00:16} ^ 0x${b64_hex_key:32:16} )) | |
hex_key[2]=$(( 0x${b64_hex_key:16:16} ^ 0x${b64_hex_key:48:16} )) | |
hex_key=`printf "%x" ${hex_key[*]}` | |
hex_iv="${b64_hex_key:32:16}0000000000000000" | |
hex_public_iv=00000000000000000000000000000000 | |
mega_res_json=`curl --silent --request POST --data-binary '[{"a":"g","g":1,"p":"'$id'"}]' https://g.api.mega.co.nz/cs` | |
file_metadata=`echo $mega_res_json| jq -r .[0].at | tr '\-_' '+/' | tr -d ',' | openssl enc -a -A -d -aes-128-cbc -K "$hex_key" -iv "$hex_public_iv" -nopad | tr -d '\0'` | |
file_url=`echo $mega_res_json| jq -r .[0].g` | |
file_size=`echo $mega_res_json| jq -r .[0].s | awk '{ split( "B KB MB GB TB PB" , v ); s=1; while( $1>1024 ){ $1/=1024; s++ } printf "%.2f %s", $1, v[s] }'` | |
file_name=`echo $file_metadata | awk -F '"' '{print $4}'` | |
printf "Downloading %s [size: %s]...\n" "$file_name" "$file_size" | |
curl --progress-bar --fail "$file_url" | openssl enc -d -aes-128-ctr -K "$hex_key" -iv "$hex_iv" -out "$out_path$file_name" | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment