有没有办法使用 curl 或 wget 从命令行下载彩信?

Is there a way to download an MMS from command line using curl or wget?

我正在对基于 MMS 的攻击进行一些 Android 恶意软件研究。我正在寻找一种手动方式来检索或下载收到的彩信。我希望找到一些 curlwget 行来做到这一点,但没有找到任何有用的东西。

到目前为止,我已经从内部数据库中获得了一些 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部分?

然后查看 MMSCProxyport 的消息设置,我想构建一个有效的 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 并安装了 busyboxsqlite3,也许还安装了 curlwget。 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 可以解释如下:

因此,使用代理(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