PECMD CMPS/CMPA等所有加密脚本
2024-4-15 1577

PECMD CMPS/CMPA等所有加密脚本

 

请先阅读免责协议

免责协议 阅读本文默认同意:
本文中仅供学习,不可用于非法用途
保护知识产权人人有责,请主动保护他人知识产权
任何由此贴内容导致的违法行为均为个人行为,与本作者无关

 

由于部分WinPE不限于那些流氓、换皮PE,为了保护自己源码的知识产权进行特殊加密手段,我们今天只讲通过通用加密工具加密的脚本

可能你会有疑问难道有不是用通用工具加密的吗?

答案是是的,我们家百般同PE的加密/解密流程如下图(此流程图为废稿)

未命名绘图.webp

 

这个是废稿,如果有人认为可以也可以参考一下

 

首先这种加密与普通MD5这种加密不同

MD5是文本,他校验的是哈希值哈希值是通过公示计算出来的

而代码不同他是必须要解密之后才能运行的,那么这就证明在PECMD中是可以解密的

举个例子:

你好,这是里北京中的国都首。欢迎到来北京,北京欢你迎。

 

你可以读出来,但是如果你一个一个字读就不对了

这直接读就可以理解为代码运行

你脑海自动进行排序就是解密

 

那我们只需要安装这个思路,就可以解密了

理论上只要这个代码使用原版PECMD可以直接运行,那就能解密

众所周知PECMD是一行一行执行的

他会逐行转成unicode 编码

随后调用MultiByteToWideChar函数

MultiByteToWideChar函数注释(可跳过不看):

 

注解:

此函数的默认行为是转换为输入字符串的预分解形式。 如果预复合窗体不存在,函数将尝试转换为复合窗体。

MB_PRECOMPOSED标志的使用对大多数代码页的影响很小,因为大多数输入数据已经组成。 请考虑在使用 MultiByteToWideChar 进行转换后调用 NormalizeString。 NormalizeString 提供更准确、更标准、更一致的数据,还可以更快。 请注意,对于传递给 NormalizeString的NORM_FORM枚举,NormalizationC 对应于 MB_PRECOMPOSED,NormalizationD 对应于MB_COMPOSITE。

如上述警告中所述,如果未首先调用此函数并将 cchWideChar 设置为 0 ,以便获取所需大小,则输出缓冲区很容易溢出。 如果使用MB_COMPOSITE标志,则每个输入字符的输出长度可以是三个或三个以上的字符。

lpMultiByteStr 和 lpWideCharStr 指针不能相同。 如果它们相同,则函数将失败, GetLastError ERROR_INVALID_PARAMETER返回值。

如果显式指定输入字符串长度且未终止 null 字符,则 MultiByteToWideChar 不会对输出字符串执行 null 终止。 若要对此函数的输出字符串执行 null 终止,应用程序应传入 -1 或显式计算输入字符串的终止 null 字符。

如果设置了MB_ERR_INVALID_CHARS,并且源字符串中遇到无效字符,则该函数将失败。 无效字符是以下字符之一:

  • 不是源字符串中默认字符的字符,但在未设置MB_ERR_INVALID_CHARS时转换为默认字符的字符。
  • 对于 DBCS 字符串,是具有前导字节但没有有效尾随字节的字符。

从 Windows Vista 开始,此函数完全符合 UTF-8 和 UTF-16 的 Unicode 4.1 规范。 在早期操作系统上使用的函数对一半或不匹配的 代理 项对进行编码或解码。 在早期版本的 Windows 中编写的依赖于此行为来编码随机非文本二进制数据的代码可能会遇到问题。 但是,在有效的 UTF-8 字符串上使用此函数的代码的行为方式与在早期 Windows 操作系统上的行为方式相同。

Windowsxp: 为了防止 UTF-8 字符的非最短版本出现安全问题, MultiByteToWideChar 会删除这些字符。

从 Windows 8 开始:MultiByteToWideChar 在 中Stringapiset.h声明。 在Windows 8之前,它在 中Winnls.h声明。

 

语法:

int MultiByteToWideChar(
  [in]            UINT                              CodePage,
  [in]            DWORD                             dwFlags,
  [in]            _In_NLS_string_(cbMultiByte)LPCCH lpMultiByteStr,
  [in]            int                               cbMultiByte,
  [out, optional] LPWSTR                            lpWideCharStr,
  [in]            int                               cchWideChar
);

 

这是他的参数:

image.webp

返回值

如果成功,则返回写入 到 lpWideCharStr 指示的缓冲区的字符数。 如果函数成功且 cchWideChar 为 0,则返回值是 lpWideCharStr 指示的缓冲区所需的大小(以字符为单位)。 另请参阅 dwFlags ,了解输入无效序列时 MB_ERR_INVALID_CHARS 标志如何影响返回值的信息。

如果函数不成功, 0 则返回 。 若要获取扩展错误信息,应用程序可以调用 GetLastError,这会返回以下错误代码之一:

  • ERROR_INSUFFICIENT_BUFFER:提供的缓冲区大小不够大,或者错误地设置为 NULL
  • ERROR_INVALID_FLAGS:为标志提供的值无效。
  • ERROR_INVALID_PARAMETER:任何参数值都无效。
  • ERROR_NO_UNICODE_TRANSLATION:在字符串中找到无效的 Unicode。

注解

此函数的默认行为是转换为输入字符串的预分解形式。 如果预复合窗体不存在,函数将尝试转换为复合窗体。

MB_PRECOMPOSED标志的使用对大多数代码页的影响很小,因为大多数输入数据已经组成。 请考虑在使用 MultiByteToWideChar 进行转换后调用 NormalizeString。 NormalizeString 提供更准确、更标准、更一致的数据,还可以更快。 请注意,对于传递给 NormalizeString的NORM_FORM枚举,NormalizationC 对应于 MB_PRECOMPOSED,NormalizationD 对应于MB_COMPOSITE。

如上述警告中所述,如果未首先调用此函数并将 cchWideChar 设置为 0 ,以便获取所需大小,则输出缓冲区很容易溢出。 如果使用MB_COMPOSITE标志,则每个输入字符的输出长度可以是三个或三个以上的字符。

lpMultiByteStr 和 lpWideCharStr 指针不能相同。 如果它们相同,则函数将失败, GetLastError ERROR_INVALID_PARAMETER返回值。

如果显式指定输入字符串长度且未终止 null 字符,则 MultiByteToWideChar 不会对输出字符串执行 null 终止。 若要对此函数的输出字符串执行 null 终止,应用程序应传入 -1 或显式计算输入字符串的终止 null 字符。

如果设置了MB_ERR_INVALID_CHARS,并且源字符串中遇到无效字符,则该函数将失败。 无效字符是以下字符之一:

  • 不是源字符串中默认字符的字符,但在未设置MB_ERR_INVALID_CHARS时转换为默认字符的字符。
  • 对于 DBCS 字符串,是具有前导字节但没有有效尾随字节的字符。

从 Windows Vista 开始,此函数完全符合 UTF-8 和 UTF-16 的 Unicode 4.1 规范。 在早期操作系统上使用的函数对一半或不匹配的 代理 项对进行编码或解码。 在早期版本的 Windows 中编写的依赖于此行为来编码随机非文本二进制数据的代码可能会遇到问题。 但是,在有效的 UTF-8 字符串上使用此函数的代码的行为方式与在早期 Windows 操作系统上的行为方式相同。

Windowsxp: 为了防止 UTF-8 字符的非最短版本出现安全问题, MultiByteToWideChar 会删除这些字符。

从 Windows 8 开始:MultiByteToWideChar 在 中Stringapiset.h声明。 在Windows 8之前,它在 中Winnls.h声明。

这个就是整个代码中最重要的核心

 

接下来我们有请这个构想提出的鼻祖: duocore_c

由他在GitHub的原文为我们讲解: 

原理

其实准确说“解密”无关,目前之所以没有破解只是因为算法没公开,我也没有去研究它的算法, 反正不管怎样,最后肯定要解出来才能执行,所以我在执行的地方替换了它调用的系统 API,从 API 参数里面拿到了解出来的脚本。

pecmd 执行每一行的时候会将其转为 unicode 编码,会调用 MultiByteToWideChar 这个 API,只要 hook 这个 API,从 lpMultiByteStr 参数得到传入的多字节字符串,过滤一下就可以得到原始内容。

用 detours 可以很方便地达到这个目的:

  1. 编写一个 dll,实现一个新的 MultiByteToWideChar 函数,在 DllMain 里面使用 detours 替换原来的函数;
  2. 编写一个加载器,使用 detours 启动 pecmd 进程,并注入我们的 dll。

说明

理论上此方法适用于使用所有加密方式加密的 ini,不限于 CMPS/CMPA。只要不需要执行内置解密脚本就能运行就可以解密

 

教学

  1. 先得到加密的 pecmd.ini,如果内置于 pecmd.exe,请用 res hacker 提取;一般都在PE系统盘的stytem32文件夹下,如果是内置的话将PE中的PECMD.exe丢在res hacker 提取,我就讲一下提取法和大包法软件在末尾

提取法:

找到PECMD.exe

image.webp

打开PECMD.exe

image.webp

找到源码 一般开头有CMPS或CMPA,大多数在SCRIPT文件夹内

image.webp

 

复制即可,随后在桌面右键创建文本文档并重命名为PECMD.INI

image.webp

image.webp

 

右键编辑

image.webp

 

把提取的代码复制进去

image.webp

 

那么如何加进去呢(关系不大可以不看)

代码打包至PECMD.exe

找到PECMD.exe

image.webp

打开PECMD.exe

image.webp

找到源码 一般开头有CMPS或CMPA,大多数在SCRIPT文件夹内

image.webp

 

右键替换文件

image.webp

 

选择源码可以是PECMD.INI、txt、wcs

image.webp

 

最后保存即可

image.webp

 

   2.找一个任意版本的原版PECMD.exe,不要民间魔改版会放在最后

原版LOGO如图

image.webp

 

      3.下载 pecmd-decrypt,使用与 pecmd.exe 对应的版本,比如 pecmd.exe 是 64 位的就使用 x64 文件夹中的版本,我两个版本都会给,但是最好不要混用,pecmd-decrypt的C++源码会在末尾

 

     4.pecmd.exe原版 和 pecmd.ini 放在 x86/x64 这个目录下什么位数就放哪个文件夹

解压后如图

image.webp

 

打开电脑终端(Windows PowerShell)输入如下代码(搜的时候两个都试试)

DetourHook.exe "pecmd.exe pecmd.ini" DetourHookDll.dll

如果你的系统没有带终端(Windows PowerShell)

如果你是Windows端并且有微软商城(Microsoft Store)可以点击下方按钮安装:

点击使用微软应用商城安装

 

如果超链接无法使用请手动输入如下网址:

ms-windows-store://pdp?hl=zh-cn&gl=cn&referrer=storeforweb&source=https%3A%2F%2Flearn.microsoft.com%2F&productid=9mz1snwt0n5d&mode=mini&pos=0%2C0%2C1920%2C1032

 

如果没有微软store请在末尾下载安装

 

最后在当前目录生成 original.ini,便是解密后的 pecmd.ini。

image.webp

 

附件表:

文件名: 文件大小 文件版本 MD5校验 文件密码 文件地址(点击超链接)
Microsoft Store 微软商城.7z

原文件:82.6MB

压缩文件:80.4MB

22107.1401.6.0 原文件: BAIBANTONG-PE

 

此处内容隐藏,回复后可见!立即回复  回复后请刷新页面!刷新

PECMD解密-源码.7z

原文件:770kb

压缩文件:144kb

1.1 原文件: BAIBANTONG-PE

此处内容隐藏,回复后可见!立即回复  回复后请刷新页面!刷新

PECMD解密-程序.7z

原文件:2.98MB

压缩文件:962kb

1.1 原文件: BAIBANTONG-PE

此处内容隐藏,回复后可见!立即回复  回复后请刷新页面!刷新

百般通PE-PECMD.INI防篡改策略.7z

原文件:36.3kb

压缩文件:

1.00 原文件: BAIBANTONG-PE

此处内容隐藏,回复后可见!立即回复  回复后请刷新页面!刷新

Resource Hacker解包工具.7z

文件:

5.1.8.360 原文件: BAIBANTONG-PE

此处内容隐藏,回复后可见!立即回复  回复后请刷新页面!刷新

PECMD2012原版

文件:1.01 MB

2012版 原文件:

此处内容隐藏,回复后可见!立即回复  回复后请刷新页面!刷新

 

最后于 2024-4-16 被百般通PE编辑 ,原因:
上传的附件:
收藏
点赞
分享
百般花样,样样精通
最新回复 (39)
  • avatar image
    爱心会员VIP会员
    527104427 2024-4-15

    试试可不可行

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    爱心会员VIP会员
    527104427 2024-4-15

    没有附件?

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    百般通PE 2024-4-16
    楼主   4
    527104427 没有附件?

    还没搞好,今天晚上传

    百般花样,样样精通
  • avatar image
    爱心会员VIP会员
    527104427 2024-4-16
    百般通PE 还没搞好,今天晚上传

    试用了一下,新版PECMD的CMPS已经不能解密了。能否适配一下最新版?

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    liangnijian 2024-4-16

    谢谢分享

    : )
  • avatar image
    百般通PE 2024-4-16
    楼主   7
    百般通PE 还没搞好,今天晚上传

    新版加密不行吗,让我研究一下

    百般花样,样样精通
  • avatar image
    blue003 2024-4-16

    非常感谢了,这个重磅啊

    pecmd不错的编程
  • avatar image
    absman1972 2024-4-16

    谢谢分享

  • avatar image
    CIZE 2024-4-17

    Thanks

    AngryBird
  • avatar image
    zw12834377 2024-4-17

    谢谢分享

  • avatar image
    反向人 2024-4-19

    高端局

    切克闹
  • avatar image
    xqxeq 2024-4-20

    多谢分享

    走近,走进,走尽
  • avatar image
    CQSCTech 2024-4-20

    谢谢分享,非常感谢

    不忘初心,难得始终
  • avatar image

    试试可不可行

    沉默的斗鱼
  • avatar image
    hnoel2695 2024-4-28

    谢谢分享

  • avatar image
    Plankt00n 2024-4-29

    谢谢分享

    Plankt00n
  • avatar image
    xiaoyu756295 2024-4-29

    PECMD_ini加密解密,看看,谢谢分享了

  • avatar image
    xiaoyu756295 2024-4-29

    PECMD解密-源码值得看一哈,解压密码??

  • avatar image
    flyingdancex 2024-4-29

    谢谢分享了

  • avatar image
    linbsp 2024-4-30

    感谢分享!多谢|!

  • avatar image
    tcr7374 2024-4-30

    谢谢分享

  • avatar image
    tcr7374 2024-4-30

    解压密码多少?

  • avatar image
    capture02 2024-5-1

    试试可不可行

     

  • avatar image
    百般通PE 2024-5-1
    楼主   25

    密码:

    image.webp

    百般花样,样样精通
返回