在处理Database2Sharp混淆的时候,经常会出现一些莫名奇妙的错误,而没有混淆的程序是正常的,开始基本上定位在反射方面的原因,因为反射经过混淆的程序集,可能会出现问题。

由于我是使用dotfuscator来进行混淆的,正常混淆很多没有使用反射操作的程序,一般都是没有问题的,因此偶尔出现问题的时候,就晚上找找看看有没有这方面的介绍文章。
看到一篇文章介绍了这方面的原因:http://www.cnblogs.com/jeffreytan/archive/2004/11/11/62724.html。
虽然是介绍了了dotfuscator的原理知识,但是作者把由于dotfuscator导致应用反射操作出现的问题,阐述的还是比较清楚了,按照其操作,果然解决了原来在dotfuscator出现的问题。
Dotfuscator里面是可以设置将哪些符号改名的。默认情况下,它会将assembly里面的所有符号都改名,你可以在Dotfuscator的"Rename"选项卡处设定你所想要禁止Rename的符号,具体使用方法请参考Dotfuscator的帮助文档。
    如果你使用默认设置Rename所有的符号,这会导致外面想要使用此assembly的代码出问题,可以证明如下:
我的工程里面有一个公有的方法
public void testmethod()
{
 MessageBox.Show("testmethod");
}
将其生成的assembly使用Dotfuscator改变后。如果你使用以下Reflection代码调用原来assembly里面的testmethod方法,你将会成功,但是如果调用混淆后的assembly,你将会得到异常。
还有这段是说明如何解决问题的
在混淆前,你的Assembly将会执行成功。在混淆后(注意,使用默认设置,将public的方法也混淆掉),你点击Button1你将会得到运行时的UnhandledException,内部就是System.ArgumentNullException: Value cannot be null.
这个证明代码中的"reflectiontest.Form1"和"testmethod"并没有被混淆掉。

对于在VS.net IDE里面添加对这个Assembly的引用,它基本跟Reflection没有什么区别,只不过一个是在运行时动态绑定类型信息和调用,而另一个是在设计时就从Assembly里面调用提取了类型信息。Assembly的类型信息是存放在Metadata里面的,这两种方式都需要提取Metadata的信息,所以在IDE里面添加公有类名,命名空间名被混淆过的Assembly是会失败的,你可以将一个默认混淆过的Assembly添加到Toolbar中试试。但是,你可以控制Dotfuscator保留所有的公有符号不混淆,这样你的Assembly就可以正常添加,而不会出问题。具体,你可以这样保留不混淆Public符号:

在Rename选项卡里面点击"Add Type",然后Name写上"*",然后在右边的Spec列表框中选择"+Public"。

由于我使用了反射构建不同的数据库加载类,如SqlServer、Oracle、MySql的,因此要根据不同加载不同的程序集信息,但是很奇怪,SqlServer的类加载成功,可以列出数据库信息,而Oracle的类确加载不了,获取不到所需的信息。
如混淆,那么列出Oracle数据库的时候,是一片空白,跟踪代码,发现反射构建程序对象的时候有问题。
我的反射加载代码如下:
            try
            {
                DatabaseSetting[] settings = DatabaseConfig.ReadSettings();
                foreach (DatabaseSetting db in settings)
                {
                    if (databaseType == db.DatabaseType)
                    {
                        objType = Assembly.Load(db.AssemblyName).CreateInstance(db.AssemblyType);
                        listDataInstance = objType as IListData;
                        if (listDataInstance != null)
                        {
                            listDataInstance.ConnectString = db.ConnectString;
                        }
                        break;
                    }
                }
            }
            catch (FileNotFoundException nfe)
            {
                log.Error(nfe);
                throw;
            }
根据上面作者提到的操作,在Rename选项卡里面点击"Add Type",然后Name写上"*",然后在右边的Spec列表框中选择"+Public"。
测试,果然OK,问题解决了,获取到的数据库信息如下所示。
希望对也使用Dotfuscator来混淆程序,碰到相同问题的朋友有帮助。

Database2Sharp混淆处理之经验分享(国庆专辑,祝福我们的祖国)相关推荐

  1. 一人之力,刷爆三路榜单!信息抽取竞赛夺冠经验分享

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达文 | JayLou娄杰 在现如今的NLP竞赛中,信息抽取(IE)任务已占据半壁江山.来 ...

  2. 工作三年的Android程序员 跳槽到“阿里“的面试经验分享

    前言 工作三年,你可能会迷茫,要么觉得自己怀才不遇,要么觉得自己迷失方向,也可能觉得自己意气风发,不管怎么样,自己已经开始思考自己的人生了,事实上,很多工作三年的人就第一次做出了自己的选择,也就是换一 ...

  3. 【面试招聘】有哪些好的秋招经验分享?数据、算法岗的几点经验分享

    作者:Datawhale优秀回答者 目录 有哪些好的秋招经验分享? 机器学习中常用的最优化方法有哪些? 想通过数据竞赛来提升实践能力,作为小白有什么入门经验?(今日问题) 有哪些好的秋招经验分享? 1 ...

  4. 2023级安全岗面试题及面试经验分享

    写在前面 个人强烈感觉面试因人而异,对于简历上有具体项目经历的同学,个人感觉面试官会着重让你介绍自己的项目,包括但不限于介绍一次真实攻防/渗透/挖洞/CTF/代码审计的经历 => 因此对于自己的 ...

  5. 数据科学竞赛经验分享:你从未见过的究极进化秘笈

    作者: David K(来自知乎) 排版:杰少,kaggle竞赛宝典小编 "听过很多道理,却依然过不好一生:看过很多分享,却依然做不好比赛." 如今,数据科学竞赛(大数据竞赛,机器 ...

  6. [Web端接入经验分享] 腾讯云即时通信TIM、实时音视频TRTC

    [Web端接入经验分享] 腾讯云即时通信TIM.实时音视频TRTC 即时通信TIM官网地址 即时通信TIM SDK API文档地址 实时音视频TRTC官网地址 实时音视频TRTC SDK API文档地 ...

  7. 转型经验分享|作为传统汽车工程师,我如何转型去阿里做无人驾驶?

    编者按: 以下这篇文章,其实是笔者2018年初发表在<业界良新>上的三篇转型文章的合集.这次重新汇总呈现给大家,一方面是给传统汽车产业需要转型的朋友做个转型参考,另一方面,也是给接下来的两 ...

  8. 一个画板十年工程师的PCB设计经验分享

    一个画板十年工程师的PCB设计经验分享 一个画板十年工程师的PCB设计经验分享_手机搜狐网 一般PCB基本设计流程如下:前期准备->PCB结构设计->PCB布局->布线->布线 ...

  9. 【网络安全面经】2023届网络安全岗秋招面试题及面试经验分享

    随着国家政策的扶持,网络安全行业也越来越为大众所熟知,相应的想要进入到网络安全行业的人也越来越多,为了更好地进行工作,除了学好网络安全知识外,还要应对企业的面试. 所以在这里我归总了一些网络安全方面的 ...

最新文章

  1. ViewPager单页显示3个item
  2. python教程书籍推荐-买Python入门书籍,我推荐这一本
  3. 跨域请求之JSONP
  4. typescript ajax,TypeScript的应用方式
  5. 2018\National _Java_A\1.三角形面积
  6. C#利用SQLDMO备份与还原数据库
  7. python for net_转:.NET 4.0 下使用 Python for .NET
  8. 牛客网【每日一题】5月27日题目精讲 货币系统
  9. MySQL last_insert_id()函数
  10. Unix/Linux环境C编程入门教程(27) 内存那些事儿
  11. 两位动态数码管电子秒表c语言,清翔电子51单片机6课动态显示数码管作业秒表...
  12. python的selenium模块_python-爬虫-selenium模块
  13. ASE V15.7下载地址
  14. 1块钱的路由器,10亿美金的小米网络
  15. 实用好看的个人主页官方源码
  16. PiscisOS开发笔记_1_PiscisOS的诞生和系统特性简介
  17. 教师计算机基础知识考试,教师计算机基础知识考核方案.doc
  18. EMC Navisphere AGENT(NAVIAGENT) 安装日志
  19. 教育行业数据可视化应用方案与实践
  20. VMware-虚拟机-Linux系统

热门文章

  1. google play 此应用使用的结算功能版本已不能受支持。
  2. 学习笔记:UDP实现进程心跳检测
  3. 计算机窗口的大小是什么单位,电脑软件窗口大小调整
  4. 牛客网项目——前置技术(八):Kafka
  5. 【超简单实用教程】mkv、flv格式转mp4格式(附网盘资源)
  6. 攒机需要注意的8条技巧 转太平洋网
  7. oracle佣金高于薪金60%,oracle的SQL练习题
  8. 接口技术实验三、响铃程序
  9. matlab中使用ode方法解范德波尔微分方程的数值解
  10. 卖家中心html素材,天猫素材中心入口和使用方法