.Net逆向教程

.Net程序载入OD直接就运行起来了,完全没给我们调试的机会。针对这种程序,其实有专门的调试软件,比如dnSpy。其实调试流程跟OD差不多,在此只是熟悉一下dnSpy的运用。

这个笔记是跟着up主muruoxi学习.Net逆向,这是她的.Net逆向专栏

1. 静态分析

拿去查壳,发现它是C#写32位的.net程序。

载入dnSpy,编辑 -> 搜索程序集,选择搜索数字/字符串,输入“登陆失败”,就可以定位到代码处。

这个看起来是不是特别像Java写的程序,C#我没接触过,但C#跟Java很像我是见识到了。程序逻辑很简单,如果文本框1的文本长度为-1则登录成功。很明显这是不可能实现的。我们的目的就是要修改这个if语句。在这个方法内右键 -> 编辑方法。修改完后点击编译。

文件 -> 全部保存,确定。

此时,再次打开原程序,无论输入什么都显示“登录成功”。

2. 动态调试

C#写32位的.net程序,无壳。载入dnSpy读代码。

超级简单,注册码就是用户名的RSA值。

那这个RSA怎么得到?使用动态调试。选中第22行F9下断或右键 -> 添加断点。

F5开始调试,此时dnSpy显示在运行中。输入用户名与注册码后,点击按钮,dnSpy停在断点处。

但此时texttext2的值都为空,F11步入,F10步过,两次F10之后,texttext2的值都出来了。

text中的值就是我们需要的RSA值。选中text行,右键 -> 复制值,将引号去掉,就是v5le0n9对应的注册码。

1
WgvOIwqEgAHU+Kfq6nVDMXbRw4SzUDh2RUOIjkwwEajSmRXuuRFZRV173AZum6hXx6USTCMIsCnQnpQjKpf7Q0efrYzsjnuEkOU0BGUs+SUWBS3dFCpNcLdqLp6UNIM1bJp4l+P0kDdSWHdJzGFdBUEkmQteAp3Dfbf+B3r8q70=

取消断点,F5继续。将正确的注册码填上,左上角已经显示“已注册”字样。

但是不知道如何保存这个“已注册”的状态,因为它每次的RSA值都会变。

那我只能爆破了,将“==”修改为“!=”。

3. 壳与脱壳

载入DIE发现有.NET Reactor(4.8-4.9)的壳,.NET壳非常好脱,用de4dot就可轻松脱去。

将需要脱壳的程序拖进de4dot.exe程序,在程序本目录下就会生成一个已脱壳程序。拿去DIE查壳,壳已经去掉了。

将两个程序载入dnSpy查看区别。发现加壳程序会有一些乱码的类。

运行脱壳程序熟悉一下流程。搜索关键字符串定位函数。

第一种方法:通过爆破,无论输入什么都显示已注册。

第二种方法:获取注册码。

在if语句处下断,运行,发现value值出不来,up主说是编译器优化问题,暂时还没有好的解决办法。

4. 修改程序内容

有壳,直接拿去de4dot脱壳。脱壳失败,让我们使用最新版的de4dot。

去爱盘下载了个最新版的,不错,好用!

这次的目标是要修改程序的内容,那就修改一下标题,修改成我不过分吧嘿嘿。

载入dnSpy,搜索需要修改的字符串。

一样,右键 -> 修改方法。编译,保存。锵锵~修改成功!

5. 调用堆栈

程序无壳,运行一下程序,程序3秒后自动退出,退出会有一个提示。

这像不像退出时出现的NAG窗口。可以查看 调试器使用教程实验六中的去除软件关闭后弹出的广告

这个程序一样,运行到弹窗后按暂停键。调试 -> 窗口 -> 调用堆栈,查看堆栈窗口,找到在程序领空的。

倒着来一个个看,第一个Form1_FormClosing是弹窗内容。不是什么重要函数。

第二个是有关时间的函数。很有可能是这个,因为3s后自动结束就是用了时间计数器。

第三个是main函数,里面没有计数的内容。

将第二个方法的退出函数注释,编译保存。重新运行程序,发现3s后没有退出程序,但关闭还是有NAG窗口。用同样方法注释掉即可。

也可以在main函数中一直进去进到InitializeComponent方法,注释掉使用一二函数的代码,就可实现既无倒数也无NAG窗口。

6. Main函数

在没有任何敏感字符串和NAG窗口的情况下,只能进入main函数一探究竟。

main函数如何进入?也是用5的方法调用堆栈。一直进入到InitializeComponent方法,分析。

右键label2 -> 分析,查看分析器,label2被timer1使用到了。

注释掉随机函数,修改为自己想要的文本。

7. 打不开的程序

运行一下,程序打开不了。查壳无壳,载入dnSpy查看函数。发现在main函数调用了程序关闭函数,导致程序一打开直接运行到关闭函数自动关闭自己。

那就直接注释掉main函数调用关闭函数那一行。

8. 修改程序内容2.0

拿去查壳,无壳,64位.net程序,载入dnSpy。

发现它与我们之前调试的程序有点不一样。搜索字符串无果。找到main函数分析一下。

查看.baml文件,右键发现没有编辑方法功能,但可以使用十六进制编辑器修改内容。

右键 -> 打开十六进制编辑器。Ctrl + F 搜索,好像不能输入中文,但可以粘贴中文。确保找到的地方是我们要修改的地方,随意修改可能会出现问题。

建议修改的比原来的字节数要少,因为怕溢出。系统用00填充未修改的字节。

文件 -> 全部保存。

9. de4dot反混淆

还没有找到合适的程序,暂时先到这里吧。