CTF【每日一题20160623】dotNet逆向分析
来源:互联网 发布:mysql like 编辑:程序博客网 时间:2024/06/05 20:57
题目来源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()))
意味着它提交一个用户输入值进行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;}
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; }
另外,如果单独解决base64的编、解码问题,可以参考:http://blog.csdn.net/morewindows/article/details/11922473
最后附上逆向工具ILSPY的下载地址:
http://pan.baidu.com/share/link?shareid=505596871&uk=1376014793
答案:解码得到wctf{dotnet_crackme1}
0 0
- CTF【每日一题20160623】dotNet逆向分析
- CTF dotNet逆向分析
- CTF 【每日一题20160626】简单的PE文件逆向
- CTF 【每日一题20160627】简单的ELF逆向
- CTF【每日一题20160604】
- CTF 【每日一题20160605】
- CTF 【每日一题20160606】
- CTF 【每日一题20160607】
- CTF【每日一题20160608】
- CTF【每日一题20160609】
- CTF【每日一题20160610】
- CTF【每日一题20160613】
- CTF【每日一题20160611】
- CTF【每日一题20160614】
- CTF【每日一题20160615】
- 南邮ctf逆向最后一题
- CTF 【每日一题 20160707】凯撒加密
- CTF 【每日一题20160616】windows、linux hash破解
- iOS 常用第三方库
- Number Sequence 找规律
- 多线程中创建单例模式的双重锁定
- Encode and Decode Strings
- 数据结构之栈
- CTF【每日一题20160623】dotNet逆向分析
- imx6q yocto 添加自己的应用程序
- hdu 1051 //多次贪心 (水题)
- SpringMVC静态资源拦截问题
- Spring注解@Component、@Repository、@Service、@Controller区别
- JStorm/Storm的调试:本地运行模式
- 事务处理
- ACM/ICPC竞赛STL--pair
- CSS中模糊滤镜