三国魂破解1——resmask.swf

这个是资源文件的映射。

根据index.swf的加载流程,直到初始化会加载:

 

破解方式:

1
2
3
4
5
6
7
8
9
10
11
12
var l:URLLoader = new URLLoader();
l.dataFormat = URLLoaderDataFormat.BINARY;
l.addEventListener(Event.COMPLETE, function(e:*):void{
    var data:ByteArray = l.data;
    data.uncompress();
    var byteObj = unCompress(data, _resEncryptKey);
    data = byteObj.bytes;
    data.position = 0;
    data.uncompress();
    trace(data.readUTFBytes(data.length));
});
l.load(new URLRequest('../resmark.swf'));

其中:unCompress的方法:

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
public static function unCompress(param1:ByteArray, param2:String) : Object
{
    var _loc_3:Number = NaN;
    var _loc_4:* = new ByteArray();
    var _loc_5:String = "";
    var _loc_6:String = "";
    param1.position = param1.length - 1;
    var _loc_7:String = "";
    var _loc_8:* = param2.length - 1;
    while (_loc_8 > -1)
    {
         
        if (_loc_7 == "")
        {
            _loc_7 = param2.substr(_loc_8, 1);
        }
        else
        {
            _loc_7 = param2.substr(_loc_8, 1) + _loc_7;
        }
        _loc_8 = _loc_8 - 1;
    }
    _loc_3 = param1.length - param2.length - 1;
    var _loc_9:Number = 0;
    var _loc_10:* = new ByteArray();
    var _loc_11:int = 0;
    while (_loc_11 <= _loc_3 - 2)
    {
         
        if (_loc_9 >= _loc_7.length)
        {
            _loc_9 = 0;
        }
        _loc_10.writeByte(param1[_loc_11] - _loc_7.charCodeAt(_loc_9));
        _loc_11++;
        _loc_9 = _loc_9 + 1;
    }
    var _loc_12:* = new Object();
    _loc_12.bytes = _loc_10;
    return _loc_12;
}// end function


至于加密的key,就不说了。会被跨省。 解压出来大概内容:

 

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
<resmark>
 
    <!-- 游戏资源标识系列信息 -->
 
    <!-- 如设参数isAbsoluteURL: 是否绝对路径 主要是方便以后策划更新数值后,设置不同路径的调试 -->
 
    <!-- 加密类型:encryptType 无此参数 或值为0,则没有加密,根据后缀相应加载,1为XML文件类型加密,2为SWF类型加密,3为图片类型加密,4为纯二进制文件 -->
 
    <!-- 公共域Id: domainId:
 
        1 (公共资源),2(角色动作),
 
        3: 其它模块,角色创建(1000),
 
        4:怪物、NPC动作,
 
        9:副本
 
        10(战斗模块),
 
        11(log面板) -->
 
    <!-- 隐式加载添加优先级priority: <0(不需要进行隐式加载) >=0(按照优先级进行隐式加载)-->
 
    <!-- 是否本地储存对象:isSharedObject 1 为本地储存对象 -->
 
    <!-- 动作模型:角色或怪物跑及站立动作与战斗动作(攻击、受击、战斗待机)分开,但程序最终以跑和站立动作Id为准,战斗动作需加入动作Id源参数:sourceResId= 跑和站立动作Id,程序会自动合并至同一动作对象  -->
 
    

  

 

posted @     阅读(683)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
IT民工
点击右上角即可分享
微信分享提示