VC编程实现IE7 IE8 IE9自动完成口令获取

2023-11-01

/****************************************************************************************************
都是网上的代码,自己组合起来的,刚开始报很多错误,花了很多时间终于搞定了
环境:VC6.0+SDK(SDK必须)
简单说明:IE将网站的URL保存于历史文件中,将自动完成的密码保存于注册表中的以下位置: 
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\IntelliForms\Storage2。
很简单,有我的部分注释,哈哈。
****************************************************************************************************/
  
#include "stdio.h"
#include <windows.h>
#define _WIN32_WINNT 0x0500 //必须,否则wincrypt.h用不了,报很多错误,郁闷
#include <Wincrypt.h>
#include "COMDEF.H"
#include "URLHIST.H" // Needed for IUrlHistoryStg2 and IID_IUrlHistoryStg2
#include <shlguid.h> // Needed for CLSID_CUrlHistory
#define URL_HISTORY_MAX 5000
#pragma comment(lib, "Crypt32.lib")
int GetUrlHistory(wchar_t *UrlHistory[URL_HISTORY_MAX])
{
int max = 0;
      
    CoInitialize(NULL);
    IUrlHistoryStg2* pUrlHistoryStg2=NULL;
    HRESULT hr = CoCreateInstance(CLSID_CUrlHistory, NULL, CLSCTX_INPROC_SERVER,IID_IUrlHistoryStg2,(void**)(&pUrlHistoryStg2));
    if(SUCCEEDED(hr)){
  
IEnumSTATURL* pEnumUrls;
        hr = pUrlHistoryStg2->EnumUrls(&pEnumUrls);
        if (SUCCEEDED(hr)){
     
   STATURL StatUrl[1];
   ULONG ulFetched;
            while (max<URL_HISTORY_MAX && (hr = pEnumUrls->Next(1, StatUrl, &ulFetched)) == S_OK){
                if (StatUrl->pwcsUrl != NULL) {
     wchar_t *p;
                    if(NULL!=(p = wcschr(StatUrl->pwcsUrl,'?')))
                        *p='\0';
                    UrlHistory[max] = new wchar_t[wcslen(StatUrl->pwcsUrl)+1];
     wcscpy(UrlHistory[max],StatUrl->pwcsUrl);
     max++;
                }
            }
            pEnumUrls->Release();
        }
        pUrlHistoryStg2->Release();
    }
    CoUninitialize();
return max;
}
//计算hash
void GetHashStr(wchar_t *Password,char *HashStr)
{
HashStr[0]='\0';
HCRYPTPROV hProv = NULL;
HCRYPTHASH hHash = NULL;
CryptAcquireContext(&hProv, 0,0,PROV_RSA_FULL,0);
if(CryptCreateHash(hProv,CALG_SHA1, 0, 0,&hHash)){
if(CryptHashData(hHash,(unsigned char *)Password,(wcslen(Password)+1)*2,0)){
   DWORD dwHashLen=20;
   BYTE Buffer[20];
   if(CryptGetHashParam(hHash,HP_HASHVAL,Buffer,&dwHashLen,0)){
    CryptDestroyHash(hHash);
    CryptReleaseContext(hProv, 0);
    char TmpBuf[128];
    unsigned char tail=0; 
    for(int i=0;i<20;i++){
     unsigned char c = Buffer[i];
     tail+=c;
     wsprintf(TmpBuf,"%s%2.2X",HashStr,c);
     strcpy(HashStr,TmpBuf);
    }
    wsprintf(TmpBuf,"%s%2.2X",HashStr,tail);
    strcpy(HashStr,TmpBuf);
   }
}
}
}
//数据输出
void PrintData(char *Data)
{
unsigned int HeaderSize;
unsigned int DataSize;
unsigned int DataMax;
memcpy(&HeaderSize,&Data[4],4); //the 4th byte from the beginning is Header size 
memcpy(&DataSize,&Data[8],4); //the 8th byte from the beginning is Data size 
memcpy(&DataMax,&Data[20],4); //the 20th byte from the beginning is Data number 
printf("HeaderSize=%d DataSize=%d DataMax=%d\n",HeaderSize,DataSize,DataMax);
char *pInfo = &Data[36];
char *pData = &Data[HeaderSize];
// afterwards, the same number of information data (16 bytes) as the data number comes
for(int n=0;n<DataMax;n++)
{
FILETIME ft,ftLocal;
SYSTEMTIME st;
unsigned int offset;
memcpy(&offset,pInfo,4); // the null byte from the beginning of information data is the offset of the data
memcpy(&ft,pInfo+4,8); // the 4th byte from the beginning of information data is the date
// the 12th byte from the beginning of information data is    the data length
FileTimeToLocalFileTime(&ft,&ftLocal);
FileTimeToSystemTime(&ftLocal, &st);
char TmpBuf[1024];
int l = ::WideCharToMultiByte(CP_THREAD_ACP, 0,(wchar_t*) 
   &Data[HeaderSize+12+offset], -1, NULL, 0, NULL, NULL );
if(-1!=l){
   ::WideCharToMultiByte(CP_THREAD_ACP, 0, 
    (wchar_t*)&Data[HeaderSize+12+offset], 
    wcslen((wchar_t*)&Data[HeaderSize+12+offset])+1, TmpBuf, l, NULL, 
    NULL );
   printf("[%d][%4.4d/%2.2d/%2.2d %2.2d:%2.2d]%s\n",n,st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,TmpBuf);
}
pInfo+=16;
}
}
int main()
{
// TODO: Place code here.
wchar_t *UrlHistory[URL_HISTORY_MAX];
int UrlListoryMax = GetUrlHistory(UrlHistory);
char *KeyStr = {"Software\\Microsoft\\Internet Explorer\\IntelliForms\\Storage2"};
    HKEY hKey;
if(ERROR_SUCCESS==RegOpenKeyEx(HKEY_CURRENT_USER,KeyStr,0,KEY_QUERY_VALUE,&hKey)){
        for(int i=0;;i++){
              
   char Val[1024];
            DWORD Size = 1024;
   if(ERROR_NO_MORE_ITEMS==RegEnumValue(hKey,i,Val, &Size, NULL,NULL, NULL, NULL))//i Storage2下第i个键值,返回键的名称
    break;
   for(int n=0;n<UrlListoryMax;n++){
    char HashStr[1024];
    GetHashStr(UrlHistory[n],HashStr);
    if(strcmp(Val,HashStr)==0){ 
     printf("ur : %ls\n",UrlHistory[n]);
     printf("hash : %s\n",HashStr);
     DWORD BufferLen;
     DWORD dwType;
     RegQueryValueEx(hKey,Val,0,&dwType,NULL,&BufferLen);
     BYTE *Buffer = new BYTE[BufferLen];
     if(RegQueryValueEx(hKey,Val,0,&dwType,Buffer,&BufferLen)==ERROR_SUCCESS){
        
      DATA_BLOB DataIn;
      DATA_BLOB DataOut;
      DATA_BLOB OptionalEntropy;
      DataIn.pbData = Buffer;
      DataIn.cbData = BufferLen;
      OptionalEntropy.pbData = (unsigned char *)UrlHistory[n];
      OptionalEntropy.cbData = (wcslen(UrlHistory[n])+1)*2;
        
      //CryptUnprotectData 确实在Wincrypt.h中,但是是定义在 Platform SDK中
      if(CryptUnprotectData(&DataIn,0,&OptionalEntropy,NULL,NULL,1,&DataOut)){
         
       PrintData((char *)DataOut.pbData); //纯粹的数据输出
       //printf("%s\n",(char *)DataOut.pbData);
       LocalFree(DataOut.pbData);
      }
      delete Buffer;
     }
                    break;
                }
            }
        }
        RegCloseKey(hKey);
    }
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VC编程实现IE7 IE8 IE9自动完成口令获取 的相关文章

  • 使用 Javascript eval() 100% 安全吗?

    我正在编写一个生成 Javascript 代码的 PHP 库 Javascript 代码有许多名为component001 component002 etc 页面通过 AJAX 动态加载 我需要通过 URL 变量传递组件的名称 然后由脚本进
  • 存储外部站点(不使用 OAuth)的用户凭据的智能方法是什么?

    我意识到 一般来说 您不应该直接存储用户凭据 即以纯文本形式 相反 最好存储它们的某种加密形式 但是 假设我创建了一个与其他第三方网站交互的网站 假设这个第 3 方站点提供了一个 API 需要用户的凭据 使用该站点 进行身份验证 如果我的目
  • PHP - hash_pbkdf2 函数

    我正在尝试使用此 php 函数执行一个函数来哈希密码 http be php net manual en function hash pbkdf2 php http be php net manual en function hash pb
  • 对客户端 JavaScript 计算器使用 eval 安全吗?

    我正在制作一个计算器 作为用户浏览器的静态 HTML 页面 该页面并非旨在将任何信息提交回服务器 除了这个计算器之外 网页上不会出现任何其他内容 在这种情况下使用 eval 安全吗 或者换句话说 在这种情况下使用 eval 是否会导致额外的
  • 如何使用 .NET 以编程方式沙箱进程

    我计划设计一个系统 本质上允许用户在我的机器上运行 PHP Ruby 等脚本代码 我想将它们放入沙箱中 以防止它们访问机器的关键方面 哪些 NET API 可用于此目的 我计划从主流程创建一个子流程 并希望以编程方式从主流程中沙箱该子流程
  • 除了用户名/密码之外的安全性?

    我有一个 Web 应用程序 其安全性要求高于普通 Web 应用程序 当任何用户访问域名时 他们都会看到两个文本字段 一个用户名字段和一个密码字段 如果他们输入有效的用户 密码 他们就可以访问 Web 应用程序 标准的东西 但是 我正在寻找超
  • md5() 是做什么用的?

    我正在阅读本教程简单的PHP登录系统 http www phpeasystep com workshopview php id 6 最后它建议你应该使用 md5 加密您的密码 http www phpeasystep com worksho
  • Microsoft 帐户 JWT 身份验证令牌如何签名?

    在我的 Web 应用程序中 我需要验证从 Live SDK 5 6 获取的 JWT 身份验证令牌 不久前 这些令牌的签名是使用签名密钥的 Base64 编码标头 有效负载的 HMACSHA256 哈希 该签名密钥是应用程序秘密 来自 acc
  • Java中如何确保String对象被销毁?

    我公司的一名员工需要通过我编写的程序修改 SQL Server 数据库中的数据 该程序首先使用 Windows 身份验证 我要求 DBA 授予该特定用户对所述数据库的写入权限 他们不愿意这样做 而是授予了写权限myWindows 用户帐户
  • 为什么需要 JsonRequestBehavior?

    Why is Json Request Behavior needed 如果我想限制HttpGet对我的动作的请求我可以用 HttpPost 属性 Example HttpPost public JsonResult Foo return
  • 如何只允许从我的 iOS 应用程序访问我的 MySQL 数据库? (使用webapp作为数据库的网关)

    我的 iOS 应用程序需要连接到 mysql 服务器 为了实现这一目标 我想创建一个 Web 应用程序 充当客户端应用程序和服务器端数据库之间的中间人 我担心的是 有人可以简单地找出我的应用程序使用的 URL 并传递他们自己的 URL 参数
  • “openssl 编程简介。”文章。过期的证书

    我是 openSSL 库和 PKI 的新手 我有一个简单的问题要问 openSSL 专家 有谁知道如何为本文中的代码示例创建证书 OpenSSL 编程简介 第一部分 第二部分 作者 Eric Rescorla www rtfm com op
  • ASPXAUTH Cookie 的安全标志

    我们有一个面向外部的应用程序 由外部安全公司进行了渗透测试 应用程序在 ASP NET MVC4 上开发并在 IIS8 Windows 2012 Server 上运行 报告的漏洞之一是 ASPXAUTH 不安全 当我检查 cookie 检查
  • ASP.NET MVC 3 文件夹结构

    在了解了传统 ASP NET Webform 的背景后 我正在学习 MVC 框架 我正在开发一个典型的示例电子商务网站 该网站具有公共域 然后能够注册提供对安全会员区域的访问的服务 我有几个问题 在 ASP NET 中 私有成员页面通常与公
  • https登录的安全性?

    我正在编写一个 Apple iOS 应用程序 用于登录帐户并获取一些余额 它使用纯 html 链接进行登录 用户名和密码在运行时动态加载到登录链接 我使用 Wireshark 嗅探了流量 但在发送的任何包中都找不到用户名或密码 我猜 htt
  • 保护移动连接 - 存储秘密和密钥

    感谢您花时间阅读本文 我是一名年轻的开发人员 在 Web 项目和服务器端编码方面拥有一些专业经验 但我现在正在构建我的第一个移动应用程序 经过在线深入研究后 我还没有能够澄清我关于保护移动应用程序数据传输的一些问题 这是我认为我理解正确的
  • 如何在Rails 4.1中使用secrets.yml作为API_KEYS?

    在我最近的一个项目中 我开始于 gitignoring包含机密和环境变量的文件 因此 除了包含第三方机密 例如 Stripe Twitter API 或 Facebook Graph 或内部 api keys 等 的文件外 整个项目都致力于
  • exec()、shell_exec()、curl_exec() 的安全漏洞

    有时 我会使用 exec shell exec 和curl exec 以下是典型用途 假设其中有 PHP 变量 即第一个变量中的 html 用户有可能修改其内容 从安全漏洞的角度来看 我应该关注什么 escapeshellcmd 和 esc
  • 使用公钥时出现 InvalidKeySpecException

    我正在拼命尝试在 Android 上使用非对称公钥 私钥加密技术来加密消息 我在 Windows 上 使用 puttygen 生成了公钥和私钥 我不确定它有什么区别 但我选择了 SSH 2 RSA 这是公钥 AAAAB3NzaC1yc2EA
  • Java Web Start 的证书已过期

    JWS 对代码签名证书过期有何反应 根据我的观察 它似乎忽略了 CA 签名证书的到期日期 但我想找到一些确凿的证据 例如官方文档 来证实这一点 如果签名的 jar 被赋予时间戳 来自时间戳权威 那么即使在证书过期之后签名仍然有效 假设时间戳

随机推荐

  • Mac 怎样安装虚拟机(VMware fusion 12)

    虚拟机软件有 1 VirtualBox 一款免费开源的虚拟机软件 2 VMware fusion 12 也是一款免费开源的虚拟机软件 3 VMware Player 4 VMware workstation 5 Microsoft Virt
  • 40W-100W系列PD快充IC方案,AH6680,高效简洁的升降压芯片

    PD40W45W50W55W65W100W移动电源大功率芯片 40W 100W系列PD快充IC方案 AH6680 高效简洁的升降压芯片 PD40W45W50W65W大功率充电芯片 宽电压输入3 6 V至32 V 最大36 V 同步4开关双向
  • CoerceValueCallback事件的使用

    定义依赖属性 public static readonly DependencyProperty ValueProperty DependencyProperty Register Value typeof decimal typeof N
  • 正交

    正交的概念类似几何中垂直的概念 连个向量点乘的结果等于0我们称这两个向量正交 我们可以用向量正交的概念来看勾股定理 假设a b是两个向量 那么 a 的平方加上 b 的平方等于 a b 的平方当切仅当向量a b正交的时候才成立 如果一个sub
  • Input值不可修改

    Input值不可修改 要固定input标签里面的值不能被修改 我这里有两种方法 1 为input标签设置只读模式 设置只读模式之后 整个文本框就都会被封住 input标签里面的值就不能被手动删除和修改 不能再添加新的内容 有两种方式设置只读
  • UnityEditor中建立两个Color,实现mesh的颜色渐变(Gradient)(GUI.changed,SceneView.RepaintAll())

    shader只是测试用 不用在意 Shader Custom Vertex Properties SubShader Lighting Off Pass CGPROGRAM pragma vertex vert pragma fragmen
  • ElementUI框架引入和使用

    安装使用有两种方式 npm cnpm安装到项目中 CDN引入 先介绍CDN引入 CDN全称 Content Delivery Network即内容分发网络 CDN是构建在网络之上的内容分发网络 依靠部署在各地的边缘服务器 通过中心平台的负载
  • Django默认用户登录make_password函数原生代码实现

    from hashlib import pbkdf2 hmac from random import choice from base64 import b64encode 随机数所使用的字符串 serct str abcdefghijkl
  • 2016.09.21----------嵌入式,离散数据,线性数据

    离散数据和连续数据是相对的 区别在于作用域 连续数据的作用域是连续的 例如1 9 离散数据的作用域是不连续的 例如1 3 5 7 线性数据和非线性数据的区别是 线性数据中的每一个元素都有确定的 前驱 和 后继 头和尾除外 是一条线下来的 没
  • scanf处理带有空格的输入方法

    scanf函数处理输入的时候遇到空格会结束 利用scanf n str 可以读取一行字符串 直到遇到换行符 n结束 经过此方法读取字符串以后 会有一个换行符号 n存在输入缓冲区中 因此需要用scanf c 清 理输入缓冲区中第一个字符 也就
  • Redux的基本使用方法(计数器)

    Redux就像Vuex一样哈哈 可以让组件之间的数据传递变得方便 传统的数据传递非常的麻烦 如果最上层组件要将数据传递给最下层的组件需要逐级传递 组件的耦合度会变得非常的高 要是其中一个组件出现问题的话会导致整个项目出现问题 而Redux是
  • window下搭建zookeeper

    下载zookeeper的压缩包 官网连接 Apache ZooKeeper 我自己用的 apache zookeeper zip 互联网文档类资源 CSDN下载 下载后解压 进到bin目录启动zkServer cmd 参考链接 Zookee
  • Simon IELTS: Speaking

    文章目录 Speaking Lesson 1 General Advice Overall Tips Aims of the course Speaking Lesson 2 Part 1 Introduction to Part 1 Ti
  • [疯狂Java]泛型:泛型的底层原理(类型擦除、原生类型、编译前检查)

    1
  • Vue父子组件通信之父组件主动获取子组件的数据和方法(二)

    父组件主动获取子组件的数据和方法 操作步骤 1 调用子组件的时候定义一个ref
  • ReID行人重识别(训练+检测,附代码),可做图像检索,陌生人检索等项目

    利用ReID和目标检测对视频进行检测 可以对视频中的人进行重识别 支持更换数据集可以做车辆重识别等 可应用于图像 视频检索 行人跟踪等 在以前学习ReID的时候 是跟着下面视频学习的 该论文和代码也可以参考GitHub michuanhao
  • webpack中的loader的配置

    安装babel npm install save dev babel loader babel core 此处如果要用lastest 需要 npm install save dev babel preset latest 配置babel如下
  • Qt--动态链接库的创建和使用

    写在前面 在Qt的实际开发中 免不了使用和创建动态链接库 因此熟悉Qt中动态链接库的创建和使用对后续的库开发或使用是非常用必要的 在之前的文章https blog csdn net SNAKEpc12138 article details
  • Mask Rcnn目标分割-训练数据集-balloon/coco

    本文介绍了Mask Rcnn目标分割算法如何训练自己数据集 对训练所需的文件以及训练代码进行详细的说明 官方提供了coco数据集和balloon数据集两种 可以基于以上数据集进行训练 也可以基于自己采集的数据集进行训练 下面将对两种不同方式
  • VC编程实现IE7 IE8 IE9自动完成口令获取

    都是网上的代码 自己组合起来的 刚开始报很多错误 花了很多时间终于搞定了 环境 VC6 0 SDK SDK必须 简单说明 IE将网站的URL保存于历史文件中 将自动完成的密码保存于注册表中的以下位置 HKEY CURRENT USER So