iMessage群发协议接触
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客户端自动发送信息。这样实现的群发的思路就很清楚了
iMessage协议初接触.最新升级版参考相关博文文章: https://www.cnblogs.com/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | 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, Flags=SecurityPermissionFlag.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; } } |
标签:
iMessage群发协议
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」