demoscene 发表于 2021-8-27 12:20

来找茬-已结束

本帖最后由 demoscene 于 2021-8-27 20:27 编辑

欢迎来找一下茬
这是最近项目里碰到的一个BUG,一个多月了一直没找到原因,前两天突然灵感一来,发现了问题所在,发出来让大家玩玩。
下面是程序的所有代码,功能是读取注册表 HKEY_CURRENT_USER\Control Panel\Colors\ActiveBorder 的值。
这段代码正常编译是可以正常得到结果的,为了重现之前的问题,我对编译后的exe做了手动修改,同时为了减少其它无用代码对大家分析的影响,我故意使用了VC6来编译,使得编译后的程序只有这一段代码,最后的exe只有16KB。
正常程序将显示结果:
nRet:0x0, szResult:xx xx xx
错误程序将显示结果:
nRet:0x3E6, szResult:

请大家来找找附件我修改后的exe程序执行错误的原因

#include<stdio.h>
#include <windows.h>

int main(int argc, char* argv[])
{
      const wchar_t* lp1 = L"ActiveBorder";

      HKEY hKey = NULL;
      if (RegCreateKeyExW(HKEY_CURRENT_USER, L"Control Panel\\Colors", 0, 0, 0, KEY_ALL_ACCESS, 0, &hKey, NULL) == ERROR_SUCCESS)
      {
                wchar_t szValue = { 0 };
                DWORD dwOutSize = sizeof(szValue);

                int nRet = RegQueryValueExW(hKey, lp1, 0, NULL, (BYTE*)szValue, &dwOutSize);
                wprintf(L"nRet:0x%X, szResult:%s\r\n", nRet, szValue);
      }
      else
      {
                wprintf(L"RegCreateKeyExW Failed:%d\r\n", GetLastError());
      }

      return 0;
}

答案已通过附加加密上传到2楼,结束后公布密码。

结束了, yujian1991 大佬已破案,答案压缩包密码:52pojie52pojiexxx1

Suppose 发表于 2021-8-27 20:18

好像是因为 “ActiveBorder” 所在的地址0040307D   没有4字节对齐?

demoscene 发表于 2021-8-27 20:25

yujian1991 发表于 2021-8-27 20:18
好像是因为 “ActiveBorder” 所在的地址0040307D   没有4字节对齐?

是的,大佬厉害

demoscene 发表于 2021-8-27 12:21

答案,结束后公布压缩包密码

cptw 发表于 2021-8-27 13:26

DWORD的定义问题?

搜索曾经的回忆 发表于 2021-8-27 19:36

懵了,感觉一模一样,还是太菜
页: [1]
查看完整版本: 来找茬-已结束