mirror of
https://github.com/SabreTools/BinaryObjectScanner.git
synced 2026-02-04 05:35:49 +00:00
Rename to BinaryObjectScanner
This commit is contained in:
@@ -8,12 +8,11 @@
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
|
||||
<!-- Package Properties -->
|
||||
<PackageId>BurnOutSharp</PackageId> <!-- Temporary until official renaming -->
|
||||
<Authors>Matt Nadareski</Authors>
|
||||
<Description>Protection scanning library</Description>
|
||||
<Copyright>Copyright (c)2018-2023 Matt Nadareski</Copyright>
|
||||
<PackageProjectUrl>https://github.com/SabreTools/</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/mnadareski/BurnOutSharp</RepositoryUrl>
|
||||
<RepositoryUrl>https://github.com/SabreTools/BinaryObjectScanner</RepositoryUrl>
|
||||
<RepositoryType>git</RepositoryType>
|
||||
<PackageTags>protection copy-protection scanning packer</PackageTags>
|
||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace BinaryObjectScanner.Protection
|
||||
/// It requires the use of a registration code that is unique to each individual user (https://web.archive.org/web/20031210093259/http://www.chosenbytes.com/codemain.php).
|
||||
/// As an advertising point, ChosenBytes apparently held a contest with a cash prize to see if a protected file could be cracked (https://web.archive.org/web/20031106163334/http://www.chosenbytes.com/challenge.php).
|
||||
///
|
||||
/// Previous versions of BurnOutSharp incorrectly reported this DRM as "CodeLock / CodeLok / CopyLok". It was later discovered that due to the similar names, two entirely different DRM were erroneously lumped together.
|
||||
/// Previous versions of BinaryObjectScanner incorrectly reported this DRM as "CodeLock / CodeLok / CopyLok". It was later discovered that due to the similar names, two entirely different DRM were erroneously lumped together.
|
||||
/// Not only is "CodeLok / CopyLok" an entirely separate form of DRM, but "CodeLock" (as opposed to "Code-Lock") appears to refer specifically to another unrelated DRM (https://web.archive.org/web/20031106033758/http://www.codelock.co.nz/).
|
||||
/// Also not to be confused with https://www.youtube.com/watch?v=AHqdgk0uJyc.
|
||||
///
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace BinaryObjectScanner.Protection
|
||||
/// At least one disc with CopyLok appears to contain an excerpt of the poem "Jabberwocky" by Lewis Carroll in the raw sector data (http://forum.redump.org/post/54050/#p54050).
|
||||
/// According to the Readme for poxylok (https://gf.wiretarget.com/copylok.htm), some version of Gangsters 2 may have this protection.
|
||||
///
|
||||
/// Previous versions of BurnOutSharp incorrectly reported this DRM as "CodeLock / CodeLok / CopyLok". It was later discovered that due to the similar names, two entirely different DRM were erroneously lumped together.
|
||||
/// Previous versions of BinaryObjectScanner incorrectly reported this DRM as "CodeLock / CodeLok / CopyLok". It was later discovered that due to the similar names, two entirely different DRM were erroneously lumped together.
|
||||
/// "CodeLock" (in this case actually referring to "Code-Lock") is an entirely separate form of DRM, with the existing check now getting used separately.
|
||||
/// Also not to be confused with https://en.wikipedia.org/wiki/Rob_Northen_copylock.
|
||||
///
|
||||
|
||||
@@ -6,7 +6,7 @@ using BinaryObjectScanner.Interfaces;
|
||||
using SabreTools.Matching;
|
||||
using SabreTools.Serialization.Wrappers;
|
||||
|
||||
namespace BurnOutSharp.ProtectionType
|
||||
namespace BinaryObjectScanner.ProtectionType
|
||||
{
|
||||
public class GFWL : IPathCheck, IPortableExecutableCheck
|
||||
{
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
using BinaryObjectScanner.Interfaces;
|
||||
using SabreTools.Serialization.Wrappers;
|
||||
|
||||
namespace BurnOutSharp.ProtectionType
|
||||
namespace BinaryObjectScanner.ProtectionType
|
||||
{
|
||||
public class OnlineRegistration : IPortableExecutableCheck
|
||||
{
|
||||
|
||||
@@ -6,7 +6,7 @@ using BinaryObjectScanner.Interfaces;
|
||||
using SabreTools.Matching;
|
||||
using SabreTools.Serialization.Wrappers;
|
||||
|
||||
namespace BurnOutSharp.ProtectionType
|
||||
namespace BinaryObjectScanner.ProtectionType
|
||||
{
|
||||
// TODO: Not matching all SolidShield Wrapper v1 (See JackKeane)
|
||||
// TODO: Not matching all SolidShield Wrapper v1 (See NFS11)
|
||||
|
||||
@@ -6,7 +6,7 @@ using BinaryObjectScanner.Interfaces;
|
||||
using SabreTools.Matching;
|
||||
using SabreTools.Serialization.Wrappers;
|
||||
|
||||
namespace BurnOutSharp.ProtectionType
|
||||
namespace BinaryObjectScanner.ProtectionType
|
||||
{
|
||||
public class TAGES : IPathCheck, IPortableExecutableCheck
|
||||
{
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace BinaryObjectScanner.Protection
|
||||
public class nProtect : IPathCheck, IPortableExecutableCheck
|
||||
{
|
||||
// TODO: Add LE checks for "npkcrypt.vxd" in Redump entry 90526.
|
||||
// TODO: Add text check for the string mentioned in https://github.com/mnadareski/BurnOutSharp/issues/154.
|
||||
// TODO: Add text check for the string mentioned in https://github.com/mnadareski/BinaryObjectScanner/issues/154.
|
||||
|
||||
/// <inheritdoc/>
|
||||
#if NET48
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Coding Guide
|
||||
|
||||
This document serves as the official code standards guide for `BurnOutSharp` internal development. Please note that this is a work in progress and may not encapsulate all standards expected of new or existing code.
|
||||
This document serves as the official code standards guide for `BinaryObjectScanner` internal development. Please note that this is a work in progress and may not encapsulate all standards expected of new or existing code.
|
||||
|
||||
## General Code Guidelines
|
||||
|
||||
@@ -317,10 +317,10 @@ This section contains information on project and class organization principles t
|
||||
|
||||
| Project | Description |
|
||||
| --- | --- |
|
||||
| `BurnOutSharp` | One file per class. See below for details on subdirectories. |
|
||||
| `BurnOutSharp/External` | One directory per external project. |
|
||||
| `BurnOutSharp/FileType` | One file per file type. |
|
||||
| `BurnOutSharp/Tools` | Two files - one for extension methods and one for utilities. |
|
||||
| `BinaryObjectScanner` | One file per class. See below for details on subdirectories. |
|
||||
| `BinaryObjectScanner/External` | One directory per external project. |
|
||||
| `BinaryObjectScanner/FileType` | One file per file type. |
|
||||
| `BinaryObjectScanner/Tools` | Two files - one for extension methods and one for utilities. |
|
||||
| `BinaryObjectScanner.ASN1` | Flat directory structure. |
|
||||
| `BinaryObjectScanner.Builders` | One file per executable type. |
|
||||
| `BinaryObjectScanner.Compression` | One directory per compression type. |
|
||||
@@ -344,8 +344,8 @@ This section contains information on in-code organization principles that depend
|
||||
|
||||
| Project | Description |
|
||||
| --- | --- |
|
||||
| `BurnOutSharp` | Varies from file to file. |
|
||||
| `BurnOutSharp/Tools` | Methods grouped by function. Regions ordered alphabetically. |
|
||||
| `BinaryObjectScanner` | Varies from file to file. |
|
||||
| `BinaryObjectScanner/Tools` | Methods grouped by function. Regions ordered alphabetically. |
|
||||
| `BinaryObjectScanner.ASN1` | Partial classes suggested for different implmentations. |
|
||||
| `BinaryObjectScanner.Builders` | Two copies of each non-generic method: one for byte arrays and one for Streams. |
|
||||
| `BinaryObjectScanner.Compression` | Varies from file to file. |
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
# Developer Guide
|
||||
|
||||
This is a guide for any developers who wish to research protections, implement new protections in `BurnOutSharp`, or fix/update existing protection checks. Below you will find numerous sections about how to use the tools and specialized methods included in the `BurnOutSharp` project.
|
||||
This is a guide for any developers who wish to research protections, implement new protections in `BinaryObjectScanner`, or fix/update existing protection checks. Below you will find numerous sections about how to use the tools and specialized methods included in the `BinaryObjectScanner` project.
|
||||
|
||||
## Getting Started
|
||||
|
||||
`BurnOutSharp` contains multiple custom-built and external projects that allow for detecting copy protections, packers, and file formats. At the time of writing, below is the list of projects and what they do:
|
||||
`BinaryObjectScanner` contains multiple custom-built and external projects that allow for detecting copy protections, packers, and file formats. At the time of writing, below is the list of projects and what they do:
|
||||
|
||||
| Project | Description |
|
||||
| --- | --- |
|
||||
| `BurnOutSharp` | Main library that contains all supported file formats. It also houses most of the utilities and structures needed when `BurnOutSharp` is used by another project. Some code additions will happen here. |
|
||||
| `BinaryObjectScanner` | Main library that contains all supported file formats. It also houses most of the utilities and structures needed when `BinaryObjectScanner` is used by another project. Some code additions will happen here. |
|
||||
| `BinaryObjectScanner.ASN1` | Library containing classes and methods associated with Abstract Syntax Notation One and OID parsing. |
|
||||
| `BinaryObjectScanner.Builder` | Library containing classes that assist in populating the various object models defined in `BinaryObjectScanner.Models`. Builders can work with either byte arrays or streams for input. At the time of writing, the following executable types have builders: **MS-DOS**, **New Executable**, **Portable Executable**. |
|
||||
| `BinaryObjectScanner.Compression` | Library containing classes that deal with different compression formats. This library is used extensively by the wrappers in `BinaryObjectScanner.Wrappers`. |
|
||||
| `BinaryObjectScanner.FileType` | Library containing file type definitions specific to scanning. |
|
||||
| `BinaryObjectScanner.GameEngine` | Library containing game engine scanning definitions. |
|
||||
| `BinaryObjectScanner.Interfaces` | Library containing interface definitions for scanning and detection. |
|
||||
| `BinaryObjectScanner.Matching` | Library containing models and logic for generic searching and matching. This library is used extensively by the packer and protection checks in `BurnOutSharp`. |
|
||||
| `BinaryObjectScanner.Matching` | Library containing models and logic for generic searching and matching. This library is used extensively by the packer and protection checks in `BinaryObjectScanner`. |
|
||||
| `BinaryObjectScanner.Models` | Library containing object models that represent various pieces of known executable formats. At the time of writing, the following executable types have models: **MS-DOS**, **New Executable**, **Linear Executable (partial)**, **Portable Executable**. |
|
||||
| `BinaryObjectScanner.Packer` | Library containing packer scanning definitions. |
|
||||
| `BinaryObjectScanner.Protection` | Library containing protection scanning definitions. |
|
||||
@@ -26,7 +26,7 @@ This is a guide for any developers who wish to research protections, implement n
|
||||
|
||||
## Researching Protections
|
||||
|
||||
Researching copy protections and packers can be a massive undertaking. Some can be as easy as looking for a single string in the file description while others may include searching multiple sections for bytecode that represents the right instructions or an encoded value. Thankfully for researchers, `BurnOutSharp` contains multiple tools to make this process of finding this information much easier than just poking around with a hex editor.
|
||||
Researching copy protections and packers can be a massive undertaking. Some can be as easy as looking for a single string in the file description while others may include searching multiple sections for bytecode that represents the right instructions or an encoded value. Thankfully for researchers, `BinaryObjectScanner` contains multiple tools to make this process of finding this information much easier than just poking around with a hex editor.
|
||||
|
||||
| Tool / Method | Description |
|
||||
| --- | --- |
|
||||
@@ -35,7 +35,7 @@ Researching copy protections and packers can be a massive undertaking. Some can
|
||||
| **Add and debug** | This starts getting into more serious territory. Creating a skeleton for the packer or protection that you want to add and then messing around in code is a great way to start seeing what sort of stuff the library can see that's not normally output. See the table below for extension properties and methods that you may use in addition to the models defined in `BinaryObjectScanner.Models`. |
|
||||
| **Hex Editor / External Programs** | As an advanced port of call, using a hex editor and external protection scanning programs (sometimes in conjunction) can help you get a better idea of the protection you're looking into. For example, **TheRogueArchivist** used that combination to narrow down the exact check for a very stubborn protection. |
|
||||
|
||||
As noted above, `BurnOutSharp` has a few tricks up its sleeve, mainly in the form of `BinaryObjectScanner.Wrappers`. This library was written explicitly to make research and implementation as easy as possible, and as such, allows for a lot of very creative ways of finding protections.
|
||||
As noted above, `BinaryObjectScanner` has a few tricks up its sleeve, mainly in the form of `BinaryObjectScanner.Wrappers`. This library was written explicitly to make research and implementation as easy as possible, and as such, allows for a lot of very creative ways of finding protections.
|
||||
|
||||
Below are all current extension properties along with a brief description.
|
||||
|
||||
@@ -90,7 +90,7 @@ Adding a new checker or format should happen in a few distinct steps:
|
||||
|
||||
1. Create a skeleton class representing the new checker or format
|
||||
|
||||
- If it is a new supported file type (such as an archive format), create the file in `BinaryObjectScanner.FileType`. By default, you will need to implement `BurnOutSharp.Interfaces.IDetectable` or `BinaryObjectScanner.Interfaces.IExtractable`. Do not implement any other interfaces. Please consider asking project maintainers before doing this work, especially if there are external dependencies.
|
||||
- If it is a new supported file type (such as an archive format), create the file in `BinaryObjectScanner.FileType`. By default, you will need to implement `BinaryObjectScanner.Interfaces.IDetectable` or `BinaryObjectScanner.Interfaces.IExtractable`. Do not implement any other interfaces. Please consider asking project maintainers before doing this work, especially if there are external dependencies.
|
||||
|
||||
- If it is a new supported game engine or standard library, create the file in `BinaryObjectScanner.GameEngine`. By default, you will need to implement at least one of: `BinaryObjectScanner.Interfaces.ILinearExecutableCheck`, `BinaryObjectScanner.Interfaces.INewExecutableCheck`, and `BinaryObjectScanner.Interfaces.IPortableExecutableCheck`. It is exceptionally rare to need to implement `BinaryObjectScanner.Interfaces.IPathCheck`.
|
||||
|
||||
|
||||
10
README.md
10
README.md
@@ -1,6 +1,6 @@
|
||||
# BurnOutSharp
|
||||
# BinaryObjectScanner
|
||||
|
||||
[](https://ci.appveyor.com/project/mnadareski/burnoutsharp)
|
||||
[](https://ci.appveyor.com/project/mnadareski/BinaryObjectScanner)
|
||||
|
||||
C# protection, packer, and archive scanning library. This currently compiles as a library so it can be used in any C# application. A reference application called `Test` is also included to demonstrate the abilities of the library. For an example of a program implementing the library, see [MPF](https://github.com/SabreTools/MPF).
|
||||
|
||||
@@ -25,7 +25,7 @@ Please visit our sibling project, [DRML](https://github.com/TheRogueArchivist/DR
|
||||
|
||||
## Protections Detected
|
||||
|
||||
Below is a list of protections detected by BurnOutSharp. The two columns explain what sort of checks are performed to determine how the protection is detected. Generally speaking, it's better to have a content check than a path check.
|
||||
Below is a list of protections detected by BinaryObjectScanner. The two columns explain what sort of checks are performed to determine how the protection is detected. Generally speaking, it's better to have a content check than a path check.
|
||||
|
||||
| Protection Name | Content Check | Path Check | Notes |
|
||||
| --------------- | ------------- | ---------- | ----- |
|
||||
@@ -120,7 +120,7 @@ Below is a list of protections detected by BurnOutSharp. The two columns explain
|
||||
|
||||
## Executable Packers Detected
|
||||
|
||||
Below is a list of executable packers detected by BurnOutSharp. The three columns explain what sort of checks are performed to determine how the protection is detected as well as if the contents can be extracted.
|
||||
Below is a list of executable packers detected by BinaryObjectScanner. The three columns explain what sort of checks are performed to determine how the protection is detected as well as if the contents can be extracted.
|
||||
|
||||
| Protection Name | Content Check | Path Check | Extractable | Notes |
|
||||
| --------------- | ------------- | ---------- | ----------- | ----- |
|
||||
@@ -153,7 +153,7 @@ Below is a list of executable packers detected by BurnOutSharp. The three column
|
||||
|
||||
## Game Engines Detected
|
||||
|
||||
Below is a list of game engines detected by BurnOutSharp. The two columns explain what sort of checks are performed to determine how the protection is detected. Generally speaking, it's better to have a content check than a path check.
|
||||
Below is a list of game engines detected by BinaryObjectScanner. The two columns explain what sort of checks are performed to determine how the protection is detected. Generally speaking, it's better to have a content check than a path check.
|
||||
|
||||
| Protection Name | Content Check | Path Check | Notes |
|
||||
| --------------- | ------------- | ---------- | ----- |
|
||||
|
||||
@@ -235,7 +235,7 @@ namespace Test
|
||||
/// </summary>
|
||||
public static void DisplayHelp()
|
||||
{
|
||||
Console.WriteLine("BurnOutSharp Test Program");
|
||||
Console.WriteLine("BinaryObjectScanner Test Program");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("test.exe <features> <options> file|directory ...");
|
||||
Console.WriteLine();
|
||||
|
||||
@@ -3,7 +3,7 @@ using System.Collections.Concurrent;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using BinaryObjectScanner;
|
||||
using BurnOutSharp;
|
||||
using BinaryObjectScanner;
|
||||
|
||||
namespace Test
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user