Python调用易语言动态链接库实现验证码功能

今天成功把易语言调用验证码通杀的DLL在Python中成功调用了
特此共享出来,下面是识别截图:

识别方法1:

"""当然在学习Python的道路上肯定会困难,没有好的学习资料,怎么去学习呢? 学习Python中有不明白推荐加入交流群号:928946953 群里有志同道合的小伙伴,互帮互助, 群里有不错的视频学习教程和PDF!还有大牛解答!"""
# 来源:http://www.sanye.cx/?id=12022
# 优点:载入快、识别速度高、识别精度较高
# 缺点:仅在32位Python环境中成功运行

# 获取上级目录
path = os.path.abspath(os.path.dirname(os.getcwd()))
# 获取验证码文件夹
img_list = os.listdir(path + r"\captcha")
# 载入识别库
dll = cdll.LoadLibrary(path + r"\ocr1\ocr.dll")
# 初始化识别库
dll.init()
# 遍历图片并识别
for i in img_list:
    # 读入图片
    with open(path + r"\captcha\{0}".format(i), "rb") as file:
        # 读入图片
        image = file.read()
        # 利用dll中的ocr函数进行识别
        Str = dll.ocr(image, len(image))
        # 返回的是指针,所以此处将指针转换为字符串,然后再编码即可得到字符串类型
        text = string_at(Str).decode("utf-8")
        print(f"识别返回:{text},类型:{type(text)},ID地址:{id(text)}")
识别方法2:

# 来源:[url=https://www.52pojie.cn/thread-1072587-1-1.html]https://www.52pojie.cn/thread-1072587-1-1.html[/url]
# 优点:识别速度高、识别精度高
# 缺点:仅在32位Python环境中成功运行、载入时间较长

# 获取上级目录
path = os.path.abspath(os.path.dirname(os.getcwd()))
# 载入识别库
dll = cdll.LoadLibrary(path + r"\ocr2\OCRS.dll")

# 载入字库与建立字库索引
with open(path + r"\ocr2\通杀英文数字库.cnn", "rb") as file:
    # 载入字库
    word_bank = file.read()
    # 建立字库索引
    work_index = dll.INIT(path, word_bank, len(word_bank), -1, 1)
# 读入待识别图片列表
img_list = os.listdir(path + "\captcha")
# 循环识别图片并输出
for i in img_list:
    # 打开指定图片
    with open(path + "\captcha\{0}".format(i), "rb") as file_img:
        # 读入图片
        image = file_img.read()
        Str = create_string_buffer(100)  # 创建文本缓冲区
        dll.OCR(work_index, image, len(image), Str)  # 利用DLL中的识别函数进行识别
        text = Str.raw.decode("utf-8")  # 对识别的返回值进行编码
        print(f"识别返回:{text},类型:{type(text)},ID地址:{id(text)}")

1.自己弄了一个类,下载下来直接使用,调用方法:

dll = Ver_code_1(DLL文件所在的文件夹目录)
#或者
dll = Ver_code_2(DLL文件所在的文件夹目录)
#识别图片:
dll.ocr(图片)

2.修正了识别库2空白字符未消除,无法正确判断长度的问题(可以利用固定长度判断是否符合,进行初步筛选,避免提交后网页返回验证码错误)

import os
from ctypes import *

class Ver_code_1:
    # 启动时需要传入ocr.dll
    def __init__(self, path):
        # 载入识别库
        self.dll = cdll.LoadLibrary(path + r"\ocr.dll")
        # 初始化识别库
        self.dll.init()

    def ocr(self, image):
        Str = self.dll.ocr(image, len(image))
        # 返回的是指针,所以此处将指针转换为字符串,然后再编码即可得到字符串类型
        return string_at(Str).decode("utf-8")

class Ver_code_2:
    def __init__(self, path):
        # 载入识别库
        self.dll = cdll.LoadLibrary(path + r"\OCRS.dll")
        # 载入字库与建立字库索引
        with open(path + r"\通杀英文数字库.cnn", "rb") as file:
            # 载入字库
            self.word_bank = file.read()
            # 建立字库索引
            self.word_index = self.dll.INIT(path, self.word_bank, len(self.word_bank), -1, 1)

    def ocr(self, image):
        Str = create_string_buffer(100)  # 创建文本缓冲区
        self.dll.OCR(self.word_index, image, len(image), Str)  # 利用DLL中的识别函数进行识别
        return Str.raw.decode("utf-8").rstrip('\x00')  # 对识别的返回值进行编码后返回,这里的\x00是删除缓冲区的空白符

注意!测试环境为:
Python 3.9.2 (tags/v3.9.2:1a79785, Feb 19 2021, 13:30:23) [MSC v.1928 32 bit (Intel)] on win32
经测试,无法在64位环境下调用,如有大佬能实现,烦请告知一下

关于DLL改64位的思路:
我找到了论坛中的IDA pro,成功将DLL进行了反编译,如图:

其实最关键的就是以上的init以及ocr两个函数,但是后续如何将IDA pro项目转换为64位,然后进行编译,目前没有找到合适的方法,如果有大佬麻烦告知一下。

到此这篇关于Python调用易语言动态链接库,实现验证码通杀例子的文章就介绍到这了,更多相关Python易语言验证码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python图片验证码识别最新模块muggle_ocr的示例代码

    一.官方文档 https://pypi.org/project/muggle-ocr/ 二模块安装 pip install muggle-ocr # 因模块过新,阿里/清华等第三方源可能尚未更新镜像,因此手动指定使用境外源,为了提高依赖的安装速度,可预先自行安装依赖:tensorflow/numpy/opencv-python/pillow/pyyaml 三.使用代码 # 导入包 import muggle_ocr # 初始化:model_type 包含了 ModelType.OCR/Model

  • Python在Windows和在Linux下调用动态链接库的教程

    Linux系统下调用动态库(.so) 1.linuxany.c代码如下: #include "stdio.h" void display(char* msg){ printf("%s\n",msg); } int add(int a,int b){ return a+b; } 2.编译c代码,最后生成Python可执行的.so文件 (1)gcc -c linuxany.c,将生成一个linuxany.o文件 (2)gcc -shared linuxany.c -o

  • Python实现验证码识别

    大致介绍 在python爬虫爬取某些网站的验证码的时候可能会遇到验证码识别的问题,现在的验证码大多分为四类: 1.计算验证码       2.滑块验证码 3.识图验证码 4.语音验证码 这篇博客主要写的就是识图验证码,识别的是简单的验证码,要想让识别率更高,识别的更加准确就需要花很多的精力去训练自己的字体库. 识别验证码通常是这几个步骤: 1.灰度处理 2.二值化 3.去除边框(如果有的话) 4.降噪 5.切割字符或者倾斜度矫正 6.训练字体库 7.识别 这6个步骤中前三个步骤是基本的,4或者5

  • python调用动态链接库的基本过程详解

    动态链接库在Windows中为.dll文件,在linux中为.so文件.以linux平台为例说明python调用.so文件的使用方法. 本例中默认读者已经掌握动态链接库的生成方法,如果不太清楚的可以参考动态链接库的使用 调用上例动态链接库的使用中的sum.so import ctypes so = ctypes.CDLL('./sum.so') print "so.sum(50) = %d" % so.sum(50) so.display("hello world!"

  • Python利用Pillow(PIL)库实现验证码图片的全过程

    前言 Pillow库有很多用途,本文使用Pillow来生成随机的验证码图片. Pillow的用法参考:https://www.jb51.net/article/196007.htm 验证码是随机的,使用Python内置的random库来生成随机的颜色和随机的字符. random的用法参考:https://www.jb51.net/article/196955.htm 一.验证码图片的效果 # coding=utf-8 import random from PIL import Image, Im

  • 使用python创建生成动态链接库dll的方法

    如今,随着深度学习的发展,python已经成为了深度学习研究中第一语言.绝大部分的深度学习工具包都有python的版本,很多重要算法都有python版本的实现.为了将这些算法应用到具体工程中,这些工具包也提供了不同类型的接口. 动态链接库(.dll,.so)是系统开发中一种非常重要的跨语言协作方式.把python语言写成的算法编译成动态库,能够提供给其他语言调用,这能够在很大程度上提高算法的开发效率. 但是,虽然python可以调用其他语言生成的动态库,python作为一种脚本语言,本身是不能直

  • ubuntu中python调用C/C++方法之动态链接库详解

    安装boost python调用C/C++的方法有很多,本文使用boost.python.考虑到后期有好多在boost上的开发工作,所以boost一并安装了,Boost库分为两个部分来使用,一是直接使用对应的头文件,二是需要编译安装相应的库才可以使用. 具体安装方法可以参考:https://www.jb51.net/article/150380.htm 这里使用: sudo apt-get install libboost-all-dev 服务端 序列化后发送 main.cpp: #includ

  • 用python实现一个简单的验证码

    我们经常在登录一个网站,或者注册的时候需要输入一个验证码,有时候觉得很烦,因为有些验证码不仅复杂还看不清,许多用户就会因为这些而懒得再登录或者注册之类的. 既然验证码会造成流失用户的风险,为什么大家都还要使用验证码呢? 这是验证码在一定程度上起到保护网站安全的作用,比如防止大规模恶意注册(比如手机验证码形式,一机一户),再比如反爬虫(至少不会轻易让你爬取数据)等,你看用户基数最大的12306,就会有各种验证码. 既然验证码这么重要,它的原理是什么?是怎么实现的? 它的原理其实很简单,就是在服务器

  • Python调用易语言动态链接库实现验证码功能

    今天成功把易语言调用验证码通杀的DLL在Python中成功调用了 特此共享出来,下面是识别截图: 识别方法1: """当然在学习Python的道路上肯定会困难,没有好的学习资料,怎么去学习呢? 学习Python中有不明白推荐加入交流群号:928946953 群里有志同道合的小伙伴,互帮互助, 群里有不错的视频学习教程和PDF!还有大牛解答!""" # 来源:http://www.sanye.cx/?id=12022 # 优点:载入快.识别速度高.

  • python自动化实现登录获取图片验证码功能

    主要记录一下:图片验证码 1.获取登录界面的图片 2.获取验证码位置 3.在登录页面截取验证码保存 4.调用百度api识别(目前准确率较高的识别图片api) 本次登录的系统页面,可以看到图片验证码的位置 from selenium import webdriver import time from PIL import Image base_url = '***********' browser = webdriver.Chrome() browser.maximize_window() bro

  • C#调用易语言写的Dll文件方法

    本人是用易语言起步的,起初是为了兴趣,后来由于易语言被杀软误杀严重,连空白程序都杀,后来转到了学C#,随着学习的深入,接触越来越复杂的东西之后,发现有些功能没有用易语言来写方便,所以就想到用C#来调用易语言写的DLL,就和一般的Dll调用一样,没什么技术含量. 易语言中新建个Dll文件 C#中和一般的DLL一样调用 <p>using System; using System.Collections.Generic; using System.ComponentModel; using Syst

  • Python调用R语言实例讲解

    网络上经常看到有人问数据分析是学习Python好还是R语言好,还有一些争论Python好还是R好的文章.每次看到这样的文章我都会想到李舰和肖凯的<数据科学中的R语言>,书中一直强调,工具不分好坏,重要的是解决问题的思路,就算是简单的excel,也能应付数据分析中的大部分问题.再者Python和R本来就没有什么好对比的,一门是计算机工程语言,一门是统计语言,只有将两者结合起来,才能发挥更大的威力,不是吗,对于数据分析的人来说,难道不是两样都要掌握的吗? rpy2是Python调用R程序的模块,旨

  • python 调用c语言函数的实例讲解

    虽然python是万能的,但是对于某些特殊功能,需要c语言才能完成.这样,就需要用python来调用c的代码了 具体流程: c编写相关函数 ,编译成库 然后在python中加载这些库,指定调用函数. 这些函数可以char ,int, float, 还能返回指针. 以下示例: 通过python调用c函数,返回"hello,world 字符串" 新建c语言文件 hello.c touch hello.c #include <stdio.h> char *get_str() {

  • Python调用C语言的方法【基于ctypes模块】

    本文实例讲述了Python调用C语言的方法.分享给大家供大家参考,具体如下: Python中的ctypes模块可能是Python调用C方法中最简单的一种.ctypes模块提供了和C语言兼容的数据类型和函数来加载dll文件,因此在调用时不需对源文件做任何的修改.也正是如此奠定了这种方法的简单性. 示例如下 实现两数求和的C代码,保存为add.c //sample C file to add 2 numbers - int and floats #include <stdio.h> int add

  • Python调用百度AI实现颜值评分功能

    目录 一.调用百度接口进行人脸属性识别 二.根据年龄和性别对颜值进行评价 三.批量识别人脸属性 四.自定义窗口语音播报颜值得分 五.明星颜值评价 一.调用百度接口进行人脸属性识别 安装好baidu-aip模块,获取了百度AI接口密钥后,即可调用百度接口进行人脸属性识别了.首先以杨紫的图片为例进行年龄.性别.颜值的识别. 具体python代码如下:‍ import os import base64 from aip import AipFace os.chdir(r'F:\公众号\28.人脸识别'

  • Python调用C/C++动态链接库的方法详解

    本文以实例讲解了Python调用C/C++ DLL动态链接库的方法,具体示例如下: 示例一: 首先,在创建一个DLL工程(本例创建环境为VS 2005),头文件: //hello.h #ifdef EXPORT_HELLO_DLL #define HELLO_API __declspec(dllexport) #else #define HELLO_API __declspec(dllimport) #endif extern "C" { HELLO_API int IntAdd(in

  • 易语言动态链接库制作详解

    一.关于易语言 DLL 从易语言 3.6 版开始,已经能够支持对DLL动态链接库的开发, 编译出的DLL是标准的DLL,和其他编程语言生成的标准 DLL 的调用方法相同.易语言编写出的DLL,在非独立编译exe时只需要DLL文件随应用程序一起发行,而独立编译 exe 时无需将 DLL 文件随应用程序一起发行. 二.新建易语言DLL程序 新建一个易语言程序,然后选择 "windows动态链接库"图标,易语言就会自动创建 出编写态连接库的代码区(程序集) 创建完毕就可以在代码区里编写DLL

  • python 调用c语言函数的方法

    虽然python是万能的,但是对于某些特殊功能,需要c语言才能完成.这样,就需要用python来调用c的代码了 具体流程: c编写相关函数 ,编译成库 然后在python中加载这些库,指定调用函数. 这些函数可以char ,int, float, 还能返回指针. 以下示例: 通过python调用c函数,返回"hello,world 字符串" 新建c语言文件 hello.c touch hello.c #include <stdio.h> char *get_str() {

随机推荐