Peeking into Password Edit '& Internet Explorer - Super Password Spy++

uniapp(全端兼容) - 最新详细实现瀑布流列表及布局设计,uni-app全平台兼容的瀑布流示例,view容器自适应瀑布流布局,图片瀑布流布局、图像+文字卡片式瀑布流,类似小红书(详细示例代码) uni-app,瀑布流,安卓app,苹果app,微信小程序,移动端,H5网页,手机网站,微信小程序、支付宝小程序,手机app端,nvue,瀑布流布局,如何实现图片瀑布流,怎么做文字+图像瀑布流,uniapp仿小红书笔记瀑布流效果,uniAPP仿快手抖音布局列表,瀑布流列表详细教程,编译所有平台都能用的瀑布流列表,商品瀑布流列表,图文列表,小程序瀑布流,页面触底懒加载,瀑布流插件,详细示例代码教程,uni-app H5实现瀑布流效果,uniapp小程序做瀑布流,纯css瀑布流,用uniapp写瀑布流商品列表, 阅读详情

Peeking into Password Edit '& Internet Explorer - Super Password Spy++ 

Rating: 

 Zhefu Zhang (view profile)
January 8, 2003


(continued)

 

Key Technology Used: Windows Hook, IE COM Object, Win2k Security Context

Applicable Article Category in CodeGuru: IE Programming, Tool, System, Miscellaneous

Summary

If you need a tool to peek not only the password edit boxes on different programs, but also the **** password input field on a homepage residing inside Internet Explorer, here it is—SuperPasswordSpy++.

With Windows Hook, it is not difficult to peek into a remote process's password edit, but how about the password input field inside a homepage, say, in an Internet Explorer window? The password input field, obviously, is NOT a window; you have to turn to the IHTMLDocument2 interface to enumerate the inside stuff and extract the password. This program will show you how to do with both the password edit common control and the password input field inside IE. Following is the screen shot of the program running, peeking the password in both cases.


Click here for a larger image.

Figure 1: SuperPasswordSpy++ Peeking a Hotmail "Forget Your Password" Page

Figure 2: SuperPasswordSpy++ Peeking a Password Edit inside IIS 5.0 on WinXP

Architecture

After the user begins to drag the magnifying glass around on the screen, the program captures the mouse and keeps track of the mouse move message. Whenever the mouse moves onto a new window, it checks the windows class name and window style to decide whether it is a password edit or an IE. (Note: actually, it is a Web browser control; I use IE for short.) In the latter case, a hook DLL has to be injected into the IE immediately to decide whether the IE contains a password input field.

Please Note: Here we have two options to implement the hook:

The first way is setting a WH_GETMESSAGE hook, which was done by Mr. Brian Friesen in his article PasswordSpy in the Samples Section of www.codeguru.com. This hook DLL will intercept the posted message and a synchronization object (mutex, event, and so on) will be applied inside it. Please refer to Figure 3:

Figure 3: General Spy Program's Hook Architecture

There are five steps involved:

  1. The Spy program injects a hook DLL into the Target program.
  2. The Spy program posts a user message to the Target program that will be intercepted by the DLL.
  3. The DLL intercepts the user message and reads the password edit content.
  4. The DLL sends the data back to the Spy program.
  5. The Spy program gets the data and un-hooks the DLL.

Because the Spy program posts the user message, Step 2 will not "block" and the Spy program does NOT know when Step 4 will happen. Usually, this kind of Spy program uses WM_COPYDATA to transfer byte data; it is a "Send" message. Okay, here is the tough thing: The user may move the magnify glass here and there, and let's image the following case. The Spy program found a password edit, injected the DLL into the target program, posted the user message, and suddenly the user moved the magnify glass to another password edit, so the Spy program has to un-hook the DLL out of the old target program, hook into the new target program, and post the user message. Unfortunately, the WM_COPYDATA from the old target program has queued into the Spy program's message queue, and if you do not append the target window handle information to the WM_COPYDATA, you cannot tell the data of the current Target program from the old target program...

Another option is setting the WH_CALLWNDPROC hook. It's all the same as the first option, except in Step 2 we send the message instead of posting it to the target program. The hook DLL will intercept the user message and make inside password reading, and call SendMessage with WM_COPYDATA to pass the data to the Spy program. In one word, Step 2 is blocked until Steps 3 and 4 are finished; so, after Step 2 is finished, we can do Step 5 directly. In this way, the code will be much simpler than the first way. It is just like Block Socket and Non-Block Socket programming.

Sure, the second way has its disadvantage. Consider the following case: There are two password edits on the same window and the user must leave one to enter another. In the first way, we can check the two edits are on the same thread, so we can hook the DLL only once. In the second way, we hook twice which means (ignorable here in this program) a performance penalty.

Implementation Description

1. How to get IHTMLDocument from Browser Control Window Handle:

(with ref. from MSDN KB Q249232 HOWTO: Get IHTMLDocument2 from a HWND)

BOOL HWnd2HtmlDocument()
{

   CoUninitialize();
   HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );
   if ( hInst == NULL ) return FALSE;
   LRESULT lRes;
   UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
   ::SendMessageTimeout( g_hTarget, nMsg,
     0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );
   LPFNOBJECTFROMLRESULT pfObjectFromLresult =
        (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst,
        "ObjectFromLresult");
   if ( pfObjectFromLresult == NULL )
   {
      ::FreeLibrary( hInst );
      CoUninitialize();
      return FALSE;
   }
   WCHAR strDoc[] = L"{626fc520-a41e-11cf-a731-00a0c9082637}";
                   //IID_IHTMLDocument2 CLSID
   CLSID uuidDoc;
   HRESULT hrDoc = CLSIDFromString((LPOLESTR)strDoc,
      &uuidDoc //IID_IHTMLDocument2
      );
   if(!SUCCEEDED(hrDoc))
   {
      ::FreeLibrary( hInst );
      CoUninitialize();
      return FALSE;
   }
   HRESULT hr  = (*pfObjectFromLresult)( lRes, uuidDoc,
      //IID_IHTMLDocument,
      0, (void**)&g_lpHTMLDocument2);
   if ( SUCCEEDED(hr) )
   {
      //OK, We Get Here Successfully
   }
   else
   {
      ::FreeLibrary( hInst );
      CoUninitialize();
      return FALSE;
   }
   ::FreeLibrary( hInst );
   CoUninitialize();
   return TRUE;
}

There is something I need to explain here: g_hTarget is the handle of the browser, and its class name is "Internet Explorer_Server." Usually, it is not a problem with MS Internet Explorer, which always starts to navigate somewhere when it starts. But, in some applications hosting a Web Browser with ActiveX, before the browser navigates, the "Internet Explorer_Server" window does NOT exist. Let me give you an example:

Figure 4: Spy++'s Screen Shot on a Dialog Hosting Two MS Web Browser ActiveXs

It is a screen shot from Spy++. There are two browsers on this dialog (00060294); only browser 000202D6 navigates to some URL. You can make an experiment by putting a WebBrowser ActiveX on a dialog, and check this by Spy++.

2. Whether Current Homepage contains a Password Input Field:

DWORD CheckHtmlDocument()
//Ret: 0 -- No Password Input; Else -- Password Input Number
{
   MSHTML::IHTMLElementCollection *pForm;
   HRESULT hr = g_lpHTMLDocument2->get_all(&pForm);
   //g_lpHTMLDocument2 is a pointer of IHTMLDocument2
   if(FAILED(hr)) return 0;
   long len;
   pForm->get_length(&len); //How many elements on this form?
   DWORD dwRet = 0;

   for(int i = 0; i < len; i++)
   {
      LPDISPATCH lpItem = pForm->item(CComVariant(i),
                 CComVariant(i));
      MSHTML::IHTMLInputElementPtr lpInput;
      HRESULT hr = lpItem->QueryInterface(&lpInput);
      //Is it a input field?

      if(FAILED(hr)) continue;
      _bstr_t type(_T("password"));

      if(lpInput->Gettype() == type) //Check Field Type
      {
          //_bstr_t x = lpInput->Getvalue();
          //If you want its string
          dwRet++;
      }
      lpItem->Release();             //Remember To Release this!
      lpItem = NULL;
   }
   pForm->Release();
   pForm = NULL;
   return dwRet;
}

3. Extract password from Current Homepage's Password Input Field:

  _bstr_t x = lpInput->Getvalue();    //And you go!

  LPCTSTR lpWhatEver = (LPCTSTR)x;

  //Do something with the password here

Special Note with SuperPasswordSpy++

Once again, SuperPasswordSpy++ is for WinNT/2K/XP only and IE 4.0+ is needed; it is an Unicode-based Program.

Interested readers can learn how to track window and hook remote processes by studying the source code of SuperPasswordSpy++. It is highly recommended the readers study MS Platform SDK's Spy sample and PasswordSpy of Mr. Brian Friesen. The author dislikes "recreating the wheel" things, and borrows mouse tracking code from the Spy sample and a function "SmallestWindowFromPoint," plus the resource file from PasswordSpy. And, if the reader has questions about the hook technique, please read Mr. Brian Friesen's article; it is already detailed enough. In addition, readers can read Chapters 19 and 20 of Programming Application for MS Windows, 4th Edition written by Jeffrey Richter, published by Microsoft Press, 1999, for more detailed information about Shared Sections in DLLs.

Well, besides, something unclear with SuperPasswordSpy++'s implementation does exist:

1. Criteria of Judging Password Edit

BOOL IsPasswordEdit(HWND hWnd)
{
      TCHAR szClassName[64];
      int nRet = GetClassName(hWnd, szClassName, 64);
      if(nRet == 0) return FALSE;
      szClassName[nRet] = 0;
      if(::lstrcmp(szClassName, _T("Edit")) != 0 &&
         ::lstrcmp(szClassName, _T("TEdit")) != 0

             &&| ::lstrcmp(szClassName, _T("ThunderTextBox"))
                 != 0 ) return FALSE;
            //Here, is it OK?

      DWORD dw = ::GetWindowLong(hWnd,GWL_STYLE);
      dw &= ES_PASSWORD;
      if(dw == ES_PASSWORD)
           return TRUE;
      return FALSE;
}

Above is the implementation of SuperPasswordSpy++. But, in a tool sample called Eureka (residing in http://www.codeguru.com/samples/Eureka.shtml, unfortunately this tool is for Win9X/Me), the author judges a password edit if its class name is "TEDIT," "IRIS.PASSWORD," or "EDIT." I played with Delphi and Borland C++ six years ago, and I know it is Borland's name convention TxxxClass. But I don't have Delphi handy, so if anyone can help check this, please comment below. As to the "ThunderTextBox," it is created by Visual Basic. Thanks in advance. And I will add multiple name matching if necessary. Well, of course, it is impossible to cover all cases for the class name can be changed by developers arbitrarily (for example, who knows what is the password edit name in Visual Studio 2003?). If it is such case, please modify the source of my SuperPasswordSpy++ yourself.

2. When Multiple Frame Sets Exist Inside an HTML Document...

The current (Dec. 2002) version of SuperPasswordSpy++ assumes there is only one frame inside an HTML document if it contains a password field. It is fine with most passworded homepages (for example, MSN Hotmail). But, to make it perfect, I will add multiple frame set support in next version of SuperPasswordSpy++. Please check this in my site later.

More Words about *****

1. Windows Logon Password: (Win2K ONLY)

It sounds a little crazy, but please look at the following figure:

Figure 5: SuperPasswordSpy++'s Peeking "Change Your Password" on WinLogon Screen of Win2K Server

I have only the Japanese Win2K server at hand, so there is some Japanese here, but I think you can see it is from "Ctrl+Alt-Del," then press the "Change Password" button. PasswordSpy++ has been launched under SYSTEM context on Winlogon Desktop of this Win2K, and it works. I mean, it can read the password from the "Change Password" Dialog. Oh, by the way, you will never know the current password because it is never shown.

To conduct this experiment, you have to use some tool to launch a program on the Windows Winlogon Desktop. You can go to http://www.codeguru.com/misc/RunUser.html to get my "GUI RunAs" program. You have to choose Winlogon desktop, make the user name edit box blank to use SYSTEM identity, and remember you must have Administrator rights to do so. Follow the article's instructions and you may need to log off the current session once (only once) to enable some privileges if you do not already have them. Some reader sent me e-mail saying there is already a "Runas" command line tool in Windows OS already. I know, but with this MS-brand RunAs command-line tool, you can NOT choose the Desktop to launch the program while my tool works. If you have problems with the tool (for example, the launched program's GUI is blocked), please launch the tool itself as SYSTEM first, and then launch the program you use.

The last word: To get the screen shot, press "Print Screen" when you are on the Winlogon desktop, go to the default desktop, and paste it into MSPaint. You can also use the RunAs tool to launch MSPaint onto the Winlogon screen too, and do your job there without switching back and forth. And, you may find this RunAs GUI tool is a good way to launch a task manager as SYSTEM and kill some stubborn process (including NT Service).

2. Anti Peeking Edit and Crack Anti-Peeking Edit ( -* - = +)

I notice someone asked how to do anti peeking. Well, it does not cost too much to implement anti-peeking. Following is a code example using MFC. First, derive an edit class from CEdit. My first idea is to override its PreTranslate, this way:

BOOL CAntiPeekEdit::PreTranslateMessage(MSG* pMsg)
//This does NOT work!
{
   if(pMsg->message == WM_GETTEXT)
   {
      //Only Report Text When Passing a Fixed Length Buffer;
      if(pMsg->wParam == 1024)  //The Number Only You Know
      {
      }
      else
      {
         ::lstrcpy((LPTSTR)(pMsg->lParam), _T("Nothing"));
         return TRUE;
      }
   }
   return CEdit::PreTranslateMessage(pMsg);
}

Unfortunately, the inside if clause will never be called. Why? MFC team guys know. Well, I have to turn to the virtual function WindowsProc; this time it works:

LRESULT CAntiPeekEdit::WindowProc( UINT message,
                                   WPARAM wParam,
                                   LPARAM lParam)
//This works!
{
   if(message == WM_GETTEXT)
   {
      if(wParam == 1024)  //The Number Only You Know
      {
         return CEdit::WindowProc(message, wParam, lParam);
      }
      else
      {
         ::lstrcpy((LPTSTR)(lParam), _T("Nothing"));
         //Insert Dummy Text Here To the Peeker
         return 7;
      }
   }
   return CEdit::WindowProc(message, wParam, lParam);
}

In your own program, when you want to get the password text, you must do the following:

TCHAR sz[1024];
::SendMessage(hPasswordEdit, WM_GETTEXT, 1024, (LPARAM)sz);

If other routines call to retrieve the password, WM_GETTEXTLENGTH will tell them the correct length, but when the correct length buffer is to our AntiPeekEdit, we know it is called from some other un-secure source, so we can just send back the junk. Well, you can also abandon WM_GETTEXT completely and use a WM_USER + 123 message to get the text out.

Let's go back to how to counterstrike this kind of AntiPeekEdit. Well, we know the reason we use hook DLL and query password from inside the remote process is the Win2K password-style edit will not accept WM_GETTEXT from outside the process boundary. And, the above strategy replaces the standard Edit class Windows Procedure with a user-defined one. So, how about replacing this user-defined procedure back to the standard Edit class Windows Procedure when our lovelySuperPasswordSpy++ peeks it:

HWND hParent = ::GetParent(g_hTarget);
//g_hTarget is the password edit handle we are interested
HWND hwndEdit = CreateWindow(
_T("EDIT"),  // predefined class
NULL,  // no window title
WS_CHILD | WS_VISIBLE | WS_VSCROLL |
ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,
0, 0, 0, 0,  // set size in WM_SIZE message
hParent,     // parent window
(HMENU)123,
// edit control ID -- Note: Must be Unique Among Sibling Windows
(HINSTANCE) GetWindowLong(g_hTarget, GWL_HINSTANCE),
NULL);    // pointer not needed
//Get the standard Windows Procedure of Edit class
LONG_PTR lpNewEdit = GetWindowLongPtr(hwndEdit, GWLP_WNDPROC);
LONG_PTR lp = ::SetWindowLongPtr(g_hTarget, GWLP_WNDPROC,
                                (LONG_PTR)lpNewEdit);

//Password Fetch Here --- I only use this call in
//SuperPasswordSpy++
SendMessage(g_hTarget, WM_GETTEXT, sizeof(szBuffer) /
            sizeof(TCHAR), (LPARAM)szBuffer);


//Reset the original Windows Procedure
::SetWindowLongPtr(g_hTarget, GWLP_WNDPROC, (LONG_PTR)lp);

Please note the Control ID parameter when creating the fake edit; it must be unique among its siblings. Well, I use 123 as a placeholder here. You can write addition code to enumerate the sibling windows and get a unique ID, and remember to destroy the fake edit in the end.

But, it is really an overkill in most cases, so I did not include the above code in SuperPasswordSpy++ to keep performance and stability high. But, once you really meet such a anti-peek password edit, uncomment the additional code in theSuperPasswordSpy++ source code, and keep an eye on keeping the fake edit control ID unique.

If someone is mad asking if we have way to anti- anti- anti-peeking, well, maybe you can add a global variable flag, before you fetch password set this flag, and after reading, reset it.... Then why not use some algorithm to encode the text in WM_GETTEXT handler? faint...

3. More Peeking Spy Tools...

If you need to peek into MSN Messenger/Windows Messenger inside information and chat contents, please refer to my previous article MessengerSpy++ (residing in http://www.codeguru.com/misc/MessagerSpy.html). The following figure shows we can get the 100% fresh RTF text and these Emotional Icons from MSN Messenger (the right-side window). Note: it is for Win2k/XP and support MSN Messenger 4.6, 4.7, and 5.0. And what's more, it can send text/icons to MSN Messenger and let Messenger send it to the other person.

Figure 5: Mate Tool MessengerSpy++'s Peeking a MSN Messenger Chat on WinXP

3. WinXP "Change User Password" Control Panel Applet

Unfortunately, even it is inside "Internet Explorer_Server" (res://D:/WINDOWS/system32/nusrmgr.cpl/nusrmgr.hta), the password input field is inside an ActiveX with CLSID:A5064426-D541-11D4-9523-00B0D022CA64 in my English WinXP Professional. So, it is completely impossible to read the password from the ActiveX black box.

Acknowledgements

Thanks to the following article/code contributor on CodeGuru: Mr. Giancarlo Iovino for his HyperLink Control (I fixed a few lines of code so it can go under Unicode now), and Mr. Brian Friesen for his thesis-level article and tool PasswordSpy.

Downloads

Download Demo Project Source (all the source code + exe) - 142 Kb
Download Demo Exe File Only (Exe + DLL Only, MFC library static linked) - 373 Kb

Version History

VersionRelease DateFeatures
1.12003.m.dSupport For IE Multiple Frame Set Password Peeking
1.0Dec 7, 2002First Version

GEE APP:时间序列影像批处理工具:按月筛选与智能导出解决方案出工具 本文介绍了一个基于Google Earth Engine(GEE)开发的智能时序影像处理工具,可高效处理遥感影像时间序列数据。该工具采用三栏式交互布局,包含控制面板、地图显示和缩略图预览区域。核心功能包括:1)灵活的时间筛选机制,支持年度范围选择和月份批量选择;2)智能影像筛选算法,基于云量、空间覆盖等条件自动选择最佳影像;3)交互式缩略图预览,支持点击加载完整影像;4)自动化批量导出系统,实现标准化命名和统一存储。工具可广泛应用于农业监测、城市扩张研究、生态环境评估等领域,显著提高遥感数据预处理效率,确保 阅读详情

相关推荐

COMSOL报错调试总结(不定期更新)

COMSOL报错调试总结1. 可定位错误1.1 除零错误1.2 未定义变量值1.3 边界条件/材料属性等缺失2. 难定位错误2.1. 装配期间内存不足 官方给的案例总是非常完美,运行流畅,结果完美。但是自己做模型时候就总是报错,而且不像自己coding的程序那样可以明确定位哪里出了bug。这里把我碰到的一些报错问题以及调试方法记录下来~ 部分来源于以下参考来源: http://wap.sciencenet.cn/blog-1467490-1118453.html?mobile=1 1. 可定位错误 以下错误

jessica0307的博客 8万+

ERROR: The old password can not be NULL, please input your old password with ‘replace‘ grammar.

我在给postgresql改密遇到问题,这是错误信息: alter role yab1 with password ‘Mi*U%7Gk72tp2E%%’;

十年运维开发经验的王义杰在此分享自己的知识和经验 1458

基于Simulink的永磁同步电机(PMSM)无位置传感器矢量控制与龙伯格观测器设计​

本文介绍了基于Simulink的永磁同步电机(PMSM)无位置传感器矢量控制方法,重点讲解了龙伯格观测器的设计与实现。主要内容包括:1)系统架构与数学推导,通过静止坐标系状态方程和极点配置构建观测器;2)Simulink建模步骤,从电机模型搭建到观测器核心代码实现;3)仿真结果对比分析,显示龙伯格观测器相比滑模观测器具有更好的平滑性和抗噪能力;4)工程部署建议,包括参数在线辨识、低速补偿策略和代码生成优化。该方法实现了全速域无感运行,稳态转速误差小于1%,为低成本高可靠性电机控制提供了有效解决方案。

amy_mhd的博客 161

PostgreSQL的密码的修改

前提是你要连接上数据库!!本人有几篇博客是关于连接不上数据库问题的,你们可以参考看看!

殇莫忆的博客 1257

Win10家庭版没有Hyper-V?教你一招轻松解决(含避坑指南)

本文详细介绍了在Win10家庭版中启用Hyper-V的完整实战指南。通过DISM工具链绕过系统版本限制,无需重装系统即可完整启用所有Hyper-V组件,适用于开发者测试多系统环境和安全隔离应用场景。文章包含详细操作步骤、常见问题解决方案及性能优化配置,帮助用户轻松解决Win10家庭版没有Hyper-V的问题。

weixin_29239661的博客 495

模型优化系列——模型剪枝/量化概述

模型优化目的:通过减少模型大小,提高推理速度等使模型成功部署在各个硬件中并实时有效运作。

qq_61210574的博客 1293

Password SPY++

Figure 1: SuperPasswordSpy++ Peeking a Hotmail "Forget Your Password" Page Figure 2: SuperPasswordSpy++ Peeking a Password Edit inside IIS 5.0 on WinXP Introduction If you need a tool t

刚上路…… 3478

LLC谐振变换器中的软开关艺术:ZVS与ZCS的协同设计

本文深入解析了LLC谐振变换器如何通过巧妙的电路设计,协同实现零电压开关(ZVS)与零电流开关(ZCS),从而大幅降低开关损耗与电磁干扰,提升电源效率。文章结合设计实战,详细阐述了谐振参数计算、器件选型及调试避坑指南,为高效、高功率密度电源设计提供了核心思路与解决方案。

weixin_29216957的博客 349

用户注册环节遇到"Column 'yourpassword' cannot be null")---django

进行django项目的【用户注册环节】时,遇到这个问题: "Column 'yourpassword' cannot be null") 解决方案: 用户注册页面register.py文件中,password多了一个单引号(’),把它删掉后,按照流程进行检查是否已成功: #问题更改前 <input type="password" name="password" placeholder="请...

直心I 4312

22AP10 SS524 平替 海思HI3521DV200 可提供开发资料

入,突破了数字接口的视频输入性能瓶颈,提供两倍于前代产品的视频输入能力。视频编解码引擎、视频图像处理的算法效果及性能得到了进一步提升。芯片为客户产品提供了高性能、优异图像质量。推理引擎,支持多种智能算法应用。合丰富的外围设备及高速接口,该。解决方案,广泛用于模拟高清。产品应用开发的新一代专。四核处理器和性能强大的。

szhorsway的博客 1011

js逆向第3例:蝉妈妈大屏实时数据formDataSign加密

蝉妈妈大屏抖音直播实时数据是抓取抖音直播间数据的实时数据,有类似需求的公司但没有能力去搞定抖音,抓取蝉妈妈数据也是一个不错的选择。接下来就是调试找到加密点,说句题外话蝉妈妈的所有js文件打包方式用的都是webpack5,那如何区分打包方式可以阅读这篇文章。时间戳 ,经过观察发现加密参数是实时变化的。这个函数扣下来,在浏览器控制台中测试一下。言归正传,打断点找到变量。继续打断点向上找又发现了。查看请求参数,可以看到。请求的内容,那么这个。

花臂不花Home 1539

偷窥桌面程序和IE浏览器的密码编辑框

环境 VC6/VC7, MS Platform Core SDK, IE4.0+, WinNT/2K/XP (在英文/中文/日文版的Win2k/XP 及IE6.0+SP1上测试通过) 关键字 Windows 钩子,IE COM 对象,Win2k 安全上下文 IE编程 工具 系统 摘要 本文将介绍一个工具,它不仅能偷窥各种桌面程序的密码框,还能窥到IE页面中的密码框,这个程序就是本文要介绍...

weixin_34320724的博客 1万+

go语言实现服务器server端与客户client端即时通信(附完整源码)

go语言实现服务器server端与客户client端即时通信(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 626

oldpassword mysql_我想使用mysql old_password,但我无法完成配置

我试图完成一个配置,在我最后一个版本的wamp上使用mysql old_password,但是我不能,因为我需要在my.ini中设置old_passwords,并且在文件中找不到它。任何人都知道这个位置在哪里?坦克...我的my.ini如下:# Example MySQL config file for medium systems.## This is for a system with lit...

weixin_39783633的博客 812

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Linux服务器错误解析

1.ERROR: The old password is invalid. 解决方法:重新修改符合命名规则的密码或者重启服务器在进行修改 2.su: Permission denied 解决方法:重启服务器后再重新执行命令即可

qq_40701750的博客 855

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SPY++用法

2007-12-02 16:20:33 “消息视图”中显示的每个消息行都包含一个“P”、“S”、“s”或“R”代码。这些代码具有以下含义: 代码 意义 P 使用 PostMessage 函数将消息发送到队列。没有可用的关于消息的最终处置的信息。 S 使用 SendMessage 函数发送消息。这意味着,发送方在接收方处理和返回该

Jingle的专栏 2920

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SSM框架搭建(三)--整合p6spy

描述 普通情况下,控制台打印出的sql是带?的,开发人员在自己调试的过程中遇到bug是再常见不过了,如果想看一下程序打出来的sql,发现参数的位置都是?,是不是很不爽,若想在数据库中执行sql,还需要手动修改sql的参数,真是麻烦,使用p6spy可以将sql格式化然后打出,打出的sql不再是带有?的,而是可以直接拷贝到数据库执行的。整合步骤如下: 添加jar包依赖 在service层...

至尊宝 1万+

VB.net 里的WebBrowser 怎么使用-WebBrowser指南

http://www.jituannet.com/archives/category/%E4%BA%92%E8%81%94%E7%BD%91/page/2 首先,必须有COM的基础知识,因为IE本身就是COM技术的典型应用。我们看到最上层是WebBrowser的宿主(Host),也就是任何你想重用 (ReUse)webbrowser control的应用程序,可以是vb程序,也可以是

spt_petrolor的专栏 1万+

工厂设备接MES为什么慢:协议识别与点表配置自动化的技术拆解

工业现场设备接 MES 的周期主要消耗在协议识别与点表配置。本文拆解这条链路的四层结构,给出点表映射的数据模型、两种部署架构的对比,以及可直接落地的三项验收口径与校验代码。适合工控集成、MES 实施、设备联网方向的工程师。

emfuture的博客 364

list

的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。,因此反向迭代器的实现可以借助正向迭代器,即:反向迭代器内部可以包含一个正向迭代器,对正向迭代器的接口进行包装即可。是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。迭代到该位置,在这段位置上迭代需要线性的时间开销;最大的缺陷是不支持任意位置的随机访问,比如:要访问。还需要一些额外的空间,以保存每个节点的相关联信息。个元素,必须从已知的位置。

xie0510_的博客 262

向 excel、word、pdf 三种文档中占位符插入数据

【代码】向 excel、word、pdf 三种文档中占位符插入数据。

weixin_45934659的博客 41

C++ STL 反向迭代器:从源码框架到适配器实现

在 C++ STL 中,反向迭代器(reverse_iterator)是一个很典型的设计案例:它本身并不直接持有容器数据,而是通过封装一个正向迭代器,把「前进」变成「后退」,从而让同一个容器既能正序遍历,也能逆序遍历。本文从 SGI-STL 3.0 的源码框架出发,梳理反向迭代器的设计思路,再手写一个通用的迭代器适配器,并在vector和list中完成适配与测试。在 SGI-STL 3.0 中,反向迭代器的核心源码位于。反向迭代器是一个适配器,各个容器再基于它适配出自己的反向迭代器类型。下面截取list。

Godbro的博客 227

[C++]:7.STL:list

好久不见,firdawn小课堂又和大家见面啦。今天我们要学习的内容是list容器,list也是一种常用的数据结构。下面是本章的思维导图,那么让我们开始学习吧!自定义的list,由三个结构构成。分别是链表的最小组成单位,也就是链表节点。以及迭代器类和list类其实要特别说明的是, List的迭代器,它不是单纯的指针,因为我们如果对指针直接进行解引用操作的话,我们得到的是这个节点,而不是节点里面存储的值并且我们对这个指针加加,得到的也不是下一个节点的地址,而是所在节点的下一个单位的地址。

2301_80817679的博客 170

RT-Thread 5.4.0 完整版架构剖析(下):IPC、时钟、内存、设备与组件

从 IPC 全量、时钟与定时器、内存管理,到设备框架、组件层、软件包机制、移植裁剪与速查表,补齐 RT-Thread 5.4.0 完整版的下半张地图。

188
上一篇: VC++中非法探取密码的原理及其防范
下一篇: Three Ways To Inject Your Code Into Another Process
ShenRui
博客等级 码龄20年 63粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值