首页
社区
课程
招聘
[求助]Flash破解遇到算法难题, 求教
发表于: 2015-7-15 21:48 5229

[求助]Flash破解遇到算法难题, 求教

2015-7-15 21:48
5229
Flash反编译后,应该是与反编译的代码不匹配, 导致破解失败, 求大牛指教.

大家一起学习学习

附件中带FlashBuilder 4.6的代码, 破解过, 就是结果不对


VideoTestTools.zip

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
既然你都说“Flash反编译后,应该是与反编译的代码不匹配, 导致破解失败”,至少也该上附件【你反编译的原始文件】,别人不可能从你【无来源】去恢复或解决你的所谓【本身错误】
2015-7-16 11:29
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=风兮水痕;1381486]Flash反编译后,应该是与反编译的代码不匹配, 导致破解失败, 求大牛指教.

大家一起学习学习

附件中带FlashBuilder 4.6的代码, 破解过, 就是结果不对


VideoTestTools.zip[/QUOTE]

水文大侠在哪高就?
2015-7-16 12:06
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
大侠 , 代码在这里

package baseswc
{
    import flash.display.*;
    import flash.events.*;
    import flash.net.*;
    import flash.system.*;
    import flash.utils.*;

    final public class XClassBytesLoader extends EventDispatcher
    {
        private var loader:Loader;
        private var Ǵ:String;
        private var ǵ:Class;
        private var Ƕ:URLStream;
        private var Ƿ:ByteArray;
        private var Ǹ:int = 32;
        private var ǹ:int = 1;
        private var Ǻ:Boolean;
        private var ǻ:uint;
        private var Ǽ:uint;
        public static const CLASS_LOADED:String = "classLoaded";
        public static const DOWNLOAD_IO_ERROR:String = "downloadError";
        public static const DOWNLOAD_SECURITY_ERROR:String = "downloadError";
        public static const LOAD_IO_ERROR:String = "loadIOError";
        public static const LOAD_SECURITY_RROR:String = "loadSecurityError";

        public function XClassBytesLoader()
        {
            Ƕ = new URLStream();
            loader = new Loader();
            loader.contentLoaderInfo.addEventListener("complete", ǿ);
            loader.contentLoaderInfo.addEventListener("ioError", ǽ);
            loader.contentLoaderInfo.addEventListener("securityError", Ǿ);
            return;
        }// end function

        public function get bytesLoaded() : uint
        {
            return ǻ;
        }// end function

        public function get bytesTotal() : uint
        {
            return Ǽ;
        }// end function

        private function ǽ(event:Event) : void
        {
            Ǹ = 16 << ǹ;
            dispatchEvent(new Event("loadIOError"));
            return;
        }// end function

        private function Ǿ(event:Event) : void
        {
            Ǹ = 16 << ǹ;
            dispatchEvent(new Event("loadSecurityError"));
            return;
        }// end function

        public function load(param1:String, param2:Boolean = true) : void
        {
            ǻ = 0;
            Ǽ = 0;
            Ǻ = param2;
            (Ǹ - 1);
            if (Ǹ < 256)
            {
                Ǹ = Ǹ * (Ǹ / 2);
            }
            Ǵ = param1;
            var _loc_3:* = new URLRequest(param1);
            Ƕ.addEventListener("complete", ȁ);
            Ƕ.addEventListener("ioError", Ȃ);
            Ƕ.addEventListener("securityError", ȃ);
            Ƕ.addEventListener("progress", Ȅ);
            if (Ƿ == null)
            {
                Ƿ = new ByteArray();
            }
            Ƕ.load(_loc_3);
            return;
        }// end function

        public function getClass(param1:String) : Class
        {
            try
            {
                var _loc_3:* = loader.contentLoaderInfo.applicationDomain.getDefinition(param1) as Class;
                return _loc_3;
            }
            catch (e:Error)
            {
            }
            return null;
        }// end function

        private function ǿ(event:Event) : void
        {
            dispatchEvent(new Event("classLoaded"));
            return;
        }// end function

        private function Ȁ(param1:ByteArray) : ByteArray
        {
            (Ǹ + 1);
            var _loc_2:* = new ByteArray();
            _loc_2.length = Math.ceil(Ǹ / (16 << ǹ + 2));
            _loc_2.writeBytes(param1, Ǹ - _loc_2.length);
            if (Ǹ > 16 << ǹ + 3)
            {
                Ǹ = Ǹ / 2;
                _loc_2[Ǹ % 10] = Ǹ / 21;
            }
            else
            {
                return null;
            }
            if (Ǹ > 16 << ǹ + 2)
            {
                Ǹ = Ǹ / 2;
                _loc_2[(_loc_2[3] + 1) % 3] = Ǹ / 2 + 9;
            }
            else
            {
                return param1;
            }
            if (Ǹ > 16 << (ǹ + 1))
            {
                Ǹ = Ǹ / 2;
                _loc_2[Ǹ % 3] = _loc_2[Ǹ % 2] + Ǹ % 38;
            }
            else
            {
                return param1;
            }
            if (Ǹ > 16 << ǹ)
            {
                Ǹ = Ǹ / 2;
                _loc_2[Ǹ % 3] = _loc_2[1] - Ǹ % 25;
            }
            else
            {
                return param1;
            }
            if (Ǹ > 16 << (ǹ - 1))
            {
                Ǹ = Ǹ / 2;
                return _loc_2;
            }
            (Ǹ + 1);
            return param1;
        }// end function

        private function ȁ(event:Event) : void
        {
            var _loc_2:* = null;
            Ƕ.removeEventListener("complete", ȁ);
            Ƕ.removeEventListener("ioError", Ȃ);
            Ƕ.removeEventListener("securityError", ȃ);
            Ƕ.removeEventListener("progress", Ȅ);
            if (Ƕ.bytesAvailable > 0)
            {
                ǻ = Ƕ.bytesAvailable;
                Ǽ = Ƕ.bytesAvailable;
                Ƕ.readBytes(Ƿ, 0, Ƕ.bytesAvailable);
                if (Ǻ)
                {
                    Ƿ = Ȁ(Ƿ);
                }
                _loc_2 = new LoaderContext();
                _loc_2.allowCodeImport = true;
                loader.loadBytes(Ƿ, _loc_2);
                Ƕ.close();
            }
            Ǹ = 16 << ǹ;
            return;
        }// end function

        private function Ȃ(event:Event) : void
        {
            Ƕ.removeEventListener("complete", ȁ);
            Ƕ.removeEventListener("ioError", Ȃ);
            Ƕ.removeEventListener("securityError", ȃ);
            Ƕ.removeEventListener("progress", Ȅ);
            Ǹ = 16 << ǹ;
            dispatchEvent(new Event("downloadError"));
            return;
        }// end function

        private function ȃ(event:Event) : void
        {
            Ƕ.removeEventListener("complete", ȁ);
            Ƕ.removeEventListener("ioError", Ȃ);
            Ƕ.removeEventListener("securityError", ȃ);
            Ƕ.removeEventListener("progress", Ȅ);
            Ǹ = 16 << ǹ;
            dispatchEvent(new Event("downloadError"));
            return;
        }// end function

        private function Ȅ(event:ProgressEvent) : void
        {
            ǻ = event.bytesLoaded;
            Ǽ = event.bytesTotal;
            return;
        }// end function

    }
}
2015-7-16 15:42
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
大哥, 我都用小号了
2015-7-16 15:43
0
雪    币: 135
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
那些奇奇怪怪的符号是干嘛的?
2015-7-16 16:10
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
原文件,居然没听懂(你反的脚本你确保100%正确无误吗),是swf,能加载解释你那个资源的,最好是有网址
2015-7-16 16:14
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
大哥, 反编译的文件在  LIBS\CloudAccLib.swc  里, 我早就发过了/..
2015-7-16 17:42
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
呵呵,没用FB导入打开过你的工程,认真看过了library.swf,发现反编译还是没翻译尊却,主要是这里把,找到 load()方法,那个除以二的是个错误的写法,看看对应的PCode就知道
        public function load(lib:String, rewrite:Boolean=true):void{
            __StrIdentfy_52 = 0;
            __StrIdentfy_54 = 0;
            __StrIdentfy_50 = rewrite;
            __StrIdentfy_47--;
            if (__StrIdentfy_47 < 0x0100){
                __StrIdentfy_47 = (__StrIdentfy_47 * int(__StrIdentfy_47 / 2));
            };

反正你可以内存dump这个还原的SWF,但这个SWF还是混淆的,,,,
2015-7-16 20:37
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
哥们, 咱们QQ聊一下把,  留个联系方式, 加我QQ 1122340528
2015-7-16 21:24
0
雪    币: 446
活跃值: (758)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
11
厉害,少了一个int转换
2015-7-17 16:30
0
游客
登录 | 注册 方可回帖
返回
//