来找茬-已结束
本帖最后由 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 好像是因为 “ActiveBorder” 所在的地址0040307D 没有4字节对齐? yujian1991 发表于 2021-8-27 20:18
好像是因为 “ActiveBorder” 所在的地址0040307D 没有4字节对齐?
是的,大佬厉害 答案,结束后公布压缩包密码 DWORD的定义问题? 懵了,感觉一模一样,还是太菜
页:
[1]