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程序保护过少,如果编译器直接提供一些混淆选项,在编译的时候直接给混淆了那就方便得多。


  • 相关阅读:
    C++ 获取图片文件信息
    java中redis的分布式锁工具类
    java中的redis工具类
    mysql中的sql查询优化
    利用Linux中的crontab实现分布式项目定时任务
    MYSQL的REPLACE和ON DUPLICATE KEY UPDATE使用
    redis学习三,Redis主从复制和哨兵模式
    redis学习五,redis集群搭建及添加主从节点
    String 转化成java.sql.Date和java.sql.Time
    SpringMVC配置双数据源,一个java项目同时连接两个数据库
  • 原文地址:https://www.cnblogs.com/TianFang/p/2750224.html
Copyright © 2011-2022 走看看