.NET反汇编工具 dnSpy逆向再探

0x01 前言

在上一篇帖子中我分享了一下dnSpy在逆向中的使用以及一些心得,希望能给大家带来一些帮助。这篇帖子我们将继续熟悉一下dnSpy的操作,以及如何利用dnSpy来进行逆向解题。话不多说,继续今天的内容。

0x02 准备工作

这次的题目依旧是从Jarvis OJ上拿到的,和上次一样,依旧是一道经典的Crackme题目。把拿到的题目修改后缀名并进行解压缩,就得到了我们今天的主角——CrackMe2。这次依旧是一个可运行的程序,我们首先运行该程序,提示输入正确的密码获取flag:
.NET反汇编工具 dnSpy逆向再探
随便输入一串字符串,点击GETFLAG,提示密码错误,而且后面附带了一串貌似base64编码的字符串:
.NET反汇编工具 dnSpy逆向再探
和上次的解题思路一样,这里可以推测出也是一个比较语句,用来比较我们输入的字符串和程序中事先写好的字符串的关系。如果相同则提示密码正确,如果不同则提示密码错误。当然,这里面的实现细节肯定和上一题有些不一样。

0x03 开始逆向

首先打开PEiD工具,查看程序信息:
.NET反汇编工具 dnSpy逆向再探
发现依旧是一个.NET程序,所以继续要使用dnSpy来进行逆向。我们打开dnSpy,把程序拖进去自动进行反编译:
.NET反汇编工具 dnSpy逆向再探
这里我首先使用的是和上一题一样的解题思路,直接到函数段里面匹配字符串“密码错误”,结果一无所获。可以想象,这里是经过编码之后才显示的该字符串,所以匹配不到。此时我们换一种解题思路,调试程序看一下,点击启动,选择程序在运行到入口点处中断,点击确定:
.NET反汇编工具 dnSpy逆向再探
结果程序断在如下图所示的位置,并且发现有一个似乎是乱码的类名:
.NET反汇编工具 dnSpy逆向再探
单击一下该类名跟进,并向下浏览,找到关键的字符串比较函数:
.NET反汇编工具 dnSpy逆向再探
判断条件是text不为空并且text2等于后面一串什么东西。按下F9在此处下断点,并继续调试,查看test和test2的内容:
.NET反汇编工具 dnSpy逆向再探
弹出输入框时,我在此处输入的值为123456,点击GETFALAG:
.NET反汇编工具 dnSpy逆向再探
此时到达断点处停下,并且发现text就是我们输入的内容,text2的内容是一串base64的字符串,向上浏览发现,其实test2的内容是由test的输入得到的:
.NET反汇编工具 dnSpy逆向再探
我们点击test2后面的那一长串跟进,查看是如何根据test输入转变为test2的:
.NET反汇编工具 dnSpy逆向再探
发现这里有一个叫RijndaelManaged的,百度得知,这是一处AES加密,并且Key值为bytes。使用dnSpy重新加载该程序,点击上面bytes后面的那一长串跟进,并在return语句处下断点,查看Key的具体值:
.NET反汇编工具 dnSpy逆向再探
发现Key值为:pctf2016pctf2016pctf2016pctf2016
.NET反汇编工具 dnSpy逆向再探
再接着往下走,发现经过AES加密后,还经过了base64编码,才最终成为了我们看到的test2:
.NET反汇编工具 dnSpy逆向再探
现在知道了test2的来历,最后需要弄懂的就是最开始的if语句中test2和谁进行的比较,点击test2后面那一长串跟进,并在return语句处下断点:
.NET反汇编工具 dnSpy逆向再探
查看result的值:
.NET反汇编工具 dnSpy逆向再探
发现该值为程序中写好的base64字符串:x/nzolo0TTIyrEISd4AP1spCzlhSWJXeNbY81SjPgmk=。
到现在终于搞懂了程序的逻辑:首先程序把你输入的字符串进行AES加密,接着再进行base64编码,然后再和程序中预先写好的base64字符串比较,如果相同,则弹出密码正确,否则提示密码错误。
弄懂程序逻辑后,最后一步只需要打开在线AES解密工具,输入程序中预先写好的base64字符串,填入Key值,就可以获得flag:
.NET反汇编工具 dnSpy逆向再探
最后得到的flag就是:PCTF{Dot_Net_UnPack3r_yoo},打开.exe程序进行验证,成功弹出密码正确界面。
.NET反汇编工具 dnSpy逆向再探

0x04 总结

拿到题目后刚开始感觉到无从下手,最后一点一点调试才慢慢有了眉目。这道题目和上道题目有了明显的不同,上道题目可以直接匹配到字符串,从而定位到关键函数进行解题,这道题目的字符串是经过编码的,所以匹配不到,再按照上一题的思路来解题就显得无从下手,需要一点一点的进行调试。
经过两道题的磨练,渐渐感觉dnSpy逆向工具越来越用的越来越得心应手了,继续加油,好好学习,天天向上。

相关文章:

  • 2021-11-27
  • 2021-08-13
  • 2022-01-01
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-08-23
  • 2022-01-08
  • 2021-09-03
  • 2022-12-23
  • 2022-12-23
  • 2021-08-04
相关资源
相似解决方案