银行安全控件自动输入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了银行安全控件自动输入相关的知识,希望对你有一定的参考价值。

手里银行卡较多,经常忘记还信用卡,想做个应用自动查询银行卡余额。

在做网页自动登录时,碰到银行安全控件,控件屏蔽了windows的sendmessage和postmessage

 

只能求助winio,模拟最底层的按键

 

1. 下载winio

http://www.internals.com/utilities/WinIo.zip

 

2.安装数据签名证书

 

 

3. 打开windows的测试模式

  管理员模式在 cmd 下运行 bcdedit /set testsigning on

 

4. 代码

  导入方法

[DllImport("WinIo32.dll")]
        public static extern bool InitializeWinIo();

        [DllImport("WinIo32.dll")]
        public static extern bool GetPortVal(IntPtr wPortAddr, out int pdwPortVal, byte bSize);

        [DllImport("WinIo32.dll")]
        public static extern bool SetPortVal(uint wPortAddr, IntPtr dwPortVal, byte bSize);

        [DllImport("WinIo32.dll")]
        public static extern byte MapPhysToLin(byte pbPhysAddr, uint dwPhysSize, IntPtr PhysicalMemoryHandle);

        [DllImport("WinIo32.dll")]
        public static extern bool UnmapPhysicalMemory(IntPtr PhysicalMemoryHandle, byte pbLinAddr);

        [DllImport("WinIo32.dll")]
        public static extern bool GetPhysLong(IntPtr pbPhysAddr, byte pdwPhysVal);

        [DllImport("WinIo32.dll")]
        public static extern bool SetPhysLong(IntPtr pbPhysAddr, byte dwPhysVal);

        [DllImport("WinIo32.dll")]
        public static extern void ShutdownWinIo();

        [DllImport("user32.dll")]
        public static extern int MapVirtualKey(uint Ucode, uint uMapType);

 

初始化

        private WinIO()
        {
            IsInitialize = true;
        }

        public static void Initialize()
        {
            if (InitializeWinIo())
            {
                KBCWait4IBE();
                IsInitialize = true;
            }
            else
                throw new Exception("Load WinIO Failed!");
        }

        public static void Shutdown()
        {
            if (IsInitialize)
                ShutdownWinIo();
            IsInitialize = false;
        }

 

模拟键盘按下和弹起

//等待键盘缓冲区为空
        private static void KBCWait4IBE()
        {
            int dwVal = 0;
            do
            {
                bool flag = GetPortVal((IntPtr)0x64, out dwVal, 1);
            }
            while ((dwVal & 0x2) > 0);
        }
        // 模拟键盘标按下
        public static void KeyDown(Keys vKeyCoad)
        {
            if (!IsInitialize) return;

            int btScancode = 0;
            btScancode = MapVirtualKey((uint)vKeyCoad, 0);  //按键转换成扫描码
            KBCWait4IBE();
            SetPortVal(0x64, (IntPtr)0xD2, 1); //发送准备写命令
            KBCWait4IBE();
            SetPortVal(0x60, (IntPtr)btScancode, 1); //写入按键
        }
        // 模拟键盘弹出
        public static void KeyUp(Keys vKeyCoad)
        {
            if (!IsInitialize) return;

            int btScancode = 0;
            btScancode = MapVirtualKey((uint)vKeyCoad, 0);
            KBCWait4IBE();
            SetPortVal(0x64, (IntPtr)0xD2, 1);
            KBCWait4IBE();
            SetPortVal(0x60, (IntPtr)(btScancode | 0x80), 1); //弹出
        }

 

重要的事情说三遍

管理员运行

管理员运行

管理员运行

以上是关于银行安全控件自动输入的主要内容,如果未能解决你的问题,请参考以下文章

中国银行 密码不能填

密码控件安全技术浅析及攻击实例

用IE10浏览器打开中国银行总显示未安装网上银行安全控件怎么回事?

中国银行CA安全证书到期,在哪儿下载证书?

WebBrowser无法显示招商银行密码输入控件的问题

WebBrowser无法显示招商银行password输入控件的问题