小编Mic*_*kis的帖子

PHP加密和Windows解密

我被卡住了.似乎PHP完成的AES加密无法在Windows中解密.

PHP代码:

$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128,"12345678", "test", MCRYPT_MODE_CBC));
Run Code Online (Sandbox Code Playgroud)

Windows代码:"s"具有从base64转换回来后由上述响应创建的字符串.

bool Decrypt(char* s,char* key,char* dest)
{
// Create the crypto provider context.
HCRYPTPROV hProvider = NULL;
if (!CryptAcquireContext(&hProvider,
    NULL,  // pszContainer = no named container
    MS_ENH_RSA_AES_PROV,  // pszProvider = default provider
    PROV_RSA_AES,
    0)) 
        return false;


// Construct the blob necessary for the key generation.
aes128keyBlob aes_blob128;

aes_blob128.header.bType = PLAINTEXTKEYBLOB;
aes_blob128.header.bVersion = CUR_BLOB_VERSION;
aes_blob128.header.reserved = 0;
aes_blob128.header.aiKeyAlg = CALG_AES_128;
aes_blob128.keySize = 16;
memcpy(aes_blob128.bytes, key, 16);

HCRYPTKEY hKey = NULL;
if (!CryptImportKey(hProvider,
    (BYTE*)(&aes_blob128),
    sizeof(aes_blob128), …
Run Code Online (Sandbox Code Playgroud)

php c++ encryption aes

14
推荐指数
1
解决办法
3193
查看次数

std::function 的运行时实现

为了安全起见,我已经在我的 DLL 调用中使用了旧式函数指针,如下所示:

// DLL
typedef int (__stdcall* ty)();
void test(ty t)
{
    if (t)
    {
        int r = t(); 
        ....
    }
}
Run Code Online (Sandbox Code Playgroud)

而我可以使用这个:

void test(std::function<int()> t)
{
}
Run Code Online (Sandbox Code Playgroud)

然而,众所周知,后者使用类型擦除std::function不能是原始函数指针(因为它可能会传递一个具有捕获的 lambda,因此不能是原始指针)。

因此,在 Visual Studio 中,std::function当在调试模式下从可执行构建中使用时,在发布模式下使用带有包含崩溃的函数签名的 DLL 构建,反之亦然。即使是调试模式或发布模式,行为也不相同。有时它会崩溃,有时它会起作用。

是否有我们可以依赖使用的已定义运行时行为std::function?或者这是编译器根据我传递给它的内容专门用于编译的仅编译的东西,因此,不能直接假设运行时行为?

在汇编级别,必须知道预编译单元上的函数签名。据我所知,std::function 运行时实现没有明确定义。

所以,例如,当我编译时,然后

void test(std::function<int()> t)
Run Code Online (Sandbox Code Playgroud)

可以[]() -> int, [&]() -> int, [=]() -> int通过类型擦除采用任何参数,如, 等。但是当这是预编译的,因此只有运行时,什么是可以接受的?std::function 是如何实现的?使用类指针?有没有明确定义的方法?

我不是在寻找必然与 VS 相关的解决方案,而是寻找 的标准定义(std::function如果有的话)。

c++

7
推荐指数
1
解决办法
373
查看次数

手动签署 PE 文件

我正在尝试手动签署现有的便携式可执行文件。

我正在按照本文档中的说明进行操作:

  1. 将图像标题加载到内存中。
  2. 初始化哈希算法上下文。
  3. 将图像标头从其基址散列到校验和地址的开头之前,如可选标头 Windows 特定字段中指定的那样。
  4. 跳过校验和,这是一个 4 字节的字段。
  5. 散列从校验和字段的末尾到证书表条目开始之前的所有内容,如可选头数据目录中指定的那样。
  6. 从证书表条目中获取属性证书表地址和大小。有关详细信息,请参阅 PE/COFF 规范的第 5.7 节。
  7. 从计算中排除证书表条目,并散列从证书表条目末尾到图像标题末尾的所有内容,包括节表(标题)。证书表条目长 8 个字节,如可选标题数据目录中所指定。
  8. 创建一个名为 SUM_OF_BYTES_HASHED 的计数器,它不是签名的一部分。将此计数器设置为 SizeOfHeaders 字段,如 Optional Header Windows-Specific Field 中所指定。
  9. 构建一个指向图像中所有部分标题的指针的临时表。COFF 文件头的 NumberOfSections 字段指示表应该有多大。不要在 SizeOfRawData 字段为零的表中包含任何节标题。
  10. 使用引用的 SectionHeader 结构中的 PointerToRawData 字段(偏移量 20)作为键,按升序排列表的元素。换句话说,根据节的磁盘文件偏移量按升序对节头进行排序。
  11. 遍历已排序的表,将相应的部分加载到内存中,并对整个部分进行哈希处理。使用 SectionHeader 结构中的 SizeOfRawData 字段来确定要散列的数据量。
  12. 将该部分的 SizeOfRawData 值添加到 SUM_OF_BYTES_HASHED。
  13. 对排序表中的所有部分重复步骤 11 和 12。
  14. 创建一个名为 FILE_SIZE 的值,它不是签名的一部分。将此值设置为从底层文件系统获取的图像文件大小。如果 FILE_SIZE 大于 SUM_OF_BYTES_HASHED,则文件包含必须添加到散列的额外数据。此数据从 SUM_OF_BYTES_HASHED 文件偏移量开始,其长度为:(File Size) – ((Size of AttributeCertificateTable) + SUM_OF_BYTES_HASHED) 注意:属性证书表的大小在证书表条目 (32) 中的第二个 ULONG 值中指定位:偏移 132,64 位:偏移 148)在可选头数据目录中。
  15. 完成哈希算法上下文。注意:此过程使用来自 …

c++ winapi portable-executable

6
推荐指数
1
解决办法
887
查看次数

libgit2(获取 &amp; 合并 &amp; 提交)

我正在尝试从 libgit2 的 repo 中提取。

我的步骤是这些:

  • git_remote_connect - 好的
  • git_remote_download 还是我应该使用 git_remote_fetch ?
  • git_remote_ls 获取 HEAD 的传递给 git_annotated_commit_from_fetchhead (这是 coorect 吗?)。但是有 1 个以上的头,我可以通过带有“HEAD”名称的头吗?
  • git_merge。

这导致 .git 文件夹中的 MERGE_HEAD ,然后我可以与现有提交合并。

问题是,上面的顺序是否正确?为什么 git 创建 FETCH_HEAD 而 libgit2 有 MERGE_HEAD?

libgit2

5
推荐指数
1
解决办法
1598
查看次数

Windows 投影文件系统只读?

我尝试使用Projected File System来实现用户模式 ​​ram 驱动器(以前我使用过 Dokan)。我有两个问题:

  1. 这是只读投影吗?从记事本打开文件并写入文件时,我找不到任何发送给我的通知。

  2. 使用 PrjWriteFileData() 后,文件是否实际创建在磁盘上?据我了解,是的。

在这种情况下,如果没有写入投影文件,那么人们可以用这个库做些什么有用的事情?在我看来,唯一有用的事情是最初从其他地方(比如远程仓库)创建一个目录树,但除此之外别无他法。多坎似乎仍然是要走的路。

winapi projfs

5
推荐指数
1
解决办法
1384
查看次数

Trying to debug native iOS App with VS 2019

I'm trying to use VS 2019 to install and debug a native iOS project.

I 've followed instructions from here, installed Node from here.

The app builds and installs to my device (note: only over USB. If trying in WiFi mode, I got an error Failed to fetch the first device. Reason: Cannot read property 'name' of undefined).

However the application won't run. Tried (from here):

sudo chmod 777 /var/db/lockdown
brew uninstall ios-webkit-debug-proxy
brew uninstall ideviceinstaller …
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio ios

5
推荐指数
0
解决办法
169
查看次数

以编程方式为应用设置图形性能

Windows 控制面板中有一个选项可以将应用程序设置为“高性能”。控制面板 -> 系统 -> 显示 -> 图形设置。

在那里添加我的应用程序时,我注意到,当使用 Media Foundation 和 H.265 编码时,它使用 NVIDIA gfx 适配器进行编码。在此之前,它使用嵌入式Intel显卡,只能进行H.264编码,因此H.265编码在CPU中慢慢完成。

如何以编程方式在那里添加我的应用程序?这对我的音序器的性能至关重要。

非常感谢。

图形设置

windows directx winapi dxgi ms-media-foundation

4
推荐指数
1
解决办法
1173
查看次数

如何在c++中使用winhttp将json数据发布到api

我需要使用 C++ 将 json 数据发布到 api。在 API 中,我还需要包含app_idapp_key作为标头。下面是我正在使用的代码:

std::wstring get_utf16(const std::string &str, int codepage)
{
    if (str.empty()) return std::wstring();
    int sz = MultiByteToWideChar(codepage, 0, &str[0], (int)str.size(), 0, 0);
    std::wstring res(sz, 0);
    MultiByteToWideChar(codepage, 0, &str[0], (int)str.size(), &res[0], sz);
    return res;
}

LPCWSTR additionalHeaders = L"Content-Type: application/json\r\n" + L"app_id: 7ty44" + L"app_key: e36ff19de5623";
DWORD headersLength = -1;

string HttpsWebRequestPost(string domain, string url, string dat)
{
    //Extra
    LPSTR  data = const_cast<char *>(dat.c_str());;
    DWORD data_len = strlen(data);


    wstring sdomain = …
Run Code Online (Sandbox Code Playgroud)

c++ https winapi

3
推荐指数
2
解决办法
8370
查看次数

LibGit2提交示例

我试图使用LibGit2,我陷入了提交.我试过 这个只适用于"初始"提交的那个.对于下一次提交,它失败,-15"当前提示不是第一个父级".

两个问题:

  1. 我怎么知道如果我需要初始提交?
  2. 如何执行非初始提交?

谢谢.

git

2
推荐指数
1
解决办法
2518
查看次数

PHP 检测 SQL 注入尝试

我的代码已经是安全的,在 SQL 查询中使用参数,但是,我想检测是否有人尝试将某些内容注入到提交表单中。

我找到了 Snort,但我需要 PHP 脚本级别的东西,而不是整个网络。

这是一个包含学生个人信息的网站,因此,我们将警告(甚至采取行动)任何尝试攻击的人。

php mysql sql sql-injection

2
推荐指数
1
解决办法
5228
查看次数