FLEX程序初始化及此解密过程
2010-03-02 16:33
447 查看
原文地址:
http://www.gridlinked.info/how-to-encrypt-flex-rsls/
这里截取并尝试翻译了一段FLEX程序初始化及此解密过程.
应用启动过程:
1. 首先, 为第1帧加载足够的数据.
2. Flash Player通过创建SystemManager实例执行加载数据.
3. SystemManager命令Flash Player停止在第一帧.
4. SystemManager创建Preloader,
通过它创建DownloadProgressBar控件并显示在客户界面上.
5. Preloader开始从FLEX SWF(或外部SWF)加载其余数据.
一旦FLEX框架及程序代码数据加载, System Manager跳到第2帧并初始化Application实例.
1) 所有的RSL及相关类现在已加载[到ApplicationDomain];
注意加载的顺序就是app编译时定义的顺序.
2) 所有应用程序使用的类定义(视图, 逻辑等)先加载到第2帧.
注意这里, 在第一帧的preloader代码甚至可以在FLEX框架类加载前, 安装补丁到其中.
3) 这种技术就被叫做”monkey-patching”, 会被用在后面提到的解密过程中.
6. 一旦Application实例创建, SystemManager设置
Application.systemManager指向自己,
之后你就可以访问SystemManager了.
7. Application在初始化处理开始前派发预初始化(preinitialize)事件.
8. Application继续创建内部实例.
application调用createChilden()方法.
这时每个应用的组件被构造并调用自己的createChilden()方法.
具体情况参考组件生命周期章节.
9. Application派发初始化(initialize)事件,
指明所有的组件已被初始化.当然, 此时所有的组件尚未布局.
10.最后,所有的子控件及容器被创建并设置大小及位置后,
Application就会派发creationComplete事件.
11.creationComplete事件派发后,
Preloader移除DownloadProgressBar 控件,
SystemManager将Application实例加到Flash Player的
显示列表中(Flash Player display list基本上是个树结构,
包含着可视及潜在可视对象,构成整个应用.
当向应用中添加或移除组件时,
基本上就是将它们从显示列表(display list)中添加或移除掉).
12.Application一旦添加到Flash Player显示列表中,
Application派发applicationComplete事件.
13.Application此时已被创建好并显示到屏幕上准备与用户交互了.
这种RSL的解密过程如下:
1.Flash Player加载已加密的RSL/SWF并同时派发RSLError事件;
这会停止预加载过程使程序”挂起”.
2.中断掉这个事件防止由于冒泡机制被其他监听器捕获;
这能有效的阻止加载序列中的其他RSL.
3.使用Nitro-LM,异步请求RSA解密密钥.
4.重新加载加密的RSL(清除已加载的SWF字节码).
5.解密数据.
6.将已经解密的数据加载到AVM中.
7.通知Preloade恢复加载其他等待的RSL.
很巧妙的一个方法
http://www.gridlinked.info/how-to-encrypt-flex-rsls/
这里截取并尝试翻译了一段FLEX程序初始化及此解密过程.
应用启动过程:
1. 首先, 为第1帧加载足够的数据.
2. Flash Player通过创建SystemManager实例执行加载数据.
3. SystemManager命令Flash Player停止在第一帧.
4. SystemManager创建Preloader,
通过它创建DownloadProgressBar控件并显示在客户界面上.
5. Preloader开始从FLEX SWF(或外部SWF)加载其余数据.
一旦FLEX框架及程序代码数据加载, System Manager跳到第2帧并初始化Application实例.
1) 所有的RSL及相关类现在已加载[到ApplicationDomain];
注意加载的顺序就是app编译时定义的顺序.
2) 所有应用程序使用的类定义(视图, 逻辑等)先加载到第2帧.
注意这里, 在第一帧的preloader代码甚至可以在FLEX框架类加载前, 安装补丁到其中.
3) 这种技术就被叫做”monkey-patching”, 会被用在后面提到的解密过程中.
6. 一旦Application实例创建, SystemManager设置
Application.systemManager指向自己,
之后你就可以访问SystemManager了.
7. Application在初始化处理开始前派发预初始化(preinitialize)事件.
8. Application继续创建内部实例.
application调用createChilden()方法.
这时每个应用的组件被构造并调用自己的createChilden()方法.
具体情况参考组件生命周期章节.
9. Application派发初始化(initialize)事件,
指明所有的组件已被初始化.当然, 此时所有的组件尚未布局.
10.最后,所有的子控件及容器被创建并设置大小及位置后,
Application就会派发creationComplete事件.
11.creationComplete事件派发后,
Preloader移除DownloadProgressBar 控件,
SystemManager将Application实例加到Flash Player的
显示列表中(Flash Player display list基本上是个树结构,
包含着可视及潜在可视对象,构成整个应用.
当向应用中添加或移除组件时,
基本上就是将它们从显示列表(display list)中添加或移除掉).
12.Application一旦添加到Flash Player显示列表中,
Application派发applicationComplete事件.
13.Application此时已被创建好并显示到屏幕上准备与用户交互了.
这种RSL的解密过程如下:
1.Flash Player加载已加密的RSL/SWF并同时派发RSLError事件;
这会停止预加载过程使程序”挂起”.
2.中断掉这个事件防止由于冒泡机制被其他监听器捕获;
这能有效的阻止加载序列中的其他RSL.
3.使用Nitro-LM,异步请求RSA解密密钥.
4.重新加载加密的RSL(清除已加载的SWF字节码).
5.解密数据.
6.将已经解密的数据加载到AVM中.
7.通知Preloade恢复加载其他等待的RSL.
很巧妙的一个方法
相关文章推荐
- 制作程序文档_主函数_静态代码块_对象的初始化过程_对象调用成员过程
- Java初始化顺序总结及其程序执行过程图- 静态变量、静态代码块、成员变量、构造函数
- Flex 程序的初始化顺序
- Discuz!NT代码阅读笔记(2)--网站安装自动化--论坛程序安装及初始化过程
- 深入浅出MFC学习笔记:MFC六大关键技术仿真之MFC程序的初始化过程
- Flex 程序的初始化顺序
- JAVA程序初始化的过程
- 深入浅出MFC学习笔记:MFC六大关键技术仿真之MFC程序的初始化过程
- java 程序加载过程---3--类中申明同时申明类的静态对象 创建类的实例 访问类的静态变量 调用类的静态方法 使用反射方法 初始化类的子类对象 直接使用java.exe 调用某个类
- flex程序初始化顺序
- RCP程序初始化过程
- MFC 解密(1) 窗口初始化过程
- 一个Java小程序,帮助理解Java继承中的初始化过程
- 基于ARM 的嵌入式系统程序开发要点-(二)系统的初始化过程
- 深入浅出MFC:MFC的程序的初始化过程
- MFC程序初始化过程
- Discuz!NT代码阅读笔记(2)--网站安装自动化--论坛程序安装及初始化过程
- 启动画面关闭后才显示主程序...在这过程中进行程序的初始化.
- Flex程序启动过程再探秘: (1)基础知识
- flex启动过程和初始化