zoukankan      html  css  js  c++  java
  • 异步函数带来的另一好处—不用混淆代码了?

    今天本来打算看下微软是否对WinRT程序提供了保护措施的,结果比较失望:XAML和程序都没有任何保护措施,导致XAML能被修改,代码容易被反编译。看来官方是不会提供额外的保护功能了,发布前仍然需要使用混淆器。

    不过在反编译程序的时候发现了一个异步函数带来的一个好处:目前的反编译器大都无法较好的反编译异步程序

    这个是我以前的blog中贴出来的一个程序,原始代码如下:

        public static async Task<StorageFile> GetPackagedFileAsync(string fileName)
        {
            StorageFolder installFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
            return await installFolder.GetFileAsync(fileName);
        }

    它反编译后的结果如下:

        [DebuggerStepThrough, AsyncStateMachine(typeof(Utility.<GetPackagedFileAsync>d__16))]
        public static Task<StorageFile> GetPackagedFileAsync(string fileName)
        {
        
        Utility.<GetPackagedFileAsync>d__16 <GetPackagedFileAsync>d__;
            <GetPackagedFileAsync>d__.fileName = fileName;
        
        <GetPackagedFileAsync>d__.<>t__builder = AsyncTaskMethodBuilder<StorageFile>.Create();
        
        <GetPackagedFileAsync>d__.<>1__state = -1;
            AsyncTaskMethodBuilder<StorageFile> <>t__builder = <GetPackagedFileAsync>d__.<>t__builder;
            <>t__builder.Start<Utility.<GetPackagedFileAsync>d__16>(ref <GetPackagedFileAsync>d__);
        
        return <GetPackagedFileAsync>d__.<>t__builder.Task;
        }

    从反编译后的结果基本上是看不出来原始代码结构的。原因很简单:async是一个语法糖,编译器在后台生成了许多额外代码的。而反编译工具分析的时候将那些额外代码给一并反编译出来了,却无法还原回这个语法糖。具体原理可以参看这篇文章:Understanding async code with .NET Reflector

    就目前来看,使用了async的异步函数天然带混淆功能的。而WinRT程序大量使用了异步函数,某种程度上具有一定的自混淆功能。当然,不排除后期反编译工具升级,把编译器对async的处理方式分析清后也能还原这个语法糖。其实Reflector已经在做这件事情了:Building and testing Async support in Reflector

    这里不禁要对微软进行一下抱怨:对.Net程序保护过少,如果编译器直接提供一些混淆选项,在编译的时候直接给混淆了那就方便得多。


  • 相关阅读:
    HDU1813:Escape from Tetris(IDA)
    开发汉澳sinox64位,对接汉澳矩阵电脑
    新博客有了,文章转移到 http://www.iosxxx.com/
    Linux内核之于红黑树and AVL树
    MySQL用户及数据安全专题
    实现Android操作系统11种传感器介绍
    NSSCanner 提取 指定 字符串
    [置顶] 正则表达式应用:匹配IP地址
    某APK中使用了动态注册BroadcastReceiver,Launcher中动态加载此APK出现java.lang.SecurityException异常的解决方法
    JSTL解析——003——core标签库02
  • 原文地址:https://www.cnblogs.com/TianFang/p/2750224.html
Copyright © 2011-2022 走看看