C# & dnspy 使用总结--逆向分析

dnspy工具: 非常优秀的C#的反编译器

一、调试

     1.1  载入模块: 直接将exe或者dll,拖到dnspy中即可。或者 打开exe,运行起来就会,相关的模块会自动加载进来。

     1.2  快捷键和VS调试的快捷键相同, 记不住可以手动点;

     1.3  附加进程;

     1.4  如何跟踪异常? 先看输出中打印是什么异常,然后在异常设置中将异常的类型勾上,再运行一次,我们就在异常的地方断下来,然后,根据调用堆栈立刻就能找到出错的逻辑; 

     1.5  右键---分析-可以得到变量的使用和赋值的地方;
     1.6  双击可以得到定义的地方
     1.7 界面显示的字符串往往 是分析突破口

二、多进程调试

      2.1  当子进程起来后,另外起dnpsy使用附加的方式,可以进入调试。

这样做是可以调试,但是这样看手速... 如果你附加过慢,可能关键函数已经跳过了;

最主要的问题是如果使用dnspy的附加功能,很多函数的局部变量显示不出值,提示:进程不安全,或者被优化;

这时,我们应该选择方式2.2。

      2.2  dnspyA启动调试主进程,到起进程ProcessStart处断下来,这时可以见到,第一个参数是子进程名,第二个参数是启动参数;     我们再启动一个dnspyB,按照这个启动参数启动,子进程即可;

         注意:在windows系统中,启动参数需要修改:去掉头尾的字符串,"""" 改为 "" , \  改为 \\ ;

三、修改模块

     1.1  如果可执行文件没有加壳、加混淆,dnspy基本可以完全的显示出C#的源代码;

     1.2 修改了代码可以保存模块。

      1.3 修改方式: 编辑C#方法、修改IL指令等,修改完后需要编译方法,保存模块;

 

四、断点: dnspy的断点也是很强大

       条件断点:==

五、局部变量、监视:可以查看内存值

      值得注意的是,程序最好使用dnspy启动,这样相比附加进程的方式,可以看到更多的内存值;附加进程往往显示:内存不安全;

六、逆向代码

      我们自己建立一个C#的控制台程序,编译好,然后使用dnspy打开,你会惊讶发现,基本上可以完全的还原代码;

      所以,逆向代码的时候,我们只需要将关键的算法位置抠出来即可,参考设备使用了什么资源,我们拷贝过来,参考设备如何加载资源,我们也如何加载资源,参考设备使用了什么dll,我们也add 到工程中使用

七、缺陷:

     6.1  从dnspy 3.0 开始:搜索功能容易使得dnspy崩溃,据说时递归查询导致的;

八、去混淆

de4dot  可以用来进行C# 的去壳,去混淆;

C#去混淆之后,类名、方法名、变量名往往变成classXXX、mehodXXX、stringXXX、booleanXXX,而往往在dnspy中修改这些名字会编译不过,这些不方便分析。
    希望像IDA一样,修改一个变量名,就能其他引用的地方都改名; 
    伪解决方法: 使用dnspy将目标dll或者exe(选中),file--->导出到工程,然后用VS打开,再使用VA的Rename进行批量的修改;
 

九、C#层调用C++的DLL时,如何快速定位到DLL中的代码位置?

dnspy打开C#层,在DLLImport 中会有Module和RVA,OD和IDA打开相对于基址的RVA处下断,即可定位到; 

 

 

 

你可能感兴趣的:(----C#编程,调试,逆向)