目标软件:EmailXXXXX
软件功能:发送EMAIL,验证EMAIL,搜集EMAIL于一体。
软件语言:Dotnet Vs2005 framework20 平台运行。
破解工具:DotNet Id.exe 检测何种.NET混淆器加壳 Reflector DotNethelper Hexchange(自己写的) dbgCLR(微软自己的调试器)Editplus
工具说明:静态工具:Reflector 查看一些类信息 DotNethelper把程序反编译为IL文件然后在重新用IL文件生成EXE Hexchange这个功能比较简单就是把十六进制转为十进制,或者汉字,方便分析 Editplus这个就是方便打开IL文件,然后查看,修改,查找关键字。动态工具:dbgCLR 设置断点跟踪流程
破解思路:
1,先确定是否加壳,加密,混淆,用DotNet一试,即知,被 混淆 处理过。混淆器为VS2005自带的工具Dotfuscator 。
2,用Reflector 出马。结果看到的全是ab,a,d,e,f,,,,,等这类的函数名,类名,过程名,果然,大大小小100多个类名,就名称什么也看不出。双击查看代码内容,也看不出太多内容,好多显示无法反编译。
3 再在用DotNethelper出马,导出为IL文件,然后在编译一次,运行,OK。基本上无大问题。
然后在随便找一个ldc.i4.1 的代码改为 ldc.i4.0 然后在重新编译一下,在运行,OK,说明无强名,文件安全性校验,省事不少。
4,在恢复原来代码,再次编译前,加上/debug选项,然后生成一个同名的.pdb文件,这个是用来调试设置断点用的。
5,以上操作完毕,现在就要轮到dbgCLR出手了,进行动态调试,跟踪变量。
在正式开始之前,IL语言的帮助手册,准备好,以备查命令使用,如果一时不记得用哪个命令。
接下来,就是用dbgCLR打开IL文件,然后在调试菜单中选择调试的程序,打开目标EXE文件,然后,按F5就可以开始运行动态调试了。到了断点后就改为F11/F10,用这工具调试,最重要的就是,要知道在哪里下断点,跟进程序执行流程,准备好笔纸来记录,关键代码,跳转等都可以。如果不知道怎么断点。建议用Editplus这类文字软件,打开IL文件,在代码中搜索一些关键字,找到自己感兴趣的内容,比如 对于按钮类,则查找 windows.forms.button这类关键字,来定位按钮这一块代码,然后在结合上下文,分析,上下文中,可能会出现一些类似按钮文本字符,这些都是非常好的突破口,我就是利用这一点,慢慢定位到了关键代码,然后在在dbgCLR中设置断点,检测是否判断正确,如果正确中断了,然后在记录关键流程,因为在IL代码中,几乎都是用SWITCH方式来决定程序执行步骤与去向的,所以,用笔记录关键点跳转,就可以很方便就知道了问题在哪。。。然后在返回去,结合自己的判断与分析,用Editplus修改关键点代码,改变流程,在重新编译生成EXE后,由dbgCLR二次加载,进行动态调试,检测自己的分析是否有误。对于关键代码,本人就是从Thread.Start()入手,(因为这是一个多线程程序,只有工作时才启动多线程)逆向反推,然后找到了关键的代码条件处,把brtrue改为了brfalse(要注意堆栈平衡,不能直接用br跳转),然后验证了此方法的正确性,最终,半天不到的时间,把未注册的提示信息,发信时的对于没有注册的只能发,10条EMAIL的限制与保存时只能保存100条EMAIL的限制,全部去除了,然后在把他变灰的按钮改为了可用,然后在加上了正确的跳转事件地址(变灰后,对方原代码跳转为始终不工作,但程序中是有能正确工作的代码断)故,我能正确修改成功,当单击后让他跳转到应该执行的地方,完成相应功能,而且对于ListView控件中的双击事件,也进行了处理(原代码中也同样有正确工作的代码,但是此版本没有正确跳转)故一一修复之。然后在重新编译生成,一切OK,去掉了各种限制。交给了相关同事使用。