前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于反编译的搜索

用Reflector反编译.NET程序_jinifly_新浪博客 加载中… 机器奇葩 http://blog.sina.com.cn/jinifly [订阅][手机订阅] 首页 博文目录 图片 关于我 个人资料 jinifly Qing 微博 加好友 发纸条 写留言 加关注 博客等级: 博客积分:1907 博客访问:146,820 关注人气:68 天天美食 精彩图文 相关博文 更多>> 推荐博文 2013中国互联网哈哈榜之1: 刘兴亮 【幕后】刘强东归来:五大招决战 王冠雄 刘强东:走向柔软的硬汉 IT老记 改变审美标准的十一位Model 博物绘 从太极助手事件看移动应用分发 月光博客 东哥谈“微利”:电商亏损催生金 guofeipu2_x5jeu 给易中管理者的21个建议 宋新宇 从《私人定制》看产品的生老病死 杨小涅 2013,通信业界关键字:信与 Tom_ 互联网思维,远不是方法论 苏一壹11 查看更多>> 谁看过这篇博文 加载中… 正文 字体大小:大 中 小 用Reflector反编译.NET程序 (2012-06-03 10:29:28)转载▼ 标签: it 分类: 学习 接上篇,刚开始我以为以前开发组的郑Sir是用ildasm来反编译并修改代码的,但是当我读了ildasm反编译出来的结果后发现,ildasm得到的是类似于debug的汇编代码,郑Sir应该有别的方法,因为他每次改.exe文件都很快,会立即生成一个新的给我. 我qq问了郑Sir(一年没联系啊!),他告诉我是用Reflector来直接得到源代码的,哈哈! 我让他发了个7.0版本的给我,开始玩起来.... Reflector也是可以区分.NET还是C原生程序,如果是非.NET程序则会显示Not a .NET module. 先拷贝一个WcfSvcHost.exe出来,别把源文件给玩坏了.用reflector打开这个文件,找到了导出为源代码的功能,哈哈! 得到了整个工程文件 我浏览了一下reflector反编译的结果,发现双击WcfSvcHost.exe时的Usage用法提示信息是存在于资源文件中,玩把破解吧--我要改掉它! 用VS打开该资源文件,搜索Usage字串 选中Usage字串,按Insert键,直接编辑这个二进制文件,把Usage替换成K.O.by.Jinifly--改掉它! Rebuilt工程,如我所料,开始出现一些错误,Reflector也不是100%能还原出源程序的. 根据错误提示,很明显Private EventHandler ApplicationExit与internal event EventHandler ApplicationExit重复定义了ApplicationExit, 由于后面写了实现部分,我把Private的申明注释掉,pass! 又出现了重复XX特性的提示,这又是在哪个文件中重复定义了相同的字段,我把整个这段出错的代码注释掉,pass! 接下来又提示签名失败,这想必是当初生成WcfSvcHost.exe时微软开发组做的签名 点击程序属性,用自己新建的签名替换之 会提示"选项keyfile重写源或添加的模块中给出的特性"System.Reflection.AssemblykeyFileAttribute",但只是警告,编译顺利通过.然后我运行了一下编译生成的WcfSvcHost.exe,结果发现任务管理器里可以正常看到进程正在运行,但是没有弹出它的用法提示信息.是不是自签名会有问题? 签名字段应该与发行公司,版本等属于程序本身的信息,找了一下,它是AssemblyInfo.cs定义的,根据前面错误提示的"f:\dd\tools...",我试着把对应的那一行注释掉. 然后去掉程序的签名,再rebuild,又过了.(尽管有一个延迟签名的警告) 再Run一下,OK了,哈哈! 任务管理器显示它是个32位程序,还是要完美一下吧 找到程序属性的目标平台,改为x64,rebuild, OK! 64位 题外话: 后来发现不同版本的Reflector,反编译出来的源码效率是不一样的. 我到Reflector站点上下了个最新试用版的ver 7.5.4.20(现在开始收费了),见下面的Applauncher.cs对ApplicationExit事件,只有定义,没有实现部分 而用郑Sir给我的老版本ver 7.0,不仅出现了重复的定义,还有实现部分,这个实现部分会导致"事件XXX只出现在+=或-="这个错误,实现部分从代码语法上看(从38行开始)是没有错误的,试着改了几次都过不去,后来偶然发现最新版反编译出的源码是OK的. 稍微分析一下,可以看到用法提示是通过Usage属性中的get方法调用的,而get方法又调用了ResourceManager.GetString方法,点击ResourceManager属性以获得其get定义 可以发现ResourceManager最终负责对StringResources.resources资源文件的处理 最后,就能看到Usage字段在该资源文件中了. 百度百科对Reflector有清晰的说明: http://baike.baidu.com/view/3803210.htm 分享: 喜欢 阅读┊ 评论 ┊ 收藏 ┊转载 ┊ 喜欢▼ ┊打印┊举报 已投稿到: 排行榜 圈子 加载中,请稍候...... 前一篇:如何判断是.NET程序还是C程序 后一篇:用户登录过程之配置文件的使用详解【转】 评论 重要提示:警惕虚假中奖信息 | [发评论] 评论加载中,请稍候... 发评论 | 登录名: 密码: 找回密码 注册 记住登录状态昵 称: 分享到微博 评论并转载此博文验证码: 请点击后输入验证码 收听验证码 匿名评论 发评论 以上网友发言只代表其个人观点,不代表新浪网的观点或立场。 < 前一篇如何判断是.NET程序还是C程序 后一篇 >用户登录过程之配置文件的使用详解【转】 新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正 新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑 Copyright &copy; 1996 - 2013 SINA Corporation, All Rights Reserved 新浪公司 版权所有