CTF dotNet逆向分析

题目来源http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=36

.NET逆向第一题 
嗯,看名字就应该明白了,快去下载吧!

http://pan.baidu.com/s/1bnvVbp9

下载后是一个DotNetCrackMe1.exe文件。


分析

逆向分析的基础问题,可以参考以下资源列表
豆瓣逆向分析基础总结:https://www.douban.com/note/214872071/
看雪逆向精华区:http://bbs.pediy.com/forumdisplay.php?viewgoodnees=1&f=4&prefixid=phpforce_20
看雪破解精华区:http://bbs.pediy.com/forumdisplay.php?viewgoodnees=1&f=37下面从头讲讲这个小题的解决思路:
1.安装.net4.0、ILSPY2.3 or 更高版本
2.用ILSPY2.3打开DotNetCrackMe1.exe

这里写图片描述

3.展开DotNetCrackMe1,看到这个.net程序很简单,就一个WindowsFormsApplication1,里面就一个Form1,Form1下有button1_click方法,其中的判断语句    
 if ("fOCPTVF0diO+B0IMXntkPoRJDUj5CCsT" == this.Encode(this.textBox1.get_Text()))   
  • 1
  • 1
意味着它提交一个用户输入值进行Encode(),然后判断是否与"fOCPTVF0diO+B0IMXntkPoRJDUj5CCsT"相同,若相同后就“OK"了。

这里写图片描述

 4.再看一下Encode()函数,可以看出来是一个DES加密过程,最后又进行了base64的编码。
public string Encode(string data)
{string result;try{byte[] bytes = Encoding.get_ASCII().GetBytes("wctf{wol");byte[] bytes2 = Encoding.get_ASCII().GetBytes("dy_crack}");DESCryptoServiceProvider dESCryptoServiceProvider = new     DESCryptoServiceProvider();int keySize = dESCryptoServiceProvider.get_KeySize();MemoryStream memoryStream = new MemoryStream();CryptoStream cryptoStream = new CryptoStream(memoryStream, dESCryptoServiceProvider.CreateEncryptor(bytes, bytes2), 1);StreamWriter streamWriter = new StreamWriter(cryptoStream);streamWriter.Write(data);streamWriter.Flush();cryptoStream.FlushFinalBlock();streamWriter.Flush();result = Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.get_Length());}catch{result = "http://weibo.com/woldy";}return result;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
5.那么解决过程显然是根据上面的编码进行解码。网上已经有人解决了,我转载一下:
来源:http://blog.csdn.net/u010379510/article/details/44496995
public string Decode(string data)  
{  string result;  byte[] byte1;  try  {  byte1 = Convert.FromBase64String("fOCPTVF0diO+B0IMXntkPoRJDUj5CCsT");  byte[] bytes = Encoding.ASCII.GetBytes("wctf{wol");  byte[] bytes2 = Encoding.ASCII.GetBytes("dy_crack}");  DESCryptoServiceProvider dESCryptoServiceProvider = new DESCryptoServiceProvider();  MemoryStream memoryStream = new MemoryStream();  CryptoStream cryptoStream = new CryptoStream(memoryStream, dESCryptoServiceProvider.CreateDecryptor(bytes, bytes2), CryptoStreamMode.Write);  cryptoStream.Write(byte1, 0, byte1.Length);  cryptoStream.FlushFinalBlock();  System.Text.Encoding encoding = System.Text.Encoding.UTF8;  result = encoding.GetString(memoryStream.ToArray());            }  catch  {  result = "http://weibo.com/woldy";  }  return result;  
}      
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
另外,如果单独解决base64的编、解码问题,可以参考:http://blog.csdn.net/morewindows/article/details/11922473

最后附上逆向工具ILSPY的下载地址: 
http://pan.baidu.com/share/link?shareid=505596871&uk=1376014793

答案:解码得到wctf{dotnet_crackme1}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xaas_从XaaS到Java EE – 2012年哪款该死的云最适合我?

xaas您是否曾经想过要使Java EE正常运行需要什么? 是的 多年。 从托管我自己的主机开始,转到一些托管产品 ,最后偶然发现了PaaS运动。 老实说,我并没有太认真。 我只是想把我的东西放到某个地方,而不在乎解决方案。 在…

day3----python变量与常量

一、python变量: 1、概述:(1)程序可操作的存储空间的名称;(2)程序运行期间可以改变的数据(3)每个变量都有特定的类型 2、作用:将不同类型的数据存储到内存中 …

垃圾收集中的代际差异

去年,我一直在帮助新兴公司Instana创建一个Java代理,该代理可跟踪Java应用程序中的执行情况。 收集并结合此执行数据以生成用户请求以及系统所有者半球内服务之间的最终通信的跟踪。 这样,可以可视化非结构化通信,从而显着简化了由…

简单解释 MapReduce 算法

一个有趣的例子 你想数出一摞牌中有多少张黑桃。直观方式是一张一张检查并且数出有多少张是黑桃? MapReduce方法则是: 给在座的所有玩家中分配这摞牌 让每个玩家数自己手中的牌有几张是黑桃,然后把这个数目汇报给你 你把所有玩家告诉你的数…

appium + python 搭建

appium python 1、安装jdk地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html配置:系统变量新建JAVA_HOME,输入jdk安装路径,如:C:\Program Files\Java\jdk1.8.0_201。系统变量新建CLAS…

ubuntu 12.04 /sbin/ldconfig.real: /usr/local/lib/*.so.8 不是符号连接 解决办法

最近在ubuntu12.04下使用sudo apt-get install安装软件的时候最后总会报这种错误。建立硬连接即可解决: sudo ln -sf /usr/local/lib/libprotobuf.so.8.0.0 /usr/local/lib/libprotobuf.so.8 截图上传没成功,麻烦。 在弄一次。

Linux GCC常用命令

1简介 2简单编译 2.1预处理 2.2编译为汇编代码(Compilation) 2.3汇编(Assembly) 2.4连接(Linking) 3多个程序文件的编译 4检错 5库文件连接 5.1编译成可执行文件 5.2链接 5.3强制链接时使用静态链接库 1简介 GCC 的意思也只是 GNU C Compiler 而已。经过了这么多年的发展&#…

JDK 9 @不建议使用的注释增强功能

在帖子中, Deprecated可能会是什么样子? ,我当时使用JEP 277 (“增强的弃用”)的描述来指导创建增强的自定义Deprecated注释。 但是,自从发布该文章以来,JEP 277进行了重大更改。该文章总结了J…

数据结构和算法基础之冒泡排序

/// <summary>/// 冒泡排序/// </summary>/// <param name"arry"></param>public static void BubbleSort(int[] arry){for (int i 0; i < arry.Length; i)//外层循环控制排序趟数{for(int j0;j<arry.Length-i-1;j)//内层循环控制每一…

Java Web应用程序的SecureLogin

不&#xff0c;标题中没有缺少空格。 这与安全登录无关 &#xff0c;而与安全顾问Egor Homakov开发的SecureLogin协议有关&#xff0c;该协议因在没有权限的情况下致力于掌握 Rails项目而闻名 。 SecureLogin协议非常有趣&#xff0c;因为它不依赖任何中央方&#xff08;例如&…

最通俗的CRC校验原理剖析

以下内容摘自笔者即将出版的最新著作《深入理解计算机网络》一书。本书将于12月底出版上市&#xff0c;敬请留意&#xff01;&#xff01; 本书原始目录参见此文&#xff1a;http://winda.blog.51cto.com/55153/1063878 5.3.2 循环冗余校验检错方案 上节介绍的奇偶校验码&#…

SpringMVC 上传文件and过滤器

SpringMVC提供了一个MultipartResolver接口用来实现文件上传&#xff0c;并使用Commons FileUpload技术实现了一个该接口的实现类CommonsMultipartResolver。如果要在SpringMVC中实现文件上传功能&#xff0c;就可以在springmvc.xml中配置MultipartResolver接口的实现类。 以下…

guava 集合转换_Guava的Collections2:过滤和转换Java集合

guava 集合转换Groovy的便利之一是能够通过Groovy的闭包支持轻松地对集合执行过滤和转换操作。 Guava将对集合的过滤和转换引入标准Java&#xff0c;这是本文的主题。 Guava的Collections2类具有两个公共方法&#xff0c;这两个方法都是静态的。 方法filter&#xff08;Collec…

CRC校验算法的解析,暨对网上的CRC详解的补充

一、CRC的形象理解 本文面向对CRC校验有一定基础的读者&#xff0c;如果你不懂&#xff0c;请戳这里。维基百科还有图解版的。 在CRC的具体实现中&#xff0c;如果要计算CRC的数据很长&#xff0c;一般都会用到寄存器&#xff0c;用来保存当前的计算到的CRC&#xff0c;循环计算…

7.5 GRASP原则五:高内聚 High Cohesion

GRASP原则五&#xff1a;高内聚 High Cohesion   How to keep objects focused, understandable and manageable, and as a side effect support Low Coupling? 如何使对象功能专注、可理解、可管理&#xff0c;同时又支持 低耦合&#xff1f;5.1 GRASP rule 5&#xff1…

资源泄漏:救援的命令模式

多年来&#xff0c; 使用Plumbr进行性能监视时&#xff0c;我遇到了数百个资源泄漏引起的性能问题。 在这篇文章中&#xff0c;我想描述一种最简单的方法来清理资源并避免该问题。 首先&#xff0c;我以电影播放器​​应用程序为例来描述问题。 这种应用程序的主要功能自然是在…

Word文字的三种隐藏方法

在Word的使用过程中&#xff0c;有时候可能需要这么一种情况&#xff1a;一些文字或者段落我们暂时不需要&#xff0c;但又不知后期是否用到&#xff0c;其碍眼却又不能删除。这个时候&#xff0c;最好的方法就是暂时隐藏文字或者段落。今天寻老师教大家三种隐藏Word文本的方法…

Video 对象方法 canPlayType()

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body> <p>我的浏览器可以播放 MP4 视频吗?<span> <button οnclick"supportType(e…

Linux下区分物理CPU、逻辑CPU和CPU核数

㈠ 概念 ① 物理CPU 实际Server中插槽上的CPU个数 物理cpu数量&#xff0c;可以数不重复的 physical id 有几个 ② 逻辑CPU Linux用户对 /proc/cpu…

java原子更新类_Java内部具有原子更新的动态热交换环境

java原子更新类有人可能会争辩说上述标题可以简称为OSGi &#xff0c;我想在一开始就放弃这种思考过程。 对于OSGi而言&#xff0c;这没有什么冒犯的&#xff0c;它是一个很棒的规范&#xff0c;在实现层或可用性层上都搞砸了&#xff0c;这就是我对OSGi的信念。 当然&#xf…