草庐IT

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

coder 2023-07-20 原文

我正在针对基于 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部分?

然后查看 MMSC 的消息设置, Proxyport , 我想构建一个工作的 CLI 单行或浏览器请求,以下载文件以供检查。

在手机设置中我们可以通过以下方式找到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 命令行(或外部浏览器)下载 MMS 文件?

附言。显然手机已经 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.

此外,智能手机不再将彩信或短信内容下载到 SIM 卡中。 “功能”手机过去就是这样做的。


附录: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告诉消息处理器检索“事务 ID”给出的消息:Ae_xxxx_xxxxx-xxx`

因此,使用代理 (APN) 设置,并使用从消息数据库 (mmssms.db) 中提取的 URL,应该能够检索和下载 MMS 的内容,使用精心打造curl陈述。 也许是这样的:

# 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

第一个显然不能在电话环境之外工作,因为它指的是 C 类 IP,仅在移动分配的 IP 中可见。

最佳答案

我希望你能得到这个问题的答案。我不是那个人,但会提出我 2 美分的建议...

精简版

  • 您不能让短信跳过“发送到”SIM 卡并自动转移到某台计算机。

  • 制作一个 Android 应用程序安装在您的手机上,确保它的工作是检测新收件箱邮件的副本并将其转移到您的计算机。

  • 为 SIM 卡使用 USB 加密狗。插入计算机后,您将直接在计算机上接收消息,而无需使用手机。

长版

与命令行工具相比,您最好制作一个实际的应用程序(通过 Android SDK)来检查收到的消息并将一些数据转发给您(例如:通过电子邮件、套接字或您喜欢的任何方式)。 “一些数据”也意味着消息本身的完整副本,或者只是发送 [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命令。它正在做你需要的。 Telephony页面有开始的信息和链接,但也有关于该主题的独立博客文章和教程(例如 example)。

无论如何,到你的帖子...

(1)

"I just want to download the message to a file, without the phone processing it, as it could contain malware"

您如何想象“没有电话处理它”如何工作?在从发件人自己的提供商的服务中心收到消息后,手机会保存您的运营商(通过服务中心)将消息转发到的 sim 卡。你和 curl 不在这个循环中。只有当您的 SIM 卡收到短信并且手机操作系统会提醒您时,您才会知道该短信。

从技术上讲,手机已经处理了这条消息,只是您还没有打开它。

(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/

对于 future 收到的消息,另一种方法是获取一个 (USB) SIM 加密狗来接收您的卡。一旦插入计算机,它就可以接收/发送消息,因为 SIM 在加密狗内处于 Activity/Activity 状态(作为电话的代理)。

加密狗带有自己的软件(例如 image of such),用于管理网络连接和读/写 SMS/MMS 消息。这就像让 SIM 卡不在手机上而是在桌面上工作一样。

关于android - 有没有办法使用 curl 或 wget 从命令行下载彩信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44117466/

有关android - 有没有办法使用 curl 或 wget 从命令行下载彩信?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  9. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  10. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

随机推荐