.net加壳软件CLISecure调试笔记(一)

共两篇,第一篇和壳本身的过程关系不大,主要是涉及了虚方法的内容,第二篇则详细调试了CLISecure的保护原理。在我的blog上名为CLR内核调试随记,因为是随记,所以文章中可能有不全面甚至错误的地方。找到错误的朋友请与偶联系。性急的兄弟请直接看第二篇。

本文章所调试壳为CLISecure,下载地址为http://www.secureteam.net/,最新版本为3.0,而我所调试的版本为2.5,所以可能与最新的壳有所不同。

CLR内核随记(1)

把平时看到的一些东西记下来,没准以后用的上。

本文利用调试跟踪CLR中接口virtual方法的定位。为什么呢?好玩儿而已。

这是在某壳挂钩JIT的代码,有些东西还是很有意思(总是觉得这些壳作者知道很多CLR的内部结构,估计微软对他们部分开源了):

.text:10002A4C mov eax, [ebp+ICorJitInfo]
.text:10002A4F mov ecx, [eax+4]

//此时ecx==.text:79E97C14 const CEEJitInfo::`vbtable’{for `ICorJitInfo’},第一个双字是什么?第一个双字指向
.text:79E97B14 dd offset [thunk]:CEEInfo::getHelperName`vtordisp{4294967292,52}’ (CorInfoHelpFunc)

到这里,来看看CEEJitInfo::’vbtable’在内存中的表示:

79E97C14 >FC FF FF FF 34 00 00 00 3C 00 00 00 44 00 00 00

79E97C24 4C 00 00 00 54 00 00 00 5C 00 00 00 64 00 00 00

79E97C34 6C 00 00 00 74 00 00 00 80 00 00 00 FC FF FF FF

其实这些值是在编译时确定的,因为CLR本身部分用C++写成,也就是C++中的vtable在编译时确定,mscorwks.dll中的代码如下:

.text:79E97C14 const CEEJitInfo::`vbtable’{for `ICorJitInfo’} dd 0FFFFFFFCh, 34h, 3Ch, 44h, 4Ch, 54h, 5Ch, 64h, 6Ch

.text:79E97C14 dd 74h, 80h

FCFFFFFF是what?谁知道,也许是一个vtable的开始标志,因为在第三行最后又见到一个同样的双字。计算两个FCFFFFFF之间的双字值,可以先猜测这个vtable含有10个方法。不过sscli中对应的代码却多出了一两个方法,这里暂且不管,下面主要看怎么定位这些vtable的。

.text:10002A52 mov edx, [ecx+4]
.text:10002A55 mov eax, [ebp+ICorJitInfo]
.text:10002A58 mov ecx, [eax+4]
.text:10002A5B mov eax, [ecx+4]
.text:10002A5E mov ecx, [ebp+ICorJitInfo]
.text:10002A61 lea eax, [ecx+eax+4]
.text:10002A65 mov ecx, [ebp+ICorJitInfo]
.text:10002A68 mov edx, [ecx+edx+4]

在lea eax这句执行完后,eax指向内存如下

0013EA18 78 7B E9 79 00 00 00 00 4C 7B E9 79 00 00 00 00

0013EA28 A8 7A E9 79 00 00 00 00 84 7A E9 79 00 00 00 00

总觉得后面那句mov edx,[ecx+edx+4]重复了,直接mov edx,[eax]不就可以了吗?这时[eax]的值是79E97B78指向什么?它指向了下面一个方法:

.text:79E97B78 const CEEJitInfo::`vftable’{for `ICorMethodInfo’} dd offset [thunk]:CEEInfo::getMethodName`vtordisp{4294967292,52}’ (CORINFO_METHOD_STRUCT_ *,char const * *)

时间: 2024-10-03 05:09:53

.net加壳软件CLISecure调试笔记(一)的相关文章

.net加壳软件CLISecure调试笔记(二)

CLI内核随记(2) 今天有空,继续调试上次的壳.该壳下载地址http://www.secureteam.net.上一次并没有深入壳的解密流程,而是看了下虚方法的定位.今天的重点是壳解密流程.壳安装后有一个GUI主程序,一个本地dll.调试的重点就是这个本地dll. 这次仍然下断点在它挂钩JIT的地方.怎样激活这个断点?只要运行一个还没有JIT的方法既可.便于重复,这里固定为显示关于窗口.F9运行后,我们中断在hook方法的入口处: 再看一下椎栈,椎顶的值0x79E9776F指向了mscorwk

急!请教在哪里找到加密C#程序的加壳软件TMD或者VMP

问题描述 想对自己的Winform程序进行保护,网上说TMD和VMP的保护能力较强.请问在哪里下载最新版,如何使用. 解决方案 解决方案二:百度...百度...解决方案三:我想问一下大家,你们写的Winform程序给客户都不用加密的吗?谁拿到程序文件用reflector已处理代码都有了,还有什么秘密可言.几个月开发出来的程序一点保护都没有.解决方案四:那你用c++啊解决方案五:引用3楼shingoscar的回复: 那你用c++啊 难道用C#就不能保护了吗?解决方案六:打个比方就像是你吃方便面还在

用sixxpack给程序加壳之后,打开程序出现闪退是怎么回事?

问题描述 用sixxpack给程序加壳之后,打开程序出现闪退是怎么回事?还有什么好的加壳软件,求推荐 解决方案 解决方案二:没人?解决方案三: 解决方案四:我用.NETReactor加壳,解决方案五: 解决方案六:不过这个不是壳,只是为了混乱反编译的,加壳工具多,Xenocode都行

java-在linux(windos)系统下解析加壳的apk

问题描述 在linux(windos)系统下解析加壳的apk 最好纯java代码 不要依赖组件 比如aapt 我用过aapt windos还好 linux需要的依赖太多 解决方案 首先加壳的方法和代码都是从Jack_Jia的博客学习的. 详见:http://blog.csdn.net/jiazhijun/article/details/8678399 由于本人从c++开发直接跳到Android开发,没有对android进行系统的学习,看上面博客时还是有很多不理解的地方.本文把不理解的地方梳理一下

加密加壳-Foxpro的混淆器,有哪一位大侠可以阐述明确一点????

问题描述 Foxpro的混淆器,有哪一位大侠可以阐述明确一点???? 针对FOXPRO的加密加壳的问题,本人很想采用混淆器来解决一些问题,现在关键的问题,程序中含有联网络服务器数据库的句柄,这一点很让人头痛,如果用一个加密文件或加密字段来存这个句柄的关键内容,是可以不会直接写出来,但,如果破解高手用里面的程序照样读出这个内容,然后再赋到一个变量里,不是照样可以显示出来,根本是无法保密的,请教高手大虾们,给个清晰的思路!不胜感谢了!!! 解决方案 devmiao 苏小喵 Ds Rxr 不要客户端直

图片-vs2010软件在调试时无法定位程序输入点

问题描述 vs2010软件在调试时无法定位程序输入点 5C 解决方案 图片打不开了,你的程序是exe还是dll,dll要指定加载进程exe 解决方案二: 看下是不是bug模式 解决方案三: 看看启动项目 是不是当前项目

为Android的apk应用程序文件加壳以防止反编译的教程_Android

一.什么是加壳?加壳是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,做一些额外的工作.大多数病毒就是基于此原理. 二.加壳作用加壳的程序可以有效阻止对程序的反汇编分析,以达到它不可告人的目的.这种技术也常用来保护软件版权,防止被软件破解. 三.Android Dex文件加壳原理PC平台现在已存在大量的标准的加壳和解壳工具,但是Android作为新兴平台还未出现APK加壳工具.Android Dex文件大量使用引用给加壳带来了一定的难度,但是从理论上讲,Android APK加壳

手机骗术一:热门应用被“加壳”

中新网8月1日电 随着智能手机越来越深入人们的生活,围绕着智能手机的各类诈骗案件也日趋增多,骗子不断翻新诈骗手段,无孔不入,手机用户在产生质疑的同时,更要小心防范.根据网秦<2012年上半年全球手机安全报告>数据显示,2012 年上半年查杀到手机恶意软件17676 款,相比2011年下半年(7至12月)增长42%,感染手机1283 万部,相比2011年同期(1至6月)增长177%.对此网秦史文勇博士列举了比较常见的手机骗术. 为此,网秦创始人.首席运营官史文勇为网友揭开6大手机骗术的猫腻. 手

C# 给WinForm程序加壳(写代码加)

问题描述 现在我开发好了一个WINFORM程序,需要对程序加壳,不是使用软件加,而是在程序中写代码加,没有接触过,请各位帮忙指导一下,最好能给个例子代码?谢谢,在线等立马给分! 解决方案 解决方案二:SharpAssembly作者就是SharpDevelop/SharpZipLib的作者MikeKrueger.SharpAssembly作用是不需要System.Reflection实现:1.程序集动态加载:2.直接访问方法的IL内容:3.共享访问(不用锁定程序集):4.可以用它实现你自己的反编译