ilda *** 破解和用ila *** 来重新编译VB.NET程序

ilda *** 破解和用ila *** 来重新编译VB.NET程序,第1张

( )程序员用高级OO语言(C# VB NET VC Net Cobol Python……)编写代码 这些代码经过 Net编译器(比如Visual Studio Net) 编译成统一的MSIL(Microsoft Intermediate Language) NET应用程序是以MSIL的形式出现的 只有在程序执行的时候才通过即时编译器JIT(Just In Time)被编译为本机代码  ( )程序执行的时候 由JIT装入程序的MSIL JIT同时作了很多其他的工作(装载相应的运行库 安全检测……) 最后JIT将转化成本地机器码(EXE或者DLL)  ( )本地机器码被装入内存 开始执行  就是通过这几个步骤 net实现了编程语言无关(都转化成MSIL) 平台无关(执行的时候根据本地配置 生成相应的机器码) 安全性(JIT里面做了很多检测)  作为Cracker 可以用 Net Framework SDK自带的工具进行MSIL和EXE(DLL)之间的互换 利用FrameworkSDK\Bin\目录下的ila *** 和ilda *** ( )ila *** 示例 下面的命令对 MSIL 文件 myTestFile il 进行汇编并产生可执行文件 myTestFile exe ila *** myTestFile下面的命令对 MSIL 文件 myTestFile il 进行汇编并产生 dll 文件 myTestFile dll ila *** myTestFile /dll下面的命令对 MSIL 文件 myTestFile il 进行汇编并产生 dll 文件 myNewTestFile dll ila *** myTestFile /dll /output myNewTestFile dll( )ilda *** 示例下面的命令使 PE 文件 MyHello exe 的元数据和反汇编代码显示在 Ilda *** exe 的默认 GUI 中  ilda *** myHello exe下面的命令对 MyFile exe 文件进行反汇编 并将结果 MSIL 汇编程程序文本存储在 MyFile il 文件中  ilda *** MyFile exe /output MyFile il下面的命令对 MyFile exe 文件进行反汇编 并将结果 MSIL 汇编程序文本显示到控制台窗口中  ilda *** MyFile exe /text如果文件 MyApp exe 包含嵌入的托管和非托管资源 则下面的命令将产生以下 个文件 MyApp il MyApp res Icons resources 和 Message resources ilda *** MyApp exe /output MyApp il下面的命令对 MyFile exe 的 MyClass 类中的 MyMethod 方法进行反汇编 并将输出显示到控制台窗口中  ilda *** /item MyClass MyMethod MyFile exe /text在上面的示例中 可能有几个具有不同签名的 MyMethod 方法 下面的命令对返回类型为 void 且带有参数 int 和 System string 的

lishixinzhi/Article/program/net/201311/11319

   好 现在我们知道了ISAPIRuntime对象是托管代码的入口点 那么这个对象是什么时候产生的呢?换句话说 w wp也是一个非瀀?潳楬?托管代码写出的程序 它是在什么时候把 net运行时加载进来的呢?(如果好奇心再强一点 还可以问一问一个工作进程是什么时刻产生并开始运行的 它和应用程序池有着怎样的交互 )完全解释清楚这些问题已经超过了笔者目前的能力范围 还望高人补充或提供资料线索 但目前我们从 net的代码中应该可以推断出 ISAPIRuntime对象和应用程序域是对应的 net在创建应用程序域的时候 就会创建ISAPIRuntime对象 见下面的创建应用程序域的代码 创建应用程序域 /**//*这是System Web Hosting AppDomainFactory类型的Create方法 它调用的是实际工厂的Create方法 */ [return: MarshalAs(UnmanagedType Interface)] public object Create(string module string typeName string appId string appPath string strUrlOfAppOrigin int iZone) { /**//*实际工厂是一个AppManagerAppDomainFactory类型的对象 */ return this _realFactory Create(appId appPath)} /**//*AppManagerAppDomainFactory Create方法 请看代码内的注释 */ [return: MarshalAs(UnmanagedType Interface)] public object Create(string appId string appPath) { object obj try { if (appPath[ ] == ) { FileInfo info = new FileInfo(appPath)appPath = info FullName} if (!StringUtil StringEndsWith(appPath \\ )) { appPath = appPath + @ \ } ISAPIApplicationHost appHost = new ISAPIApplicationHost(appId appPath false)/**//*这个方法内部的调用链非常复杂 它一方面创建了一个应用程序域 一方面返回一个ISAPIRuntime对象 具体这个方法究竟是如何创建AppDomain对象的 大家可以用 JetBrain来跟踪其调用栈 关于这部分内容更详尽的信息 可参见ASP NET Internals The bridge beeen ISAPI and Application Domains一文 另外 如果您使用JetBrain来调试系统程序集的话 有可能会因为缺少相应pdb文件而不能查看完整调试信息 这里提供一个根据已有程序集 先反汇编成中间码 再重新以调试模式生成dll和pdb文件的方法   )生成IL文件: ilda *** /tok /byt system web dll /out=system web il )重新生成PDB/DLL: ila *** system web il /DEBUG /DLL /OUTPUT=System Web dll*/ ISAPIRuntime o = (ISAPIRuntime) this _appManager CreateObjectInternal(appId typeof(ISAPIRuntime) appHost false null)o SetThisAppDomainsIsapiAppId(appId)o StartProcessing()obj = new ObjectHandle(o)} catch (Exception) { throw} return obj }

写在前面的话 网上讲Asp net运行模式的好文章已经很多了 笔者本不用多此一举 另成一文 但从笔者自己的学习经验看 如果学到的这些知识不能对应到类库中的源代码 印象总归不够深刻 大有隔靴搔痒之感 只好自己写上一篇 对这方面的知识做个小小的总结 文中所有内容都是笔者在看了网上很多文章后 结合自己的开发经验得出的一些理解 难免有错误的地方 欢迎批评指出 另外 由于笔者能力所限 很多地方并未说透(真正对应到代码) 也盼高手能够给予补充

lishixinzhi/Article/program/net/201311/15293


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12073595.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存