有没有办法使用 curl 或 wget 从命令行下载彩信?
Is there a way to download an MMS from command line using curl or wget?
我正在对基于 MMS 的攻击进行一些 Android 恶意软件研究。我正在寻找一种手动方式来检索或下载收到的彩信。我希望找到一些 curl
或 wget
行来做到这一点,但没有找到任何有用的东西。
到目前为止,我已经从内部数据库中获得了一些 MMS 信息,发现者:
# find / -iname "*.db" |grep -iE "mms|sms"
...
/data/data/com.android.providers.telephony/databases/mmssms.db
/data/data/com.google.android.gms/databases/icing_mmssms.db
/data/data/com.android.mms/databases/message.db
/data/data/com.android.mms/databases/message_glance.db
# cd /data/data/com.android.providers.telephony/databases/
# echo "select * from pdu;" | sqlite3 -header mmssms.db
...
# echo "select date,sub,ct_l,tr_id from pdu;" | sqlite3 -header mmssms.db
date|sub|ct_l|tr_id
1495xxxxxx|Download this message|http://mmsc32:10021/mmsc/3_2?Ae_xxxx_xxxxx-xxx|Ae_xxxx_xxxxx-xxx
如何解读mmsc32:10021
部分?
然后查看 MMSC
、Proxy
和 port
的消息设置,我想构建一个有效的 CLI 单行程序或浏览器请求,以下载文件检查。
在phone设置中我们可以通过以下方式找到MMSC:
Settings > More > Mobile network > Access Point Names > MMS: <your operator>
MMSC: http://mms.company.net:8002/
MMS Proxy: 194.xx.xx.xx
MMS Port: 8080
如何从shell命令行(或外部浏览器)下载彩信文件?
PS。显然 phone 已 root 并安装了 busybox
和 sqlite3
,也许还安装了 curl
或 wget
。 AOS 是 5.0+。
附录:2017-11-09
来自 here:
MMS (Multimedia Messaging Service) messages are sent using a
combination of SMS and WAP technologies. When an MMS message is sent,
a mobile device receives an MMS notification message via SMS. When
this MMS notification message is received by the mobile device, the
mobile device automatically initiates a WAP gateway connection to
download the content of the MMS message.
To send an MMS message, you must first create an MMS message file. The
format of an MMS message file is documented in the MMS Encapsulation
Protocol specification published by the Open Mobile Alliance
(http://www.openmobilealliance.org) and/or the WAP Forum
(http://www.wapforum.org). The MMS message file format consists of an
MMS message binary header, followed by a multipart MIME message where
the multipart message is encoded in a binary multipart format as
defined by the WAP Wireless Session Protocol (WSP) specification. This
binary MMS message file is stored on a web server using a MIME type of
application/vnd.wap.mms-message and an MMS message type of
m-retrieve-conf. A subset of the binary MMS header is sent as an MMS
notification message (MMS message type m-notification-ind) via SMS to
the mobile device together with a URL pointer to the location of the
complete message.
此外,smartphones 不再将彩信或短信内容下载到 SIM 卡中。这就是 "feature" phone 过去的做法。
附录:2017-11-13
查看 Telephony.java 中显示的 SQLite3 表的 API-23 (M) 源,我们发现
CONTENT_LOCATION = "ct_l";
,所以我们可以搜索它的其他用途here。简要总结我们的发现:
date # The message delivery time.
sub # The subject of the message, if present.
ct_l # The Content-Location of the message. A field in interface:Telephony.BaseMmsColumns
tr_id # The transaction-id of the message.
因此我们可能期望 ct_l
中的 URI 可以解释如下:
http://mmsc32:10021
是上面的 MMS 代理(显示)屏蔽的服务器 (IP:PORT)
/mmsc/3_2
是 WAP URL 到消息处理器
?Ae_xxxx_xxxxx-xxx
告诉消息处理器检索 "transaction id" 给出的消息:Ae_xxxx_xxxxx-xxx`
因此,使用代理(APN)设置,并使用从消息数据库中提取的URL(mmssms.db),应该能够使用精心设计的 curl
语句检索和下载 MMS 的内容。
也许是这样的:
# curl -x http://proxy_server:proxy_port --proxy-user username:password -L http://url
curl -v -x http://194.xx.xx.xx:8080 -L http://mmsc32:10021/mmsc/3_2?Ae_xxxx_xxxxx-xxx
# Or from outside local net:
curl -v -x http://mms.company.net:8002 -L http://mmsc32:10021/mmsc/3_2?Ae_xxxx_xxxxx-xxx
第一个显然不能在 phone 环境之外工作,因为它指的是 IP class C,仅在移动分配的 IP 中可见。
我希望你能得到答案。我不是那个人,但会提出我 2 美分的建议...
短版
您不能让短信跳过 "send to" SIM 卡并自动转移到某台计算机。
制作一个 Android 应用程序安装在您的 phone 上,确保它的工作是检测新收件箱邮件的副本并将其转移到您的计算机。
为 SIM 卡使用 USB 适配器。插入计算机后,您将直接在计算机上接收消息,而无需 phone 参与。
长版
与其使用命令行工具,不如制作一个实际的应用程序(通过 Android SDK)来检查收到的消息并将一些数据转发给您(例如:通过电子邮件或套接字,或不管你喜欢什么)。 "some data" 也意味着消息本身的完整副本,或者只是发送 [in-app] 的反馈
消息分析(例如:检测到的图像数量、图像字节的十六进制打印输出等)。
看看 Android 的 SmsManager API 它甚至告诉你:
For information about how to behave as the default SMS app on Android
4.4 (API level 19) and higher, see Telephony.
另请参阅 API 关于此主题的 downloadMultimediaMessage command. It's doing what you need. Telephony page has the information and links to start, but independent blog articles and tutorials (one such example)。
无论如何,到你的 post...
(1)
"I just want to download the message to a file, without the phone processing it, as it could contain malware"
你认为 "without the phone processing it" 是怎样工作的? phone 持有您的运营商(通过服务中心)在从发件人自己的提供商的服务中心接收到消息后会将消息转发到的 sim。您和 curl
已退出此循环。只有当您的 SIM 卡收到短信并且 phone OS 提醒您时,您才会知道短信。
技术上 phone 已经处理了这条消息,只是您还没有打开它。
(2)
"How can I download the MMS file from shell command line or an external browser?"
您必须下载整个 mmssms.db
文件并从中提取特定消息。您像对待任何其他在线数据库一样对待 .db
(例如:使用 SQL/PHP 类型查询等)。
请参阅本教程以获取有用的建议:http://cheeky4n6monkey.blogspot.co.uk/2013/02/
未来传入消息的另一种方法是只获取一个 (USB) SIM 加密狗来接收您的卡。一旦插入计算机,它就可以 receive/send 消息,因为 SIM 卡在加密狗内 live/active(作为 phone 的代理)。
加密狗带有自己的软件(例如 image of such),用于管理网络连接和 read/write SMS/MMS 消息。这就像让 SIM 卡不在 phone 而是在桌面上工作。
我只是用了你的 附录 来让它工作,但不得不稍微改变它。
请注意,我是 运行 来自 linux 的,具有通过连接的 USB 调制解调器定义的 PPP
接口。显然,对于发送 MMS 推送的运营商,此执行的连接必须是“on net”。
curl --interface ppp0 -v -x 10.202.2.60:8080 --output mms.pdu http://pxt-get.vodafone.net.au:8080/mmsc?xxxxxxxxxxx
其中:
ppp0
是调制解调器连接定义的接口,并且:
http://pxt-get.vodafone.net.au:8080/mmsc?xxxxxxxxxxx
URL 是在原始 MMS 推送通知中传递的,并且:
10.202.2.60
是我的运营商给的彩信proxy,并且:
8080
是我的运营商给我的彩信端口。
这会将彩信保存到文件 mms.pdu
。
配置文件:
/etc/ppp/options
:
debug
4000000
modem
crtscts
lock
connect /etc/ppp/net-connect
asyncmap 0
defaultroute
:
mtu 1400
/etc/ppp/net-chat
:
#!/bin/sh
/usr/sbin/chat -v -t 60 -f /etc/ppp/net-chat
/etc/ppp/net-connect
:
ABORT 'ERROR'
ABORT 'BUSY'
ABORT 'NO CARRIER'
'' AT
OK ATE0
OK AT+IPR=4000000
OK AT+CGDCONT=1,"IP","live.vodafone.com"
OK AT&S1
OK AT&F
OK AT&W
OK AT+CNMP=14
OK AT&W
OK ATE0
OK ATD*99***1#
CONNECT
最后连接,方法是:/usr/sbin/pppd /dev/ttyUSB3
我正在对基于 MMS 的攻击进行一些 Android 恶意软件研究。我正在寻找一种手动方式来检索或下载收到的彩信。我希望找到一些 curl
或 wget
行来做到这一点,但没有找到任何有用的东西。
到目前为止,我已经从内部数据库中获得了一些 MMS 信息,发现者:
# find / -iname "*.db" |grep -iE "mms|sms"
...
/data/data/com.android.providers.telephony/databases/mmssms.db
/data/data/com.google.android.gms/databases/icing_mmssms.db
/data/data/com.android.mms/databases/message.db
/data/data/com.android.mms/databases/message_glance.db
# cd /data/data/com.android.providers.telephony/databases/
# echo "select * from pdu;" | sqlite3 -header mmssms.db
...
# echo "select date,sub,ct_l,tr_id from pdu;" | sqlite3 -header mmssms.db
date|sub|ct_l|tr_id
1495xxxxxx|Download this message|http://mmsc32:10021/mmsc/3_2?Ae_xxxx_xxxxx-xxx|Ae_xxxx_xxxxx-xxx
如何解读mmsc32:10021
部分?
然后查看 MMSC
、Proxy
和 port
的消息设置,我想构建一个有效的 CLI 单行程序或浏览器请求,以下载文件检查。
在phone设置中我们可以通过以下方式找到MMSC:
Settings > More > Mobile network > Access Point Names > MMS: <your operator>
MMSC: http://mms.company.net:8002/
MMS Proxy: 194.xx.xx.xx
MMS Port: 8080
如何从shell命令行(或外部浏览器)下载彩信文件?
PS。显然 phone 已 root 并安装了 busybox
和 sqlite3
,也许还安装了 curl
或 wget
。 AOS 是 5.0+。
附录:2017-11-09
来自 here:
MMS (Multimedia Messaging Service) messages are sent using a combination of SMS and WAP technologies. When an MMS message is sent, a mobile device receives an MMS notification message via SMS. When this MMS notification message is received by the mobile device, the mobile device automatically initiates a WAP gateway connection to download the content of the MMS message.
To send an MMS message, you must first create an MMS message file. The format of an MMS message file is documented in the MMS Encapsulation Protocol specification published by the Open Mobile Alliance (http://www.openmobilealliance.org) and/or the WAP Forum (http://www.wapforum.org). The MMS message file format consists of an MMS message binary header, followed by a multipart MIME message where the multipart message is encoded in a binary multipart format as defined by the WAP Wireless Session Protocol (WSP) specification. This binary MMS message file is stored on a web server using a MIME type of application/vnd.wap.mms-message and an MMS message type of m-retrieve-conf. A subset of the binary MMS header is sent as an MMS notification message (MMS message type m-notification-ind) via SMS to the mobile device together with a URL pointer to the location of the complete message.
此外,smartphones 不再将彩信或短信内容下载到 SIM 卡中。这就是 "feature" phone 过去的做法。
附录:2017-11-13
查看 Telephony.java 中显示的 SQLite3 表的 API-23 (M) 源,我们发现
CONTENT_LOCATION = "ct_l";
,所以我们可以搜索它的其他用途here。简要总结我们的发现:
date # The message delivery time.
sub # The subject of the message, if present.
ct_l # The Content-Location of the message. A field in interface:Telephony.BaseMmsColumns
tr_id # The transaction-id of the message.
因此我们可能期望 ct_l
中的 URI 可以解释如下:
http://mmsc32:10021
是上面的 MMS 代理(显示)屏蔽的服务器 (IP:PORT)/mmsc/3_2
是 WAP URL 到消息处理器?Ae_xxxx_xxxxx-xxx
告诉消息处理器检索 "transaction id" 给出的消息:Ae_xxxx_xxxxx-xxx`
因此,使用代理(APN)设置,并使用从消息数据库中提取的URL(mmssms.db),应该能够使用精心设计的 curl
语句检索和下载 MMS 的内容。
也许是这样的:
# curl -x http://proxy_server:proxy_port --proxy-user username:password -L http://url
curl -v -x http://194.xx.xx.xx:8080 -L http://mmsc32:10021/mmsc/3_2?Ae_xxxx_xxxxx-xxx
# Or from outside local net:
curl -v -x http://mms.company.net:8002 -L http://mmsc32:10021/mmsc/3_2?Ae_xxxx_xxxxx-xxx
第一个显然不能在 phone 环境之外工作,因为它指的是 IP class C,仅在移动分配的 IP 中可见。
我希望你能得到答案。我不是那个人,但会提出我 2 美分的建议...
短版
您不能让短信跳过 "send to" SIM 卡并自动转移到某台计算机。
制作一个 Android 应用程序安装在您的 phone 上,确保它的工作是检测新收件箱邮件的副本并将其转移到您的计算机。
为 SIM 卡使用 USB 适配器。插入计算机后,您将直接在计算机上接收消息,而无需 phone 参与。
长版
与其使用命令行工具,不如制作一个实际的应用程序(通过 Android SDK)来检查收到的消息并将一些数据转发给您(例如:通过电子邮件或套接字,或不管你喜欢什么)。 "some data" 也意味着消息本身的完整副本,或者只是发送 [in-app] 的反馈 消息分析(例如:检测到的图像数量、图像字节的十六进制打印输出等)。
看看 Android 的 SmsManager API 它甚至告诉你:
For information about how to behave as the default SMS app on Android 4.4 (API level 19) and higher, see Telephony.
另请参阅 API 关于此主题的 downloadMultimediaMessage command. It's doing what you need. Telephony page has the information and links to start, but independent blog articles and tutorials (one such example)。
无论如何,到你的 post...
(1)
"I just want to download the message to a file, without the phone processing it, as it could contain malware"
你认为 "without the phone processing it" 是怎样工作的? phone 持有您的运营商(通过服务中心)在从发件人自己的提供商的服务中心接收到消息后会将消息转发到的 sim。您和 curl
已退出此循环。只有当您的 SIM 卡收到短信并且 phone OS 提醒您时,您才会知道短信。
技术上 phone 已经处理了这条消息,只是您还没有打开它。
(2)
"How can I download the MMS file from shell command line or an external browser?"
您必须下载整个 mmssms.db
文件并从中提取特定消息。您像对待任何其他在线数据库一样对待 .db
(例如:使用 SQL/PHP 类型查询等)。
请参阅本教程以获取有用的建议:http://cheeky4n6monkey.blogspot.co.uk/2013/02/
未来传入消息的另一种方法是只获取一个 (USB) SIM 加密狗来接收您的卡。一旦插入计算机,它就可以 receive/send 消息,因为 SIM 卡在加密狗内 live/active(作为 phone 的代理)。
加密狗带有自己的软件(例如 image of such),用于管理网络连接和 read/write SMS/MMS 消息。这就像让 SIM 卡不在 phone 而是在桌面上工作。
我只是用了你的 附录 来让它工作,但不得不稍微改变它。
请注意,我是 运行 来自 linux 的,具有通过连接的 USB 调制解调器定义的 PPP
接口。显然,对于发送 MMS 推送的运营商,此执行的连接必须是“on net”。
curl --interface ppp0 -v -x 10.202.2.60:8080 --output mms.pdu http://pxt-get.vodafone.net.au:8080/mmsc?xxxxxxxxxxx
其中:
ppp0
是调制解调器连接定义的接口,并且:http://pxt-get.vodafone.net.au:8080/mmsc?xxxxxxxxxxx
URL 是在原始 MMS 推送通知中传递的,并且:10.202.2.60
是我的运营商给的彩信proxy,并且:8080
是我的运营商给我的彩信端口。
这会将彩信保存到文件 mms.pdu
。
配置文件:
/etc/ppp/options
:
debug
4000000
modem
crtscts
lock
connect /etc/ppp/net-connect
asyncmap 0
defaultroute
:
mtu 1400
/etc/ppp/net-chat
:
#!/bin/sh
/usr/sbin/chat -v -t 60 -f /etc/ppp/net-chat
/etc/ppp/net-connect
:
ABORT 'ERROR'
ABORT 'BUSY'
ABORT 'NO CARRIER'
'' AT
OK ATE0
OK AT+IPR=4000000
OK AT+CGDCONT=1,"IP","live.vodafone.com"
OK AT&S1
OK AT&F
OK AT&W
OK AT+CNMP=14
OK AT&W
OK ATE0
OK ATD*99***1#
CONNECT
最后连接,方法是:/usr/sbin/pppd /dev/ttyUSB3