资讯动态

苹果推信系统的iMessage协议的分析

发布时间:2026/10/24 15:03:35 来源:尧图企业网站定制
Apple公司全线在mac os与ios两个操作系统上内置了FaceTime与iMessage两个应用。完美替代运营商的短信与电话。并且FaceTime与iMessage的帐号不仅仅与Apple ID 绑定同时也与使用这Apple ID的手机号码绑定这样的漏洞自然给无孔不入的群发垃圾信息商们提供了后门。研究怎么实现iMessage群发先是从XMPP协议开始的因为Apple MAC os上的ichat是XMPP客户端可以连接iMessage服务器同时也可连接gtalk与weibo私信。但后面发现iMessage的服务器验证是加密没办法实现非ichat XMPP客户端连接iMeesage服务器那就自然没办法实现程序控制往iMeesage服务器批量发送信息。只能通过MAC OS或者iOS自带的程序往iMeesage服务器发送信息那要实现群发自然只能想办法去调用自带的这ichat客户端在MAC OS系统上Apple公司提供一种叫Apple script的脚本来自动实现任务。可通过tell application Messages就可以激活iMessage客户端自动发送信息。 参考文章: https://blog.csdn.net/* * Des:iMessage自动发信协议 */ public class MyProxy : RealProxy { String myURIString; MarshalByRefObject myMarshalByRefObject; [PermissionSet(SecurityAction.LinkDemand)] public MyProxy(Type myType) : base(myType) { // RealProxy uses the Type to generate a transparent proxy. myMarshalByRefObject (MarshalByRefObject)Activator.CreateInstance((myType)); // Get ObjRef, for transmission serialization between application domains. ObjRef myObjRef RemotingServices.Marshal(myMarshalByRefObject); // Get the URI property of ObjRef and store it. myURIString myObjRef.URI; Console.WriteLine(URI :{0}, myObjRef.URI); } [SecurityPermissionAttribute(SecurityAction.LinkDemand, FlagsSecurityPermissionFlag.Infrastructure)] public override IMessage Invoke(IMessage myIMessage) { Console.WriteLine(MyProxy.Invoke Start); Console.WriteLine(); if (myIMessage is IMethodCallMessage) Console.WriteLine(IMethodCallMessage); if (myIMessage is IMethodReturnMessage) Console.WriteLine(IMethodReturnMessage); Type msgType myIMessage.GetType(); Console.WriteLine(Message Type: {0}, msgType.ToString()); Console.WriteLine(Message Properties); IDictionary myIDictionary myIMessage.Properties; // Set the __Uri property of IMessage to URI property of ObjRef. myIDictionary[__Uri] myURIString; IDictionaryEnumerator myIDictionaryEnumerator (IDictionaryEnumerator) myIDictionary.GetEnumerator(); while (myIDictionaryEnumerator.MoveNext()) { Object myKey myIDictionaryEnumerator.Key; String myKeyName myKey.ToString(); Object myValue myIDictionaryEnumerator.Value; Console.WriteLine(\t{0} : {1}, myKeyName, myIDictionaryEnumerator.Value); if (myKeyName __Args) { Object[] myObjectArray (Object[])myValue; for (int aIndex 0; aIndex myObjectArray.Length; aIndex) Console.WriteLine(\t\targ: {0} myValue: {1}, aIndex, myObjectArray[aIndex]); } if ((myKeyName __MethodSignature) (null ! myValue)) { Object[] myObjectArray (Object[])myValue; for (int aIndex 0; aIndex myObjectArray.Length; aIndex) Console.WriteLine(\t\targ: {0} myValue: {1}, aIndex, myObjectArray[aIndex]); } } IMessage myReturnMessage; myIDictionary[__Uri] myURIString; Console.WriteLine(__Uri {0}, myIDictionary[__Uri]); Console.WriteLine(ChannelServices.SyncDispatchMessage); myReturnMessage ChannelServices.SyncDispatchMessage(myIMessage); // Push return value and OUT parameters back onto stack. IMethodReturnMessage myMethodReturnMessage (IMethodReturnMessage) myReturnMessage; Console.WriteLine(IMethodReturnMessage.ReturnValue: {0}, myMethodReturnMessage.ReturnValue); Console.WriteLine(MyProxy.Invoke - Finish); return myReturnMessage; } }

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑