Beispiel #1
0
            public AOBScanner(Process process, IntPtr handle, DSRInterface setDSRInterface)
            {
                dsrInterface = setDSRInterface;
                memRegions   = new List <MEMORY_BASIC_INFORMATION>();
                IntPtr memRegionAddr = process.MainModule.BaseAddress;
                IntPtr mainModuleEnd = process.MainModule.BaseAddress + process.MainModule.ModuleMemorySize;
                uint   queryResult;

                do
                {
                    MEMORY_BASIC_INFORMATION memInfo = new MEMORY_BASIC_INFORMATION();
                    queryResult = VirtualQueryEx(handle, memRegionAddr, out memInfo, (uint)Marshal.SizeOf(memInfo));
                    if (queryResult != 0)
                    {
                        if ((memInfo.State & MEM_COMMIT) != 0 && (memInfo.Protect & PAGE_GUARD) == 0 && (memInfo.Protect & PAGE_EXECUTE_ANY) != 0)
                        {
                            memRegions.Add(memInfo);
                        }
                        memRegionAddr = (IntPtr)((ulong)memInfo.BaseAddress.ToInt64() + memInfo.RegionSize);
                    }
                } while (queryResult != 0 && memRegionAddr.ToInt64() < mainModuleEnd.ToInt64());

                readMemory = new Dictionary <IntPtr, byte[]>();
                foreach (MEMORY_BASIC_INFORMATION memRegion in memRegions)
                {
                    readMemory[memRegion.BaseAddress] = dsrInterface.ReadBytes(memRegion.BaseAddress, (int)memRegion.RegionSize);
                }
            }
        public DSRProcess(Process candidate)
        {
            process = candidate;
            ID      = process.Id;

            int size = process.MainModule.ModuleMemorySize;

            if (versions.ContainsKey(size))
            {
                Version = versions[size];
            }
            else
            {
                Version = String.Format("0x{0:X}", size);
            }

            offsets      = new DSROffsets();
            dsrInterface = new DSRInterface(process);
            try
            {
                DSRInterface.AOBScanner scanner = dsrInterface.GetAOBScanner();
                offsets.GraphicsDataPtr = scanner.Scan(DSROffsets.GraphicsDataAOB, 3);
                offsets.WorldChrBasePtr = scanner.Scan(DSROffsets.WorldChrBaseAOB, 3);
                offsets.Unknown1Ptr     = scanner.Scan(DSROffsets.Unknown1AOB, 1);
                offsets.Unknown2Ptr     = scanner.Scan(DSROffsets.Unknown2AOB, 3);
                Valid = true;
            }
            catch (ArgumentException)
            {
                Valid = false;
            }
        }