高分求救:获取ie自动完成表单内容 如题,如何获取自动完成表单的内容,想要实现如Protected Storage PassView软件那样的效果 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 但那些软件是怎么做出来的呢,我这有一个delphi写的,可是读不懂,有谁帮帮忙 贴出delphi的代码,我来转换vb 做个IE的ADDIN就可以了。你会ADDIN就很简单。 ok999ok(ok999ok) 你的邮箱是多少,我发给你,另怎么为注册表键添加Everyone权限,这样也可以读到ie自动完成表单的数据 也给偶发一份[email protected] 我下载了那个Protected Storage PassView,仔细分析了一下:先用eXeScope打开pspv.exe,发现其含有UPX头部,表明它是用UPX压缩过的。于是解UPX壳,又用PEiD检查了一下,发现没有其他壳了,该程序是用VC++6.0编写的。看导入表,发现它只用到了常规API,也没有访问设备驱动,所以估计不是靠Windows的未公开功能。又仔细看导入表,发现导入了ADVAPI32.dll的几个注册表API,所以开始怀疑与注册表有关。再用regmon监控pspv的注册表操作,发现果然与注册表有关:自动完成的数据保存在注册表的“HKCU\SOFTWARE\Microsoft\Protected Storage System Provider”主键下,而且是加密保存的该主键下的数据只有“SYSTEM”用户才有权限访问。计算机管理员是属于Administrators组的,权限不够幸好Administrators用户有权利修改注册表主键的权限,所以可以为主键增加Administrators组的访问权限。我就是用这种办法看到该主键中的内容的:在注册表编辑器中,不断的修改权限,F5刷新,再进下层主键。不知道pspv是怎么进入这个高权限主键的,但是我估计编程时用修改权限的办法也是能行的。可能是pspv的作者搞到了一些内部资料,知道自动完成的数据被塞到注册表的哪个角落,而且知道怎么解密数据。而我们只是查出数据放在哪里,但是没有内部资料,不知道怎么解密数据啊。 现在可以通过其他工具给该键添加用户权限,手头也有一个c++的代码,可以设置权限,可是看不懂,有谁能为我翻译成VB版的:#include <Windows.h> #include <Aclapi.h> #pragma comment (lib,"Advapi32.lib") void main() { DWORD dwRet; LPSTR SamName = "MACHINE\\SAM\\SAM"; PSECURITY_DESCRIPTOR pSD = NULL; PACL pOldDacl = NULL; PACL pNewDacl = NULL; EXPLICIT_ACCESS ea; HKEY hKey = NULL; // 获取SAM主键的DACL dwRet = GetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION, NULL, NULL, &pOldDacl, NULL, &pSD); if (dwRet != ERROR_SUCCESS) { printf("GetNamedSecurityInfo Error: %d\n", dwRet); goto FreeAndExit; } // 创建一个ACE,允许Everyone完全控制对象,并允许子对象继承此权限 ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS)); BuildExplicitAccessWithName(&ea, "Everyone", KEY_ALL_ACCESS, SET_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT); // 将新的ACE加入DACL dwRet = SetEntriesInAcl(1, &ea, pOldDacl, &pNewDacl); if (dwRet != ERROR_SUCCESS) { printf("SetEntriesInAcl Error: %d\n", dwRet); goto FreeAndExit; } // 更新SAM主键的DACL dwRet = SetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION, NULL, NULL, pNewDacl, NULL); if (dwRet != ERROR_SUCCESS) { printf("SetNamedSecurityInfo Error: %d\n", dwRet); goto FreeAndExit; } // 打开SAM的子键 dwRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SAM\\SAM\\Domains\\Account\\Users\\000001F4", 0, KEY_ALL_ACCESS, &hKey); if (dwRet != ERROR_SUCCESS) { printf("RegOpenKeyEx Error: %d\n", dwRet); goto FreeAndExit; } printf("Open SAM Subkey Successfully.\n"); FreeAndExit: if (hKey) RegCloseKey(hKey); if (pNewDacl) LocalFree(pNewDacl); // 还原SAM主键的DACL if (pOldDacl) SetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION, NULL, NULL, pOldDacl, NULL); if (pSD) LocalFree(pSD); return; } 设置注册表主键的访问权限的是RegSetKeySecurity由于我认为权限API离普通编程太过遥远,所以我也不是很会用,只是大致记得API的功能 运行中出现了实时错误2147217864(80040e38),无法为更新定位行。一些值可能已在最后一次读取后已更改 单片机 别人看不起VB,我爱VB 一个不一样的分页问题 续贴,想要C/S 三层架构代码 请高手帮忙, 某一个字段在水晶报表上一行可显示多少字节 VB报表的一个技术问题,急!!!希望高手帮忙解决一下,谢谢! 增加目录下的图片到一个已经存在的记录集,有点难,高手请进 请问怎样打开*.sql 文件 高手:请问如何实现改变无标题栏的窗口大小!!!!!!!!!!!!!!! 一个关于获得磁盘ID的问题
你会ADDIN就很简单。
另怎么为注册表键添加Everyone权限,这样也可以读到ie自动完成表单的数据
[email protected]
于是解UPX壳,又用PEiD检查了一下,发现没有其他壳了,该程序是用VC++6.0编写的。看导入表,发现它只用到了常规API,也没有访问设备驱动,所以估计不是靠Windows的未公开功能。
又仔细看导入表,发现导入了ADVAPI32.dll的几个注册表API,所以开始怀疑与注册表有关。
再用regmon监控pspv的注册表操作,发现果然与注册表有关:自动完成的数据保存在注册表的“HKCU\SOFTWARE\Microsoft\Protected Storage System Provider”主键下,而且是加密保存的
该主键下的数据只有“SYSTEM”用户才有权限访问。计算机管理员是属于Administrators组的,权限不够
幸好Administrators用户有权利修改注册表主键的权限,所以可以为主键增加Administrators组的访问权限。
我就是用这种办法看到该主键中的内容的:在注册表编辑器中,不断的修改权限,F5刷新,再进下层主键。
不知道pspv是怎么进入这个高权限主键的,但是我估计编程时用修改权限的办法也是能行的。可能是pspv的作者搞到了一些内部资料,知道自动完成的数据被塞到注册表的哪个角落,而且知道怎么解密数据。
而我们只是查出数据放在哪里,但是没有内部资料,不知道怎么解密数据啊。
#include <Windows.h>
#include <Aclapi.h> #pragma comment (lib,"Advapi32.lib") void main()
{
DWORD dwRet;
LPSTR SamName = "MACHINE\\SAM\\SAM";
PSECURITY_DESCRIPTOR pSD = NULL;
PACL pOldDacl = NULL;
PACL pNewDacl = NULL;
EXPLICIT_ACCESS ea;
HKEY hKey = NULL; // 获取SAM主键的DACL
dwRet = GetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION,
NULL, NULL, &pOldDacl, NULL, &pSD);
if (dwRet != ERROR_SUCCESS)
{
printf("GetNamedSecurityInfo Error: %d\n", dwRet);
goto FreeAndExit;
} // 创建一个ACE,允许Everyone完全控制对象,并允许子对象继承此权限
ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
BuildExplicitAccessWithName(&ea, "Everyone", KEY_ALL_ACCESS, SET_ACCESS,
SUB_CONTAINERS_AND_OBJECTS_INHERIT); // 将新的ACE加入DACL
dwRet = SetEntriesInAcl(1, &ea, pOldDacl, &pNewDacl);
if (dwRet != ERROR_SUCCESS)
{
printf("SetEntriesInAcl Error: %d\n", dwRet);
goto FreeAndExit;
} // 更新SAM主键的DACL
dwRet = SetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION,
NULL, NULL, pNewDacl, NULL);
if (dwRet != ERROR_SUCCESS)
{
printf("SetNamedSecurityInfo Error: %d\n", dwRet);
goto FreeAndExit;
} // 打开SAM的子键
dwRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SAM\\SAM\\Domains\\Account\\Users\\000001F4",
0, KEY_ALL_ACCESS, &hKey);
if (dwRet != ERROR_SUCCESS)
{
printf("RegOpenKeyEx Error: %d\n", dwRet);
goto FreeAndExit;
} printf("Open SAM Subkey Successfully.\n"); FreeAndExit:
if (hKey) RegCloseKey(hKey);
if (pNewDacl) LocalFree(pNewDacl);
// 还原SAM主键的DACL
if (pOldDacl) SetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION,
NULL, NULL, pOldDacl, NULL);
if (pSD) LocalFree(pSD);
return;
}