吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6039|回复: 13
收起左侧

[其他转载] MemoryModule For .NET[内存DLL/EXE加载] v1.0.0.2 by wwh1004

[复制链接]
wwh1004 发表于 2018-3-25 15:51
本帖最后由 wwh1004 于 2018-9-23 22:54 编辑

打算写个.net程序集打包器,但是fastlzma2/lzma2没.net版本的(LZMA SDK里面c#源码的是lzma,不是lzma2,而且似乎压缩率低很多?)。
于是去github上找peloader,发现了memorymodule,无奈它的.net版本不是太好用,还不能AnyCPU编译。
于是自己转换源码,把c代码转成了c#的,方法名,实现过程和memorymodule完全一致,并且支持AnyCPU编译!!!!!

例子:
#pragma warning disable IDE0001
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading;
using MemoryModule;
using size_t = System.IntPtr;

namespace Test
{
    public static class MemoryModuleTest
    {
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        private delegate size_t FastLzma2CompressProc(byte[] dst, size_t dstCapacity, byte[] src, size_t srcSize, int compressionLevel, uint nbThreads);

        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        private delegate size_t FastLzma2DecompressProc(byte[] dst, size_t dstCapacity, byte[] src, size_t compressedSize);

        private static FastLzma2CompressProc FastLzma2Compress;

        private static FastLzma2DecompressProc FastLzma2Decompress;

        public static void Test()
        {
            MemoryModule memoryModule;
            byte[] src;
            byte[] deced;

            using (BinaryReader binaryReader = new BinaryReader(Assembly.GetExecutingAssembly().GetManifestResourceStream($"Test.FLzma2_{(Environment.Is64BitProcess ? "64" : "32")}.dll")))
                memoryModule = MemoryModule.Create(binaryReader.ReadBytes((int)binaryReader.BaseStream.Length));
            FastLzma2Compress = memoryModule.GetProcDelegate<FastLzma2CompressProc>("FL2_compressMt");
            FastLzma2Decompress = memoryModule.GetProcDelegate<FastLzma2DecompressProc>("FL2_decompress");
            List<byte> byteList = new List<byte>();
            foreach (string filePath in Directory.EnumerateFiles(Environment.CurrentDirectory))
                byteList.AddRange(File.ReadAllBytes(filePath));
            src = byteList.ToArray();
            Compress(src);
            deced = Decompress((size_t)src.Length);
            Console.WriteLine(src.SequenceEqual(deced));
            GC.Collect();
            while (true)
                Thread.Sleep(int.MaxValue);
        }

        private static void Compress(byte[] src)
        {
            byte[] tmp;
            size_t size;
            byte[] dest;

            tmp = new byte[src.Length + 0x4000];
            size = FastLzma2Compress(tmp, (size_t)tmp.Length, src, (size_t)src.Length, 100, 0);
            dest = new byte[(ulong)size];
            Buffer.BlockCopy(tmp, 0, dest, 0, dest.Length);
            File.WriteAllBytes("enced", dest);
        }

        private static byte[] Decompress(size_t length)
        {
            byte[] src;
            byte[] dest;

            src = File.ReadAllBytes("enced");
            dest = new byte[(ulong)length];
            FastLzma2Decompress(dest, (size_t)dest.Length, src, (size_t)src.Length);
            return dest;
        }
    }
}
#pragma warning restore IDE0001


更完整的例子在Tests项目中有,压缩包里找

github:  https://github.com/wwh1004/MemoryModule
给个fork给个star呗

上不去github的这里下载(可能不是最新版本,更新都是放在github上)
内存DLL加载 MemoryModuleSX.7z (76.15 KB, 下载次数: 79)

免费评分

参与人数 5吾爱币 +7 热心值 +5 收起 理由
突突兔 + 1 + 1 .Net 逆向大佬
涛的世界 + 1 + 1 用心讨论,共获提升!
kesshei + 1 + 1 我很赞同!
非凡公子 + 1 + 1 前排支持大佬
苏紫方璇 + 3 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| wwh1004 发表于 2018-3-28 23:24
peter336620 发表于 2018-3-28 23:20
这是反编译看dll或者exe里的源代码吗?想问问如果exe被加密狗加密用这个MemoryModuleSX能有效看到源代码不 ...

不是。loadlibrary只能指定路径,不能加载内存中的dll。这个东西实现了loadlibrary内存中dll
peter336620 发表于 2018-3-28 23:20
这是反编译看dll或者exe里的源代码吗?想问问如果exe被加密狗加密用这个MemoryModuleSX能有效看到源代码不?
yikuaidao 发表于 2018-3-25 16:11
shelly1314 发表于 2018-3-25 16:27
已star,第一个
头像被屏蔽
liucq 发表于 2018-3-25 17:33
提示: 作者被禁止或删除 内容自动屏蔽
peterq521 发表于 2018-3-26 13:49
专业工具 楼主辛苦 感谢共享
androids7 发表于 2018-3-27 07:39 来自手机
这是搞什么用的
chenjacker 发表于 2018-4-23 22:26
上不去github的这里下载(可能不是最新版本,更新都是放在github上)
chenjacker 发表于 2018-4-23 22:30

DotNet Dumper 1.0 by CodeRipper



will show only .NET processes under list,
all dumps will be saved under dumps
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 22:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表