摘要:by:koma 这两天,本来想花点时间研究一下QQ空间、农场外挂,于是抓包分析一了下,只可惜,在QQ网页登录时进行了加密处理,可惜我对网页编程一窍不通。有些朋友曾讲过那些是通过JS代码进行加密,可惜我JS也是一片空白,真是出师未杰身先死,惭愧惭愧...... 于...
by:koma

这两天,本来想花点时间研究一下QQ空间、农场外挂,于是抓包分析一了下,只可惜,在QQ网页登录时进行了加密处理,可惜我对网页编程一窍不通。有些朋友曾讲过那些是通过JS代码进行加密,可惜我JS也是一片空白,真是“出师未杰身先死”,惭愧惭愧......

于是只好挑CSDN这类简易一些的尝试学习一下(仅供学习交流),下面是学习笔记:

程序运行截图:

1、本机环境:Windows XP SP3、ADSL

2、开发工具:WildPackets OmniPeek V5.1.4

Visual C++ 6.0

IE6.0

FlexEdit V2.3.1871

3、数据包截图:

(QQ登录时,在密码2222加密时卡壳了,我尝试过很多加密算法,最终以失败告终......)

4、验证码显示使用IStream和IPicture来显示:

view plaincopy to clipboardprint?
/************************************************************************/ 
/* 函数说明:获取应用程序当前目录 
/* 参 数:无 
/* 返 回 值:返回目录路径、CString类型字符串 
/* By:Koma 2009.10.13 11:23 
/************************************************************************/ 
CString C***Dlg::GetExePath() 

char pathbuf[260]; 
int pathlen = ::GetModuleFileName(NULL,pathbuf,260);

// 替换掉单杠 
while(TRUE) 

if(pathbuf[pathlen--]=='\\') 
break; 

pathbuf[++pathlen]= 0x0; 
CString fname = pathbuf; 
return fname; 

/************************************************************************/ 
/* 函数说明:获取应用程序当前目录 
/* 参 数:无 
/* 返 回 值:返回目录路径、CString类型字符串 
/* By:Koma 2009.10.13 11:23 
/************************************************************************/ 
CString C***Dlg::GetExePath() 

char pathbuf[260]; 
int pathlen = ::GetModuleFileName(NULL,pathbuf,260);

// 替换掉单杠 
while(TRUE) 

if(pathbuf[pathlen--]=='\\') 
break; 

pathbuf[++pathlen]= 0x0; 
CString fname = pathbuf; 
return fname; 
}

view plaincopy to clipboardprint?
/************************************************************************/ 
/* 函数说明:下载验证码图片 
/* 参 数:无 
/* 返 回 值:无 
/* By:Koma 2009.10.13 11:50 
/************************************************************************/ 
void C***Dlg::DownURLImage() 

CInternetSession session; 
CString strUrl; 
CFile *pFile,out; 
char buff[512]; 
CString strPath;

// 产生八位随机数数组成验证码 
int nRand1 = rand()%100000+10000; 
int nRand2 = rand()%200000+10000;

strUrl.Format("); 
strPath = GetExePath() + "\\test.tmp"; 
pFile = session.OpenURL(strUrl); 
out.Open(strPath, CFile::modeCreate | CFile::modeWrite); 
while(pFile->Read(buff,512)){ 
out.Write(buff,512); 

out.Flush(); 
out.Close(); 

/************************************************************************/ 
/* 函数说明:下载验证码图片 
/* 参 数:无 
/* 返 回 值:无 
/* By:Koma 2009.10.13 11:50 
/************************************************************************/ 
void C***Dlg::DownURLImage()
{
CInternetSession session;
CString strUrl;
CFile *pFile,out; 
char buff[512];
CString strPath;

// 产生八位随机数数组成验证码
int nRand1 = rand()%100000+10000;
int nRand2 = rand()%200000+10000;

strUrl.Format(");
strPath = GetExePath() + "\\test.tmp";
pFile = session.OpenURL(strUrl); 
out.Open(strPath, CFile::modeCreate | CFile::modeWrite); 
while(pFile->Read(buff,512)){ 
out.Write(buff,512); 

out.Flush();
out.Close(); 
}

view plaincopy to clipboardprint?
/************************************************************************/ 
/* 函数说明:显示验证码图片 
/* 参 数:无 
/* 返 回 值:无 
/* By:Koma 2009.10.13 13:12 
/************************************************************************/ 
void C***Dlg::ShowImage() 

::CoInitialize(NULL); // 初始化COM 
HRESULT hr; 
CFile file; 
CString strPath; 
CPaintDC dc(this);

strPath = GetExePath() + "\\test.tmp"; 
file.Open(strPath, CFile::modeRead | CFile::shareDenyNone);

DWORD dwSize = file.GetLength(); 
HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, dwSize ); 
LPVOID lpBuf = ::GlobalLock( hMem );

file.ReadHuge( lpBuf, dwSize ); 
file.Close(); 
::GlobalUnlock( hMem );

// 由HGLOBAL得到IStream,参数TRUE 表示释放IStream的同时,释放内存 
hr = ::CreateStreamOnHGlobal(hMem,TRUE,&pStream ); 
ASSERT(SUCCEEDED(hr));

hr = ::OleLoadPicture(pStream, dwSize, TRUE, IID_IPicture,(LPVOID *)&pPicture); 
ASSERT(hr==S_OK);

long nWidth,nHeight; // 宽高 MM_HIMETRIC模式,单位是0.01毫米 
pPicture->get_Width( &nWidth ); // 宽 
pPicture->get_Height( &nHeight ); // 高

CSize sz(nWidth,nHeight); // 原大显示 
dc.HIMETRICtoDP(&sz); // 转换MM_HIMETRIC模式单位为MM_TEXT像素单位

pPicture->Render(dc.m_hDC,10,100,sz.cx,sz.cy,0,nHeight,nWidth,-nHeight,NULL); 
CRect rect(10,100,sz.cx + 10,sz.cy + 100);

// 将图片区域保存,以便后面只刷新图片区域 
m_PicRect = rect; 
if(pPicture) // 释放IPicture指针 
pPicture->Release(); 
if(pStream) // 释放IStream指针,同时释放hMem 
pStream->Release(); 
::CoUninitialize(); 

/************************************************************************/ 
/* 函数说明:显示验证码图片 
/* 参 数:无 
/* 返 回 值:无 
/* By:Koma 2009.10.13 13:12 
/************************************************************************/ 
void C***Dlg::ShowImage()
{
::CoInitialize(NULL); // 初始化COM 
HRESULT hr; 
CFile file;
CString strPath;
CPaintDC dc(this);

strPath = GetExePath() + "\\test.tmp";
file.Open(strPath, CFile::modeRead | CFile::shareDenyNone);

DWORD dwSize = file.GetLength(); 
HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, dwSize ); 
LPVOID lpBuf = ::GlobalLock( hMem );

file.ReadHuge( lpBuf, dwSize ); 
file.Close(); 
::GlobalUnlock( hMem );

// 由HGLOBAL得到IStream,参数TRUE 表示释放IStream的同时,释放内存 
hr = ::CreateStreamOnHGlobal(hMem,TRUE,&pStream ); 
ASSERT(SUCCEEDED(hr));

hr = ::OleLoadPicture(pStream, dwSize, TRUE, IID_IPicture,(LPVOID *)&pPicture); 
ASSERT(hr==S_OK);

long nWidth,nHeight; // 宽高 MM_HIMETRIC模式,单位是0.01毫米 
pPicture->get_Width( &nWidth ); // 宽 
pPicture->get_Height( &nHeight ); // 高

CSize sz(nWidth,nHeight); // 原大显示
dc.HIMETRICtoDP(&sz); // 转换MM_HIMETRIC模式单位为MM_TEXT像素单位

pPicture->Render(dc.m_hDC,10,100,sz.cx,sz.cy,0,nHeight,nWidth,-nHeight,NULL); 
CRect rect(10,100,sz.cx + 10,sz.cy + 100);

// 将图片区域保存,以便后面只刷新图片区域
m_PicRect = rect;
if(pPicture) // 释放IPicture指针
pPicture->Release();
if(pStream) // 释放IStream指针,同时释放hMem
pStream->Release();
::CoUninitialize();
}

VC显示网页验证码、模拟CSDN网页登录的更多相关文章

  1. 使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)

    urilib是python的标准库,当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得ur ...

  2. delphi WebBrowser控件上网页验证码图片识别教程(一)

    步骤一:获取网页中验证码图片的url地址 在delphi中加入一个BitBtn和一个memo以及WebBrowser控件实现网页中验证码图片的url地址的获取 程序如下:procedure TForm ...

  3. (转)request模拟知乎登录(无验证码机制

    原文:http://www.itnose.net/detail/6755805.html import request try: import cookielib #python2版本 except: ...

  4. request模拟知乎登录(无验证码机制)

    import request try: import cookielib #python2版本 except: import http.cookiejar as cookielib #python3版 ...

  5. CROW-5 WEB APP引擎商业计划书(HTML5方向)-微信网页版微信公众平台登录-水仙谷

    CROW-5 WEB APP引擎商业计划书(HTML5方向)-微信网页版微信公众平台登录-水仙谷 CROW-5 WEB APP引擎商业计划书(HTML5方向)

  6. 网页手机wap2.0网页的head里加入下面这条元标签,在iPhone的浏览器中页面将以原始大小显示,并不允许缩放

    网页手机wap2.0网页的head里加入下面这条元标签,在iPhone的浏览器中页面将以原始大小显示,并不允许缩放. <meta name="viewport" conten ...

  7. iPhone 收藏网址[添加到书签] 和 [添加到主屏幕] 显示自定义图标,而不是网页截图

    iPhone 收藏网址[添加到书签] 和 [添加到主屏幕] 显示自定义图标,而不是网页截图: <!-- Safari浏览器[添加到书签] --> <link rel="sh ...

  8. API文档打开显示'已取消到该网页的导航'的解决方法

    从网上下载的API,点击目录右边显示框显示“已取消到该网页的导航”.出现这样的问题并不是文档本身的问题,而是文档属性设置的问题. 这时候只要右键文件选择“属性”-在打开的界面中点击“解除锁定”-点击” ...

  9. 验证码模拟登录TestHome

    前面我们做了一个xsrf的知乎的模拟登录,那么今天将会给大家分享一下小弟写的一段带验证码的登录脚本.   今天我们要做的是testerhome的模拟登录,在做这个模拟登录的时候,我发现需要验证码才能登 ...

随机推荐

  1. Spring Boot笔记八:表单验证

    所谓的表单验证,就是为了防止用户乱输入的,这个问题前端的HTML5就可以判断了,其实不需要后端来验证,这里还是讲一下后端验证 首先,我们的Person类,我们加上一些表单验证的注释,如下: packa ...

  2. Web API中给领域模型添加媒体类型支持

    一.媒体类型 媒体类型(也称为MIME类型)标识一段数据的格式.在HTTP中,媒体类型描述了消息体的格式.媒体类型由两个字符串组成,一个类型和一个子类型.例如:text / html: image/ ...

  3. Python复习笔记(十)Http协议--Web服务器-并发服务器

    1. HTTP协议(超文本传输协议) 浏览器===>服务器发送的请求格式如下:(浏览器告诉服务器,浏览器的信息) GET / HTTP/1.1 Host: www.baidu.com Conne ...

  4. ThinkPHP中RBAC权限带菜单栏显示和详细权限操作

    RBAC是什么,能解决什么难题? RBAC是Role-Based Access Control的首字母,译成中文即基于角色的权限访问控制,说白了也就是用户通过角色与权限进行关联[其架构灵感来源于操作系 ...

  5. 利用C#访问注册表获取软件的安装路径

    文章地址:https://blog.csdn.net/yl2isoft/article/details/17332139

  6. 将WORD2010文件标记为最终状态

    将WORD2010文件标记为最终状态 在与他人共享WORD2010文档的副本之前,可以使用“标记为最终状态”命令将文件设置为只读,防止他人对文件进行更改.在将文件标记为最终状态后,键入.编辑命令以及校 ...

  7. 指定so动态链接库连接器

    在学习x86_64汇编时, 发现一旦使用glibc库函数, 如printf时, 一般是需要使用为ld传递命令行参数-lc来动态连接libc.so的, 但是, 生成的可执行文件却无法运行: 气煞我也! ...

  8. javascript获取值

    <div id='name'>张三</div> $('#name').val() $(name).val() 以上两个都可以得到值,第一种用的比较多.

  9. 三十三、Linux 进程与信号——中断系统调用和函数可重入性

    33.1 中断系统调用 进程调用 “慢” 系统调用时,如果发生了信号,内核会重启系统调用. 慢系统调用 可能会永久阻塞的系统调用 从终端设备.管道或网络设备上的文件读取 向上述文件写入 某些设备上的文 ...

  10. Java基础_0302:类和对象

    定义类 class Book { // 定义一个新的类 String title; // 书的名字 double price; // 书的价格 /** * 输出对象完整信息 */ public voi ...