详见[推荐]PECMD CMPS、CMPA 新版、旧版解密工具 v1.0 正式公测!!!-PECMD脚本交流-PECMD技术社区
简介:
PECMD的CMPS、CMPA 新版、旧版的加密方式都能破解啦!!!
目前支持以上所有的加密破解
教学:
更新预告:
批量解密
自动文件提取
......
请先阅读免责协议
由于部分WinPE不限于那些流氓、换皮PE,为了保护自己源码的知识产权进行特殊加密手段,我们今天只讲通过通用加密工具加密的脚本
可能你会有疑问难道有不是用通用工具加密的吗?
答案是是的,我们家百般同PE的加密/解密流程如下图(此流程图为废稿)
这个是废稿,如果有人认为可以也可以参考一下
首先这种加密与普通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标志,则每个输入字符的输出长度可以是三个或三个以上的字符。
0
lpMultiByteStr 和 lpWideCharStr 指针不能相同。 如果它们相同,则函数将失败, GetLastError ERROR_INVALID_PARAMETER返回值。
如果显式指定输入字符串长度且未终止 null 字符,则 MultiByteToWideChar 不会对输出字符串执行 null 终止。 若要对此函数的输出字符串执行 null 终止,应用程序应传入 -1 或显式计算输入字符串的终止 null 字符。
如果设置了MB_ERR_INVALID_CHARS,并且源字符串中遇到无效字符,则该函数将失败。 无效字符是以下字符之一:
从 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声明。
Stringapiset.h
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 );
这是他的参数:
返回值
如果成功,则返回写入 到 lpWideCharStr 指示的缓冲区的字符数。 如果函数成功且 cchWideChar 为 0,则返回值是 lpWideCharStr 指示的缓冲区所需的大小(以字符为单位)。 另请参阅 dwFlags ,了解输入无效序列时 MB_ERR_INVALID_CHARS 标志如何影响返回值的信息。
如果函数不成功, 0 则返回 。 若要获取扩展错误信息,应用程序可以调用 GetLastError,这会返回以下错误代码之一:
NULL
注解
这个就是整个代码中最重要的核心
接下来我们有请这个构想提出的鼻祖: duocore_c
由他在GitHub的原文为我们讲解:
其实准确说“解密”无关,目前之所以没有破解只是因为算法没公开,我也没有去研究它的算法, 反正不管怎样,最后肯定要解出来才能执行,所以我在执行的地方替换了它调用的系统 API,从 API 参数里面拿到了解出来的脚本。
pecmd 执行每一行的时候会将其转为 unicode 编码,会调用 MultiByteToWideChar 这个 API,只要 hook 这个 API,从 lpMultiByteStr 参数得到传入的多字节字符串,过滤一下就可以得到原始内容。
MultiByteToWideChar
lpMultiByteStr
用 detours 可以很方便地达到这个目的:
理论上此方法适用于使用所有加密方式加密的 ini,不限于 CMPS/CMPA。只要不需要执行内置解密脚本就能运行就可以解密
提取法:
找到PECMD.exe
打开PECMD.exe
找到源码 一般开头有CMPS或CMPA,大多数在SCRIPT文件夹内
复制即可,随后在桌面右键创建文本文档并重命名为PECMD.INI
右键编辑
把提取的代码复制进去
那么如何加进去呢(关系不大可以不看)
代码打包至PECMD.exe
右键替换文件
选择源码可以是PECMD.INI、txt、wcs
最后保存即可
2.找一个任意版本的原版PECMD.exe,不要民间魔改版会放在最后
原版LOGO如图
3.下载 pecmd-decrypt,使用与 pecmd.exe 对应的版本,比如 pecmd.exe 是 64 位的就使用 x64 文件夹中的版本,我两个版本都会给,但是最好不要混用,pecmd-decrypt的C++源码会在末尾
4.pecmd.exe原版 和 pecmd.ini 放在 x86/x64 这个目录下什么位数就放哪个文件夹
解压后如图
打开电脑终端(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。
原文件:82.6MB
压缩文件:80.4MB
此处内容隐藏,回复后可见!立即回复 回复后请刷新页面!刷新
原文件:770kb
压缩文件:144kb
原文件:2.98MB
压缩文件:962kb
原文件:36.3kb
压缩文件:
文件:
文件:1.01 MB
试试可不可行
没有附件?
527104427 没有附件?
还没搞好,今天晚上传
百般通PE 还没搞好,今天晚上传
试用了一下,新版PECMD的CMPS已经不能解密了。能否适配一下最新版?
谢谢分享
新版加密不行吗,让我研究一下
非常感谢了,这个重磅啊
Thanks
高端局
多谢分享
谢谢分享,非常感谢
PECMD_ini加密解密,看看,谢谢分享了
PECMD解密-源码值得看一哈,解压密码??
谢谢分享了
感谢分享!多谢|!
解压密码多少?
密码: