反编译DLL文件(解决了再加分)

时间:2022-02-26 21:25:43
用reFlector工具打开DLL文件,发现提示: Invalid number of data directories in NT header.
很明显,NT headers被修改过,于是去down了一个CFF Explorer来,将NumberOfRvaAndSizes的值由原来的0000000F改成了00000010,然后再用reFlector打开,发现又提示:contains zero or multiple module definitions.
表中有多个目录,去网上搜了一下相关资料,看到这篇文章:http://hi.baidu.com/dreamzgj/blog/item/5cd5f1456fedc388b2b7dc8a.html,于是打算照他的方法去做,
但是问题又出现了,我执行:Stream->Tables->Module这个操作的时候,一点那个tables,CFF 就出问题了,点其它的没事,而且用CFF打开这个dll的时候,那个tables是灰色的文件夹,也就是说,它是不可用的,请问哪位大侠有办法解决些问题,先谢谢了,有兴趣者,可以加我QQ:568437613,我发dll文件过来。

31 个解决方案

#1


不懂,帮顶!

#2


-____-!!!

#3


哈哈,我笑了,我也在搞人家的东西,还待解决呢

#4


试图反编译腾讯部分DLL

反编译DLL文件(解决了再加分)

#5


可能是要对某种语言用某种反编才可以吧

#6


什么dll?用其它方法,呵呵呵。


my blog
http://ufo-crackerx.blog.163.com/

#7


这dll文件是asp.net网站bin目录下面的。
这个程序是买的别人的,但是买的时候,对方没有提供cs文件,但是我需要对它的功能进行扩充,或者说是二开发,不把那个反编译出来,不好搞啊。

#8


引用 7 楼 yw1688 的回复:
这dll文件是asp.net网站bin目录下面的。
这个程序是买的别人的,但是买的时候,对方没有提供cs文件,但是我需要对它的功能进行扩充,或者说是二开发,不把那个反编译出来,不好搞啊。


dll被加密过?

#9


引用 8 楼 bin0403 的回复:
引用 7 楼 yw1688 的回复:

这dll文件是asp.net网站bin目录下面的。
这个程序是买的别人的,但是买的时候,对方没有提供cs文件,但是我需要对它的功能进行扩充,或者说是二开发,不把那个反编译出来,不好搞啊。


dll被加密过?


肯定混淆啦

#10


还能反编译?

#11


#12


俺提一个检查点把,这个可能是大家忽视的,为了方便大家我用c#的结构体描述
数据目录总共16项。
/// </summary>
    [System.Runtime.InteropServices.StructLayout
        (LayoutKind.Sequential, Size = 128)]
    public struct DataDirectories
    {
        public ImageDataDirectory ExportTable;

        public ImageDataDirectory ImportTable;

        public ImageDataDirectory ResourceTable;

        public ImageDataDirectory ExceptionTable;

        public ImageDataDirectory CertificateTable;

        public ImageDataDirectory BaseRelocationTable;

        public ImageDataDirectory DebugTable;

        public ImageDataDirectory ArchitectureTable;

        public ImageDataDirectory GlobalPtrTable;

        public ImageDataDirectory TLSTable;

        public ImageDataDirectory LoadConfigTable;

        public ImageDataDirectory BoundImport;

        public ImageDataDirectory IAT;

        public ImageDataDirectory DelayImportDescriptorTable;

        public ImageDataDirectory CLRRuntimeHeader;
        
        public ImageDataDirectory other;              ;注意检查这一项,它必须为0,你可以使用一些工具检查下文件中的值是否为0,如果不为0,请修改为0
 

    }

#13


帮顶~

#14


UP~~

#15


12楼的朋友,请问你说的那个用什么工具可以检测出来?
楼上的朋友说代码被混淆了,混没混淆我不知道,但是我估计要先脱壳才行,因为被混淆了,至少能看到里面的混淆过的代码。但是现在什么都看不到。
哪位有什么好的办法,麻烦告诉一下,谢谢了。

#16


脱壳的问题需要楼主自己看dll是加的何种壳,使用peid就可以检查,根据楼主所提的问题,我判断楼主对脱壳,crack的工作并不熟悉,因此常用壳直接使用脱壳机进行脱壳把(有些虚拟机加的壳,俺现在都在头疼),
这里由于自己知识有限,和涉及篇幅过广,不好多说,具体去看雪论坛查查 www.pediy.com

对于楼主说的问题,UE,16进制编辑就可以解决,前提是你必须对pe结构比较熟悉(这也是破解的基础)。如果你熟悉了,不需要工具也行了,具体了参考微软的pe文档,这里给个汉化版本的链接
http://www.pediy.com/document/PE/pecoff_v8.rar

你可以用.net来写,刚好我封装了点头文件,也贴出来把
 //代表winnt的pe文件中节表的个数
     static public class WinntConstants
    {
        public const byte IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16;

        public const byte IMAGE_SIZEOF_SHORT_NAME = 8;

        //用来测试导入表,导入查找表中最高位是否为1(为1代表按序号导入)
        public const uint IMAGE_ORDINAL_FLAG32 = 0x80000000;

      //内存相对偏移地址转文件偏移地址,返回值
        unsafe static public uint RvaToOffset(DosHeardStructure* lpDosHead, uint rva)
        {
            uint ret = 0;

            

            ImageNtHeaders32* lpImageNtHeader = (ImageNtHeaders32*)((uint)lpDosHead + (*lpDosHead).e_lfanew);

            //此处申明一个节表头仅用来获取尺寸,防止后续工作中产生多余的内存浪费
            ImageNtHeaders32 imageNt = new ImageNtHeaders32();
            ImageSectionHeader ish = new ImageSectionHeader();

            ImageSectionHeader* lpImageSectionHeader = (ImageSectionHeader*)((uint)lpImageNtHeader +
                Marshal.SizeOf(imageNt));

            for (int i = 0; i < (*lpImageNtHeader).FileHeader.NumberOfSections; i++)
            {
                if ((rva >= (*lpImageSectionHeader).VirtualAddress) &&
                    (rva < ((*lpImageSectionHeader).VirtualAddress +
                      (*lpImageSectionHeader).SizeOfRawData)))
                {
                    //数据相对于节的起始地址的偏移地址RVA
                    uint sectionOffset = rva - (*lpImageSectionHeader).VirtualAddress;
                    ret = (*lpImageSectionHeader).PointerToRawData + sectionOffset;
                    break;
                }

                lpImageSectionHeader =
                    (ImageSectionHeader*)((uint)lpImageSectionHeader + Marshal.SizeOf(ish));
            }
            return ret;
        }

        //ImageFileHeader中Machine的含义
    public enum MachineEnum:ushort 
    {
        IMAGE_FILE_MACHINE_UNKNOWN = 0x0,      //适用于任何类型处理器
        IMAGE_FILE_MACHINE_AM33 = 0x1d3,       //Matsushita AM33处理器
        IMAGE_FILE_MACHINE_AMD64 = 0x8664,     //x64处理器
        IMAGE_FILE_MACHINE_ARM = 0x1c0,        //ARM小尾处理器
        IMAGE_FILE_MACHINE_EBC = 0xebc,        //EFI字节码处理器
        IMAGE_FILE_MACHINE_I386 = 0x14c,       //Intel 386或后继处理器及其兼容处理器
        IMAGE_FILE_MACHINE_IA64 = 0x200,       //Intel Itanium处理器家族
        IMAGE_FILE_MACHINE_M32R = 0x9041,      //Mitsubishi M32R小尾处理器
        IMAGE_FILE_MACHINE_MIPS16 = 0x266,     //MIPS16处理器
        IMAGE_FILE_MACHINE_MIPSFPU = 0x366,    //带FPU的MIPS处理器
        IMAGE_FILE_MACHINE_MIPSFPU16 = 0x466,  //带FPU的MIPS16处理器
        IMAGE_FILE_MACHINE_POWERPC = 0x1f0,    //PowerPC小尾处理器
        IMAGE_FILE_MACHINE_POWERPCFP = 0x1f1,  //带浮点运算支持的PowerPC处理器
        IMAGE_FILE_MACHINE_R4000 = 0x166,      //MIPS 小尾处理器
        IMAGE_FILE_MACHINE_SH3 = 0x1a2,        //Hitachi SH3处理器
        IMAGE_FILE_MACHINE_SH3DSP = 0x1a3,     //Hitachi SH3 DSP处理器
        IMAGE_FILE_MACHINE_SH4 = 0x1a6,        //Hitachi SH4处理器
        IMAGE_FILE_MACHINE_SH5 = 0x1a8,        //Hitachi SH5处理器
        IMAGE_FILE_MACHINE_THUMB = 0x1c2,      //Thumb处理器
        IMAGE_FILE_MACHINE_WCEMIPSV2 = 0x169,  //MIPS小尾WCE v2处理器

    }

    public enum SubSystemEnum : ushort
    {
        IMAGE_SUBSYSTEM_UNKNOWN = 0,                  //未知子系统
        IMAGE_SUBSYSTEM_NATIVE = 1,                   //设备驱动程序和Native Windows进程
        IMAGE_SUBSYSTEM_WINDOWS_GUI = 2,              //Windows图形用户界面(GUI)子系统
        IMAGE_SUBSYSTEM_WINDOWS_CUI = 3,              //Windows字符模式(CUI)子系统
        IMAGE_SUBSYSTEM_POSIX_CUI = 7,                //Posix字符模式子系统
        IMAGE_SUBSYSTEM_WINDOWS_CE_GUI = 9,           //Windows CE
        IMAGE_SUBSYSTEM_EFI_APPLICATION = 10,         //可扩展固件接口(EFI)应用程序
        IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER = 11, // 带引导服务的EFI驱动程序
        IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER = 12,      //带运行时服务的EFI驱动程序
        IMAGE_SUBSYSTEM_EFI_ROM = 13,                 //EFI ROM映像
        IMAGE_SUBSYSTEM_XBOX =14,                     //XBOX
    }

     //dos头结构
    [System.Runtime.InteropServices.StructLayout
        (LayoutKind.Explicit)]  
    public struct DosHeardStructure
    {
        [System.Runtime.InteropServices.FieldOffset(0)]
        public ushort e_magic;

        [System.Runtime.InteropServices.FieldOffset(2)]
        public ushort e_cblp;

        [System.Runtime.InteropServices.FieldOffset(4)]
        public ushort e_cp;

        [System.Runtime.InteropServices.FieldOffset(6)]
        public ushort e_crlc;

        [System.Runtime.InteropServices.FieldOffset(8)]
        public ushort e_cparhdr;

        [System.Runtime.InteropServices.FieldOffset(10)]
        public ushort e_minalloc;

        [System.Runtime.InteropServices.FieldOffset(12)]
        public ushort e_maxalloc;

        [System.Runtime.InteropServices.FieldOffset(14)]
        public ushort e_ss;

        [System.Runtime.InteropServices.FieldOffset(16)]
        public ushort e_sp;

        [System.Runtime.InteropServices.FieldOffset(18)]
        public ushort e_csum;

        [System.Runtime.InteropServices.FieldOffset(20)]
        public ushort e_ip;

        [System.Runtime.InteropServices.FieldOffset(22)]
        public ushort e_cs;

        [System.Runtime.InteropServices.FieldOffset(24)]
        public ushort e_lfarlc;

        [System.Runtime.InteropServices.FieldOffset(26)]
        public ushort e_ovno;

        [System.Runtime.InteropServices.FieldOffset(28)]
        unsafe public fixed ushort e_res[4];

        [System.Runtime.InteropServices.FieldOffset(36)]
        public ushort e_oemid;

        [System.Runtime.InteropServices.FieldOffset(38)]
        public ushort e_oeminfo;

        [System.Runtime.InteropServices.FieldOffset(40)]
        unsafe public fixed ushort e_res2[10];

        [System.Runtime.InteropServices.FieldOffset(60)]
        public uint e_lfanew;

    }

#17


//coff格式标准文件头
    [System.Runtime.InteropServices.StructLayout
        (LayoutKind.Explicit)]  
    public struct ImageFileHeader
    {
        /// <summary>
        /// 标识目标机器类型的数字。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(0)]
        public MachineEnum Machine;

        /// <summary>
        /// 节的数目。它给出了节表的大小,而节表紧跟着文件头。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(2)]
        public Int16 NumberOfSections;

        /// <summary>
        /// 从UTC时间1970年1月1日00:00起的总秒数(一个C运行时time_t类型的值)的低32位,
        /// 它指出文件何时被创建。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(4)]
        public uint TimeDateStamp;

        /// <summary>
        /// COFF符号表的文件偏移。如果不存在COFF符号表,此值为0。
        /// 对于映像文件来说,此值应该为0,因为已经不赞成使用COFF调试信息了。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(8)]
        public Int32 PointerToSymbolTable;

        /// <summary>
        /// 符号表中的元素数目。由于字符串表紧跟符号表,
        /// 所以可以利用这个值来定位字符串表。对于映像文件来说,此值应该为0,
        /// 因为已经不赞成使用COFF调试信息了。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(12)]
        public Int32 NumberOfSymbols;

        /// <summary>
        /// 可选文件头的大小。可执行文件需要可选文件头而目标文件并不需要。
        /// 对于目标文件来说,此值应该为0。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(16)]
        public Int16 SizeOfOptionalHeader;

        /// <summary>
        /// 指示文件属性的标志,每一位都具有含义
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(18)]
        public Int16 Characteristics;
    }

    /// <summary>
    /// 数据目录
    /// </summary>
    [System.Runtime.InteropServices.StructLayout
        (LayoutKind.Explicit,Size=8)]
    public struct ImageDataDirectory
    {
        /// <summary>
        /// 加载进内存时相对于映像基地址的偏移地址RVA
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(0)]
        public uint VirtualAddress;

        /// <summary>
        /// 表的大小
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(4)]
        public uint Size;

    }

     /// <summary>
    /// 由于c#在结构体中数组的限制,因此做编写此类
    /// </summary>
    [System.Runtime.InteropServices.StructLayout
        (LayoutKind.Sequential, Size = 128)]
    public struct DataDirectories
    {
        public ImageDataDirectory ExportTable;

        public ImageDataDirectory ImportTable;

        public ImageDataDirectory ResourceTable;

        public ImageDataDirectory ExceptionTable;

        public ImageDataDirectory CertificateTable;

        public ImageDataDirectory BaseRelocationTable;

        public ImageDataDirectory DebugTable;

        public ImageDataDirectory ArchitectureTable;

        public ImageDataDirectory GlobalPtrTable;

        public ImageDataDirectory TLSTable;

        public ImageDataDirectory LoadConfigTable;

        public ImageDataDirectory BoundImport;

        public ImageDataDirectory IAT;

        public ImageDataDirectory DelayImportDescriptorTable;

        public ImageDataDirectory CLRRuntimeHeader;

        public ImageDataDirectory Other;
    }

#18


   //可选文件头结构IMAGE_OPTIONAL_HEADER32 ,普通pe32结构
    [System.Runtime.InteropServices.StructLayout
        (LayoutKind.Explicit)]  
    public struct ImageOptionalHeader32
    {
        /// <summary>
        /// PE状态签名这个无符号整数指出了映像文件的状态。
        /// 最常用的数字是0x10B,它表明这是一个正常的可执行文件。
        /// 0x107表明这是一个ROM映像,0x20B表明这是一个PE32+可执行文件。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(0)]
        public ushort Magic;

        /// <summary>
        /// //链接器的主版本号
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(2)]
        public byte MajorLinkerVersion;

        /// <summary>
        /// 链接器的次版本号
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(3)]
        public byte MinorLinkerVersion;

        /// <summary>
        /// 代码节(.text)的大小。如果有多个代码节的话,它是所有代码节的和。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(4)]
        public uint SizeOfCode;

        /// <summary>
        /// 已初始化数据节的大小。如果有多个这样的数据节的话,它是所有这些数据节的和。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(8)]
        public uint SizeOfInitializedData;

        /// <summary>
        /// 未初始化数据节(.bss)的大小。如果有多个.bss节的话,它是所有这些节的和。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(12)]
        public uint SizeOfUninitializedData;

        /// <summary>
        /// 当可执行文件被加载进内存时其入口点相对于映像基址的偏移地址。
        /// 对于一般程序映像来说,它就是启动地址。
        /// 对于设备驱动程序来说,它是初始化函数的地址。
        /// 入口点对于DLL来说是可选的。如果不存在入口点的话,这个域必须为0。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(16)]
        public uint AddressOfEntryPoint;

        /// <summary>
        /// 当映像被加载进内存时代码节的开头相对于映像基址的偏移地址。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(20)]
        public uint BaseOfCode;

        /// <summary>
        /// 当映像被加载进内存时数据节的开头相对于映像基址的偏移地址,它并不存在于PE32+中
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(24)]
        public uint BaseOfData;

        /// <summary>
        /// 当加载进内存时映像的第一个字节的首选地址。它必须是64K的倍数。
        /// DLL默认是0x10000000。Windows CE EXE默认是0x00010000。
        /// Windows NT、Windows 2000、Windows XP、 Windows 95、Windows 98
        /// 和 Windows Me 默认是0x00400000
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(28)]
        public uint ImageBase;

        /// <summary>
        /// 当加载进内存时节的对齐值(以字节计)。
        /// 它必须大于或等于FileAlignment。默认是相应系统的页面大小。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(32)]
        public uint SectionAlignment;

        /// <summary>
        /// 用来对齐映像文件的节中的原始数据的对齐因子(以字节计)。
        /// 它应该是界于512和64K之间的2的幂(包括这两个边界值)。
        /// 默认是512。如果SectionAlignment小于相应系统的页面大小,
        /// 那么FileAlignment必须与SectionAlignment匹配。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(36)]
        public uint FileAlignment;

        /// <summary>
        /// 所需操作系统的主版本号。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(40)]
        public ushort MajorOperatingSystemVersion;

        /// <summary>
        /// 所需操作系统的次版本号。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(42)]
        public ushort MinorOperatingSystemVersion;

        /// <summary>
        /// 映像的主版本号。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(44)]
        public ushort MajorImageVersion;

        /// <summary>
        /// 映像的次版本号。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(46)]
        public ushort MinorImageVersion;

        /// <summary>
        /// 子系统的主版本号。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(48)]
        public ushort MajorSubsystemVersion;

        /// <summary>
        /// 子系统的次版本号。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(50)]
        public ushort MinorSubsystemVersion;

        /// <summary>
        /// 保留,必须为0。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(52)]
        public uint Win32VersionValue;

        /// <summary>
        /// 当映像被加载进内存时的大小(以字节计),包括所有的文件头。
        /// 它必须是SectionAlignment的倍数。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(56)]
        public uint SizeOfImage;

        /// <summary>
        /// MS-DOS占位程序、PE文件头和节头的总大小,向上舍入为FileAlignment的倍数。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(60)]
        public uint SizeOfHeaders;

        /// <summary>
        /// 映像文件的校验和。计算校验和的算法被合并到了IMAGEHLP.DLL 中。
        /// 以下程序在加载时被校验以确定其是否合法:
        /// 所有的驱动程序、任何在引导时被加载的DLL以及加载进关键Windows进程中的DLL。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(64)]
        public uint CheckSum;

        /// <summary>
        /// 运行此映像所需的子系统。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(68)]
        public SubSystemEnum Subsystem;

        /// <summary>
        /// DLL特征,不同位具有各自含义
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(70)]
        public ushort DllCharacteristics;

        /// <summary>
        /// 保留的堆栈大小。只有SizeOfStackCommit指定的部分被提交;
        /// 其余的每次可用一页,直到到达保留的大小为止。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(72)]
        public uint SizeOfStackReserve;

        /// <summary>
        /// 提交的堆栈大小。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(76)]
        public uint SizeOfStackCommit;

        /// <summary>
        /// 保留的局部堆空间大小。只有SizeOfHeapCommit指定的部分被提交;
        /// 其余的每次可用一页,直到到达保留的大小为止。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(80)]
        public uint SizeOfHeapReserve;

        /// <summary>
        /// 提交的局部堆空间大小。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(84)]
        public uint SizeOfHeapCommit;

        /// <summary>
        /// 保留,必须为0。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(88)]
        public uint LoaderFlags;

        /// <summary>
        /// 可选文件头其余部分中数据目录项的个数。每个数据目录描述了一个表的位置和大小。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(92)]
        public uint NumberOfRvaAndSizes;

        /// <summary>
        /// 数据目录
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(96)]
        public DataDirectories DataDirectory;
    }

#19


Reflector 是太出名了,当然很多软件商想办法反它,但是可以不用这个工具的,你试试 ILDASM 是否能读,况且能看到IL码的话,你可以反编译出来修改的。如果不能,你就要脱壳了。




my blog
http://ufo-crackerx.blog.163.com/

#20


万幸的是,现在某些虚拟机加壳工具对msil支持并不好,也就是说,常见的都是些基本壳

#21


zhu_jiang,你写的那些代码,我不知道怎么用,留着以后再看了,呵呵,谢谢。
我的确对汇编啊,脱壳之类的不了解,因为一直是做网站的,加壳解壳那些好少接触到,最近准备恶补,看雪学院,老早就听说过了,不过那是四五年前了,那时候基础太差,进了一次后,就没有再进了,今天又重新注册了账号,发现里面好多不错的东西,等明天之后我就可以下了。
crackdung,用 ILDASM 能读,请问这时候要用什么工具来反编译呢?ILASM么?

#22


楼主想破解它?还是想知道DLL的流程及编码,自己二次开发?



my blog
http://ufo-crackerx.blog.163.com/

#23


crackdung,我主要是想进行二次开发,但是这个程序是发布版本的,我要在上面进行扩展,所以我想取得它的cs文件,但是因为是发布版的,dll还都被处理过了,没法操作,所以才想把这个文件给破解了。不知道你有什么建议或者方案给我没。

#24


肯定是加密过的。

基本很困难。

不要考虑了。

#25


破解要达到什么效果?


my blog
http://ufo-crackerx.blog.163.com/

#26


尽可能的还原cs代码吧,比如我要改动某个页面,我先改了aspx文件,并且这个时候还要改它的cs代码,如果不能还原,那我怎么做才能在不影响程序运行的情况下,对程序进行扩展呢?

#27


要做大量工作的话,我建议你不要考虑了。如果你想改图标这类的东西,可以考虑。
如果你懂得IL码的,你可以直接用ILDASM转存,然后直接在IL文件修改它,我也经常这样做,只是我改动的地方不多,我只是达到破解的目的。

现在不知道你DLL加密的强度,不好说的。



my blog
http://ufo-crackerx.blog.163.com/

#28


我想尽量试试,就算破解不成,也明白很多东西了,实在不行,买的这套程序就当过渡用了,先让它上线,然后组织人手来重新开发一个一样的。
crackdung,你方便的话,加一下我的QQ,我发一个dll给你,你帮我看看,看看能不能看出它是如何加密的,能不能解密,好么?QQ:229495352

#29


楼主您的这个问题解决了吗?我现在刚好在开发的时候也碰到了和您一样的问题!!!请问如何解决的???

#30


我也正在学习反编汇,进来受教了。

#31


我也是碰到同样的问题,如何解决

#1


不懂,帮顶!

#2


-____-!!!

#3


哈哈,我笑了,我也在搞人家的东西,还待解决呢

#4


试图反编译腾讯部分DLL

反编译DLL文件(解决了再加分)

#5


可能是要对某种语言用某种反编才可以吧

#6


什么dll?用其它方法,呵呵呵。


my blog
http://ufo-crackerx.blog.163.com/

#7


这dll文件是asp.net网站bin目录下面的。
这个程序是买的别人的,但是买的时候,对方没有提供cs文件,但是我需要对它的功能进行扩充,或者说是二开发,不把那个反编译出来,不好搞啊。

#8


引用 7 楼 yw1688 的回复:
这dll文件是asp.net网站bin目录下面的。
这个程序是买的别人的,但是买的时候,对方没有提供cs文件,但是我需要对它的功能进行扩充,或者说是二开发,不把那个反编译出来,不好搞啊。


dll被加密过?

#9


引用 8 楼 bin0403 的回复:
引用 7 楼 yw1688 的回复:

这dll文件是asp.net网站bin目录下面的。
这个程序是买的别人的,但是买的时候,对方没有提供cs文件,但是我需要对它的功能进行扩充,或者说是二开发,不把那个反编译出来,不好搞啊。


dll被加密过?


肯定混淆啦

#10


还能反编译?

#11


#12


俺提一个检查点把,这个可能是大家忽视的,为了方便大家我用c#的结构体描述
数据目录总共16项。
/// </summary>
    [System.Runtime.InteropServices.StructLayout
        (LayoutKind.Sequential, Size = 128)]
    public struct DataDirectories
    {
        public ImageDataDirectory ExportTable;

        public ImageDataDirectory ImportTable;

        public ImageDataDirectory ResourceTable;

        public ImageDataDirectory ExceptionTable;

        public ImageDataDirectory CertificateTable;

        public ImageDataDirectory BaseRelocationTable;

        public ImageDataDirectory DebugTable;

        public ImageDataDirectory ArchitectureTable;

        public ImageDataDirectory GlobalPtrTable;

        public ImageDataDirectory TLSTable;

        public ImageDataDirectory LoadConfigTable;

        public ImageDataDirectory BoundImport;

        public ImageDataDirectory IAT;

        public ImageDataDirectory DelayImportDescriptorTable;

        public ImageDataDirectory CLRRuntimeHeader;
        
        public ImageDataDirectory other;              ;注意检查这一项,它必须为0,你可以使用一些工具检查下文件中的值是否为0,如果不为0,请修改为0
 

    }

#13


帮顶~

#14


UP~~

#15


12楼的朋友,请问你说的那个用什么工具可以检测出来?
楼上的朋友说代码被混淆了,混没混淆我不知道,但是我估计要先脱壳才行,因为被混淆了,至少能看到里面的混淆过的代码。但是现在什么都看不到。
哪位有什么好的办法,麻烦告诉一下,谢谢了。

#16


脱壳的问题需要楼主自己看dll是加的何种壳,使用peid就可以检查,根据楼主所提的问题,我判断楼主对脱壳,crack的工作并不熟悉,因此常用壳直接使用脱壳机进行脱壳把(有些虚拟机加的壳,俺现在都在头疼),
这里由于自己知识有限,和涉及篇幅过广,不好多说,具体去看雪论坛查查 www.pediy.com

对于楼主说的问题,UE,16进制编辑就可以解决,前提是你必须对pe结构比较熟悉(这也是破解的基础)。如果你熟悉了,不需要工具也行了,具体了参考微软的pe文档,这里给个汉化版本的链接
http://www.pediy.com/document/PE/pecoff_v8.rar

你可以用.net来写,刚好我封装了点头文件,也贴出来把
 //代表winnt的pe文件中节表的个数
     static public class WinntConstants
    {
        public const byte IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16;

        public const byte IMAGE_SIZEOF_SHORT_NAME = 8;

        //用来测试导入表,导入查找表中最高位是否为1(为1代表按序号导入)
        public const uint IMAGE_ORDINAL_FLAG32 = 0x80000000;

      //内存相对偏移地址转文件偏移地址,返回值
        unsafe static public uint RvaToOffset(DosHeardStructure* lpDosHead, uint rva)
        {
            uint ret = 0;

            

            ImageNtHeaders32* lpImageNtHeader = (ImageNtHeaders32*)((uint)lpDosHead + (*lpDosHead).e_lfanew);

            //此处申明一个节表头仅用来获取尺寸,防止后续工作中产生多余的内存浪费
            ImageNtHeaders32 imageNt = new ImageNtHeaders32();
            ImageSectionHeader ish = new ImageSectionHeader();

            ImageSectionHeader* lpImageSectionHeader = (ImageSectionHeader*)((uint)lpImageNtHeader +
                Marshal.SizeOf(imageNt));

            for (int i = 0; i < (*lpImageNtHeader).FileHeader.NumberOfSections; i++)
            {
                if ((rva >= (*lpImageSectionHeader).VirtualAddress) &&
                    (rva < ((*lpImageSectionHeader).VirtualAddress +
                      (*lpImageSectionHeader).SizeOfRawData)))
                {
                    //数据相对于节的起始地址的偏移地址RVA
                    uint sectionOffset = rva - (*lpImageSectionHeader).VirtualAddress;
                    ret = (*lpImageSectionHeader).PointerToRawData + sectionOffset;
                    break;
                }

                lpImageSectionHeader =
                    (ImageSectionHeader*)((uint)lpImageSectionHeader + Marshal.SizeOf(ish));
            }
            return ret;
        }

        //ImageFileHeader中Machine的含义
    public enum MachineEnum:ushort 
    {
        IMAGE_FILE_MACHINE_UNKNOWN = 0x0,      //适用于任何类型处理器
        IMAGE_FILE_MACHINE_AM33 = 0x1d3,       //Matsushita AM33处理器
        IMAGE_FILE_MACHINE_AMD64 = 0x8664,     //x64处理器
        IMAGE_FILE_MACHINE_ARM = 0x1c0,        //ARM小尾处理器
        IMAGE_FILE_MACHINE_EBC = 0xebc,        //EFI字节码处理器
        IMAGE_FILE_MACHINE_I386 = 0x14c,       //Intel 386或后继处理器及其兼容处理器
        IMAGE_FILE_MACHINE_IA64 = 0x200,       //Intel Itanium处理器家族
        IMAGE_FILE_MACHINE_M32R = 0x9041,      //Mitsubishi M32R小尾处理器
        IMAGE_FILE_MACHINE_MIPS16 = 0x266,     //MIPS16处理器
        IMAGE_FILE_MACHINE_MIPSFPU = 0x366,    //带FPU的MIPS处理器
        IMAGE_FILE_MACHINE_MIPSFPU16 = 0x466,  //带FPU的MIPS16处理器
        IMAGE_FILE_MACHINE_POWERPC = 0x1f0,    //PowerPC小尾处理器
        IMAGE_FILE_MACHINE_POWERPCFP = 0x1f1,  //带浮点运算支持的PowerPC处理器
        IMAGE_FILE_MACHINE_R4000 = 0x166,      //MIPS 小尾处理器
        IMAGE_FILE_MACHINE_SH3 = 0x1a2,        //Hitachi SH3处理器
        IMAGE_FILE_MACHINE_SH3DSP = 0x1a3,     //Hitachi SH3 DSP处理器
        IMAGE_FILE_MACHINE_SH4 = 0x1a6,        //Hitachi SH4处理器
        IMAGE_FILE_MACHINE_SH5 = 0x1a8,        //Hitachi SH5处理器
        IMAGE_FILE_MACHINE_THUMB = 0x1c2,      //Thumb处理器
        IMAGE_FILE_MACHINE_WCEMIPSV2 = 0x169,  //MIPS小尾WCE v2处理器

    }

    public enum SubSystemEnum : ushort
    {
        IMAGE_SUBSYSTEM_UNKNOWN = 0,                  //未知子系统
        IMAGE_SUBSYSTEM_NATIVE = 1,                   //设备驱动程序和Native Windows进程
        IMAGE_SUBSYSTEM_WINDOWS_GUI = 2,              //Windows图形用户界面(GUI)子系统
        IMAGE_SUBSYSTEM_WINDOWS_CUI = 3,              //Windows字符模式(CUI)子系统
        IMAGE_SUBSYSTEM_POSIX_CUI = 7,                //Posix字符模式子系统
        IMAGE_SUBSYSTEM_WINDOWS_CE_GUI = 9,           //Windows CE
        IMAGE_SUBSYSTEM_EFI_APPLICATION = 10,         //可扩展固件接口(EFI)应用程序
        IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER = 11, // 带引导服务的EFI驱动程序
        IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER = 12,      //带运行时服务的EFI驱动程序
        IMAGE_SUBSYSTEM_EFI_ROM = 13,                 //EFI ROM映像
        IMAGE_SUBSYSTEM_XBOX =14,                     //XBOX
    }

     //dos头结构
    [System.Runtime.InteropServices.StructLayout
        (LayoutKind.Explicit)]  
    public struct DosHeardStructure
    {
        [System.Runtime.InteropServices.FieldOffset(0)]
        public ushort e_magic;

        [System.Runtime.InteropServices.FieldOffset(2)]
        public ushort e_cblp;

        [System.Runtime.InteropServices.FieldOffset(4)]
        public ushort e_cp;

        [System.Runtime.InteropServices.FieldOffset(6)]
        public ushort e_crlc;

        [System.Runtime.InteropServices.FieldOffset(8)]
        public ushort e_cparhdr;

        [System.Runtime.InteropServices.FieldOffset(10)]
        public ushort e_minalloc;

        [System.Runtime.InteropServices.FieldOffset(12)]
        public ushort e_maxalloc;

        [System.Runtime.InteropServices.FieldOffset(14)]
        public ushort e_ss;

        [System.Runtime.InteropServices.FieldOffset(16)]
        public ushort e_sp;

        [System.Runtime.InteropServices.FieldOffset(18)]
        public ushort e_csum;

        [System.Runtime.InteropServices.FieldOffset(20)]
        public ushort e_ip;

        [System.Runtime.InteropServices.FieldOffset(22)]
        public ushort e_cs;

        [System.Runtime.InteropServices.FieldOffset(24)]
        public ushort e_lfarlc;

        [System.Runtime.InteropServices.FieldOffset(26)]
        public ushort e_ovno;

        [System.Runtime.InteropServices.FieldOffset(28)]
        unsafe public fixed ushort e_res[4];

        [System.Runtime.InteropServices.FieldOffset(36)]
        public ushort e_oemid;

        [System.Runtime.InteropServices.FieldOffset(38)]
        public ushort e_oeminfo;

        [System.Runtime.InteropServices.FieldOffset(40)]
        unsafe public fixed ushort e_res2[10];

        [System.Runtime.InteropServices.FieldOffset(60)]
        public uint e_lfanew;

    }

#17


//coff格式标准文件头
    [System.Runtime.InteropServices.StructLayout
        (LayoutKind.Explicit)]  
    public struct ImageFileHeader
    {
        /// <summary>
        /// 标识目标机器类型的数字。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(0)]
        public MachineEnum Machine;

        /// <summary>
        /// 节的数目。它给出了节表的大小,而节表紧跟着文件头。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(2)]
        public Int16 NumberOfSections;

        /// <summary>
        /// 从UTC时间1970年1月1日00:00起的总秒数(一个C运行时time_t类型的值)的低32位,
        /// 它指出文件何时被创建。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(4)]
        public uint TimeDateStamp;

        /// <summary>
        /// COFF符号表的文件偏移。如果不存在COFF符号表,此值为0。
        /// 对于映像文件来说,此值应该为0,因为已经不赞成使用COFF调试信息了。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(8)]
        public Int32 PointerToSymbolTable;

        /// <summary>
        /// 符号表中的元素数目。由于字符串表紧跟符号表,
        /// 所以可以利用这个值来定位字符串表。对于映像文件来说,此值应该为0,
        /// 因为已经不赞成使用COFF调试信息了。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(12)]
        public Int32 NumberOfSymbols;

        /// <summary>
        /// 可选文件头的大小。可执行文件需要可选文件头而目标文件并不需要。
        /// 对于目标文件来说,此值应该为0。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(16)]
        public Int16 SizeOfOptionalHeader;

        /// <summary>
        /// 指示文件属性的标志,每一位都具有含义
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(18)]
        public Int16 Characteristics;
    }

    /// <summary>
    /// 数据目录
    /// </summary>
    [System.Runtime.InteropServices.StructLayout
        (LayoutKind.Explicit,Size=8)]
    public struct ImageDataDirectory
    {
        /// <summary>
        /// 加载进内存时相对于映像基地址的偏移地址RVA
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(0)]
        public uint VirtualAddress;

        /// <summary>
        /// 表的大小
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(4)]
        public uint Size;

    }

     /// <summary>
    /// 由于c#在结构体中数组的限制,因此做编写此类
    /// </summary>
    [System.Runtime.InteropServices.StructLayout
        (LayoutKind.Sequential, Size = 128)]
    public struct DataDirectories
    {
        public ImageDataDirectory ExportTable;

        public ImageDataDirectory ImportTable;

        public ImageDataDirectory ResourceTable;

        public ImageDataDirectory ExceptionTable;

        public ImageDataDirectory CertificateTable;

        public ImageDataDirectory BaseRelocationTable;

        public ImageDataDirectory DebugTable;

        public ImageDataDirectory ArchitectureTable;

        public ImageDataDirectory GlobalPtrTable;

        public ImageDataDirectory TLSTable;

        public ImageDataDirectory LoadConfigTable;

        public ImageDataDirectory BoundImport;

        public ImageDataDirectory IAT;

        public ImageDataDirectory DelayImportDescriptorTable;

        public ImageDataDirectory CLRRuntimeHeader;

        public ImageDataDirectory Other;
    }

#18


   //可选文件头结构IMAGE_OPTIONAL_HEADER32 ,普通pe32结构
    [System.Runtime.InteropServices.StructLayout
        (LayoutKind.Explicit)]  
    public struct ImageOptionalHeader32
    {
        /// <summary>
        /// PE状态签名这个无符号整数指出了映像文件的状态。
        /// 最常用的数字是0x10B,它表明这是一个正常的可执行文件。
        /// 0x107表明这是一个ROM映像,0x20B表明这是一个PE32+可执行文件。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(0)]
        public ushort Magic;

        /// <summary>
        /// //链接器的主版本号
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(2)]
        public byte MajorLinkerVersion;

        /// <summary>
        /// 链接器的次版本号
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(3)]
        public byte MinorLinkerVersion;

        /// <summary>
        /// 代码节(.text)的大小。如果有多个代码节的话,它是所有代码节的和。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(4)]
        public uint SizeOfCode;

        /// <summary>
        /// 已初始化数据节的大小。如果有多个这样的数据节的话,它是所有这些数据节的和。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(8)]
        public uint SizeOfInitializedData;

        /// <summary>
        /// 未初始化数据节(.bss)的大小。如果有多个.bss节的话,它是所有这些节的和。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(12)]
        public uint SizeOfUninitializedData;

        /// <summary>
        /// 当可执行文件被加载进内存时其入口点相对于映像基址的偏移地址。
        /// 对于一般程序映像来说,它就是启动地址。
        /// 对于设备驱动程序来说,它是初始化函数的地址。
        /// 入口点对于DLL来说是可选的。如果不存在入口点的话,这个域必须为0。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(16)]
        public uint AddressOfEntryPoint;

        /// <summary>
        /// 当映像被加载进内存时代码节的开头相对于映像基址的偏移地址。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(20)]
        public uint BaseOfCode;

        /// <summary>
        /// 当映像被加载进内存时数据节的开头相对于映像基址的偏移地址,它并不存在于PE32+中
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(24)]
        public uint BaseOfData;

        /// <summary>
        /// 当加载进内存时映像的第一个字节的首选地址。它必须是64K的倍数。
        /// DLL默认是0x10000000。Windows CE EXE默认是0x00010000。
        /// Windows NT、Windows 2000、Windows XP、 Windows 95、Windows 98
        /// 和 Windows Me 默认是0x00400000
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(28)]
        public uint ImageBase;

        /// <summary>
        /// 当加载进内存时节的对齐值(以字节计)。
        /// 它必须大于或等于FileAlignment。默认是相应系统的页面大小。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(32)]
        public uint SectionAlignment;

        /// <summary>
        /// 用来对齐映像文件的节中的原始数据的对齐因子(以字节计)。
        /// 它应该是界于512和64K之间的2的幂(包括这两个边界值)。
        /// 默认是512。如果SectionAlignment小于相应系统的页面大小,
        /// 那么FileAlignment必须与SectionAlignment匹配。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(36)]
        public uint FileAlignment;

        /// <summary>
        /// 所需操作系统的主版本号。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(40)]
        public ushort MajorOperatingSystemVersion;

        /// <summary>
        /// 所需操作系统的次版本号。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(42)]
        public ushort MinorOperatingSystemVersion;

        /// <summary>
        /// 映像的主版本号。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(44)]
        public ushort MajorImageVersion;

        /// <summary>
        /// 映像的次版本号。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(46)]
        public ushort MinorImageVersion;

        /// <summary>
        /// 子系统的主版本号。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(48)]
        public ushort MajorSubsystemVersion;

        /// <summary>
        /// 子系统的次版本号。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(50)]
        public ushort MinorSubsystemVersion;

        /// <summary>
        /// 保留,必须为0。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(52)]
        public uint Win32VersionValue;

        /// <summary>
        /// 当映像被加载进内存时的大小(以字节计),包括所有的文件头。
        /// 它必须是SectionAlignment的倍数。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(56)]
        public uint SizeOfImage;

        /// <summary>
        /// MS-DOS占位程序、PE文件头和节头的总大小,向上舍入为FileAlignment的倍数。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(60)]
        public uint SizeOfHeaders;

        /// <summary>
        /// 映像文件的校验和。计算校验和的算法被合并到了IMAGEHLP.DLL 中。
        /// 以下程序在加载时被校验以确定其是否合法:
        /// 所有的驱动程序、任何在引导时被加载的DLL以及加载进关键Windows进程中的DLL。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(64)]
        public uint CheckSum;

        /// <summary>
        /// 运行此映像所需的子系统。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(68)]
        public SubSystemEnum Subsystem;

        /// <summary>
        /// DLL特征,不同位具有各自含义
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(70)]
        public ushort DllCharacteristics;

        /// <summary>
        /// 保留的堆栈大小。只有SizeOfStackCommit指定的部分被提交;
        /// 其余的每次可用一页,直到到达保留的大小为止。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(72)]
        public uint SizeOfStackReserve;

        /// <summary>
        /// 提交的堆栈大小。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(76)]
        public uint SizeOfStackCommit;

        /// <summary>
        /// 保留的局部堆空间大小。只有SizeOfHeapCommit指定的部分被提交;
        /// 其余的每次可用一页,直到到达保留的大小为止。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(80)]
        public uint SizeOfHeapReserve;

        /// <summary>
        /// 提交的局部堆空间大小。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(84)]
        public uint SizeOfHeapCommit;

        /// <summary>
        /// 保留,必须为0。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(88)]
        public uint LoaderFlags;

        /// <summary>
        /// 可选文件头其余部分中数据目录项的个数。每个数据目录描述了一个表的位置和大小。
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(92)]
        public uint NumberOfRvaAndSizes;

        /// <summary>
        /// 数据目录
        /// </summary>
        [System.Runtime.InteropServices.FieldOffset(96)]
        public DataDirectories DataDirectory;
    }

#19


Reflector 是太出名了,当然很多软件商想办法反它,但是可以不用这个工具的,你试试 ILDASM 是否能读,况且能看到IL码的话,你可以反编译出来修改的。如果不能,你就要脱壳了。




my blog
http://ufo-crackerx.blog.163.com/

#20


万幸的是,现在某些虚拟机加壳工具对msil支持并不好,也就是说,常见的都是些基本壳

#21


zhu_jiang,你写的那些代码,我不知道怎么用,留着以后再看了,呵呵,谢谢。
我的确对汇编啊,脱壳之类的不了解,因为一直是做网站的,加壳解壳那些好少接触到,最近准备恶补,看雪学院,老早就听说过了,不过那是四五年前了,那时候基础太差,进了一次后,就没有再进了,今天又重新注册了账号,发现里面好多不错的东西,等明天之后我就可以下了。
crackdung,用 ILDASM 能读,请问这时候要用什么工具来反编译呢?ILASM么?

#22


楼主想破解它?还是想知道DLL的流程及编码,自己二次开发?



my blog
http://ufo-crackerx.blog.163.com/

#23


crackdung,我主要是想进行二次开发,但是这个程序是发布版本的,我要在上面进行扩展,所以我想取得它的cs文件,但是因为是发布版的,dll还都被处理过了,没法操作,所以才想把这个文件给破解了。不知道你有什么建议或者方案给我没。

#24


肯定是加密过的。

基本很困难。

不要考虑了。

#25


破解要达到什么效果?


my blog
http://ufo-crackerx.blog.163.com/

#26


尽可能的还原cs代码吧,比如我要改动某个页面,我先改了aspx文件,并且这个时候还要改它的cs代码,如果不能还原,那我怎么做才能在不影响程序运行的情况下,对程序进行扩展呢?

#27


要做大量工作的话,我建议你不要考虑了。如果你想改图标这类的东西,可以考虑。
如果你懂得IL码的,你可以直接用ILDASM转存,然后直接在IL文件修改它,我也经常这样做,只是我改动的地方不多,我只是达到破解的目的。

现在不知道你DLL加密的强度,不好说的。



my blog
http://ufo-crackerx.blog.163.com/

#28


我想尽量试试,就算破解不成,也明白很多东西了,实在不行,买的这套程序就当过渡用了,先让它上线,然后组织人手来重新开发一个一样的。
crackdung,你方便的话,加一下我的QQ,我发一个dll给你,你帮我看看,看看能不能看出它是如何加密的,能不能解密,好么?QQ:229495352

#29


楼主您的这个问题解决了吗?我现在刚好在开发的时候也碰到了和您一样的问题!!!请问如何解决的???

#30


我也正在学习反编汇,进来受教了。

#31


我也是碰到同样的问题,如何解决