title author date CreateTime categories
C#判断文件是否被混淆
lindexi
2019-09-02 12:57:37 +0800
2018-2-13 17:23:3 +0800
C#

可以使用混淆工具对一个DLL 和 exe 进行混淆。
但是如何知道一个文件是否已经混淆了。
在发布之前,需要知道是不是有文件忘了混淆。

要判断文件是否混淆,必须知道常用的混淆手法。

混淆就是因为编写的 C# 代码转换 IL ,可以很容易被反编译,从而知道了源代码,不利于保护软件,不利于防止破解。

所以可以通过混淆来让反编译困难。

但是经过混淆,只可以让好多反编译新手无法破解,对于大神,还是没有作用。

但是本文不讨论这个,还是来说下,常用的混淆。

  • 混淆变量名

  • 混淆流程

常见的也是混淆变量名,这也是本文的检测方法,对于混淆流程,暂时还没有方法。

简单方法去获得文件是否混淆变量名是反射。

可以通过加载文件,使用动态加载 DLL,然后使用反射判断文件变量名是否存在不可读字符,如果存在,那么文件被混淆。

代码:

    class ApplicationProxy : MarshalByRefObject
{
private static readonly string[] ConfuseNameCharacteristics =
{
"\u0001",
"\u0002",
"\u0003",
"\u0004",
"\u0005",
"\u0006",
"\u0007",
"\u0008",
"\u0009",
"\u0010",
"\u0011",
"\u0012",
"\u0013",
"\u0014",
"\u0015",
"\u0016",
"\u0017",
"\u0018",
"\u0019"
}; /// <summary>
/// 判断一个文件是否混淆
/// </summary>
/// <param name="file">文件是exe dll</param>
/// <returns></returns>
public ConfuseType CheckFileConfuse(FileInfo file)
{
try
{
var assembly = Assembly.LoadFile(file.FullName);
var types = assembly.GetTypes();
if (
types.Any(
type => ConfuseNameCharacteristics.Any(ch => type.FullName.Contains(ch) || PeeConfuseType(type))))
return ConfuseType.Confused;
return ConfuseType.NotConfused;
}
catch (ReflectionTypeLoadException)
{
return ConfuseType.NotSupported;
}
catch (Exception e)
{
if (e is BadImageFormatException || e is FileLoadException)
return ConfuseType.NotSupported;
throw;
}
} /// <summary>
/// 判断type的方法是否有混淆
/// </summary>
/// <param name="type"></param>
private bool PeeConfuseType(Type type)
{
return ConfuseNameCharacteristics.Any(temp => type.GetFields().Any(field => field.Name.Contains(temp))) ||
ConfuseNameCharacteristics.Any(
temp => type.GetProperties().Any(property => property.Name.Contains(temp))) ||
ConfuseNameCharacteristics.Any(temp => type.GetMethods().Any(method => method.Name.Contains(temp)));
}
}

最新文章

  1. 离线pip下载Python包
  2. 在Ubuntu上安装LAMP服务器
  3. android自定义activity
  4. unique函数的作用
  5. 学Lua(上)
  6. PB导出规定格式DBF文件
  7. Servlet的优化.GenericServlet
  8. 2、ABPZero系列教程之拼多多卖家工具 更改数据库为Mysql
  9. [Abp 源码分析]十五、自动审计记录
  10. Java——代码复用(组合和继承)
  11. 工具 docker
  12. 即时消息服务框架(iMSF)应用实例之分布式事务三阶段提交协议的实现
  13. [OpenCV] IplImage and Operation
  14. 新手C#int.Parse、int.TryParse的学习2018.08.04
  15. WEB 项目中JAVA取得WEBROOT物理路径
  16. (转)zero copy原理
  17. 记录--java获取网络资源(图片、音频等)保存本地
  18. Zabbix3.0安装与部署(centos7)
  19. CodeForces 384E Propagating tree (线段树+dfs)
  20. Windows WMIC命令使用详解2

热门文章

  1. HTML和css简单日常总结
  2. WebLogic使用总结(二)——WebLogic卸载[转]
  3. 微信小程序chooseImage(从本地相册选择图片或使用相机拍照)
  4. Python数据挖掘之决策树DTC数据分析及鸢尾数据集分析
  5. PHP-property_exists()函数
  6. PAT甲级——A1008 Elevator
  7. Python学习day40-并发编程(终)
  8. python print输出format太好用了
  9. 2.Spring【DI】XML方式
  10. mac上安装软件后,桌面上软件的图标如何去掉?