1.      序言 之前因同事需要,破解过Asprise OCR 4.0试用版本,对这个库比较有印象。目前最新版本为15.3,网上已经能下载到它的试用破解版本,但似乎没有看到此版本的破解文章。AspriseOCR 15.3与4.0比较,基本上没有加强保护强度,因此破解方法也可以参考网上公布的4.0版本的破解方法,只有一点点不同。AspriseOCR 15.3破解方法相当简单,甚至都用不到OllyDbg,用IDA 分析一下,找到关键修改一下就OK了。当然,这毕竟是免费试用版本,如果有经济条件的话,还是建议去购买官方正式版本。  2.      介绍 Asprise OCR是一个强大的商业的OCR(光学字符识别)库,支持文字识别和二维码识别。AspriseOCR SDK有Java、C# .net、VB .net、Python、C/C++、Pascal等众多语言版本,并支持Windows、Linux、Mac OSX等操作系统平台。本篇对AspriseOCR SDK 15.3 C/C++ Windows免费试用版本进行破解,其他语言和平台版本相差不大,可依葫芦画瓢。官方下载链接:http://asprise.com/royalty-free-library/c-c++-ocr-for-windows-mac-linux-download.html  3.      编写demo 官方提供的C++ Windows免费试用版本,包含了一个头文件(asprise_ocr_api.h)和一个DLL文件(aocr.dll)。官方页面中也提供了C/C++ demo代码,但没提供相应的C/C++demo程序,因此需要自己编写demo程序,主要代码如下,不多说   void testOcr()   {    const char * libFolder = "libaocr";    LIBRARY_HANDLE libHandle = dynamic_load_aocr_library(libFolder);      // one time setup    int setup = c_com_asprise_ocr_setup(false);      // starts the ocr engine; the pointer must be of long long type    long long ptrToApi = c_com_asprise_ocr_start("eng", OCR_SPEED_FAST, NULL, NULL, NULL);      char * s = c_com_asprise_ocr_recognize(ptrToApi, "image.png", -1, -1, -1, -1, -1,     OCR_RECOGNIZE_TYPE_ALL, OCR_OUTPUT_FORMAT_PDF,     "PROP_PDF_OUTPUT_FILE=result.pdf|PROP_PDF_OUTPUT_TEXT_VISIBLE=true|\                   PROP_PDF_OUTPUT_RETURN_TEXT=text", "|", "=");      std::cout << "Returned: " << s << std::endl;      // do more recognition here ...      // finally, stops the OCR engine.   c_com_asprise_ocr_stop(ptrToApi);     dynamic_unload_aocr_library(libHandle); }  运行效果: 1)   每次运行时,有一定概率会弹出如下提示:   2)   过期后提示  4.      分析DLL1)   用IDA加载aocr.dll。 2)   打开字符串列表窗口,搜索“evaluating Asprise”,找到其引用位置,F5反编译,得到如下代码: BOOL sub_1005B820() { signed int v0; // edi@1 signed __int64 v1; // rax@12 void *v2; // esi@13 char *v3; // eax@16 char *v4; // ebx@16 DWORD dwDisposition; // [sp+Ch] [bp-128h]@1 __int64 v7; // [sp+10h] [bp-124h]@1 BYTE v8[4]; // [sp+1Ch] [bp-118h]@6 HKEY phkResult; // [sp+20h] [bp-114h]@1 BYTE Data[4]; // [sp+24h] [bp-110h]@3 CHAR SubKey; // [sp+28h] [bp-10Ch]@1   sub_1025AF9F(&v7); sprintf_s(&SubKey, 0x100u, "Software\\Lab Asprise!\\%s\\%s\\Settings", "Asprise OCR", "15.3"); v0 = 0; if ( RegCreateKeyExA(HKEY_CURRENT_USER, &SubKey, 0, 0, 0, 0xF003Fu, 0, &phkResult, &dwDisposition) ) {    v0 = 5; LABEL_16:    v3 = (char *)sub_10257E26(256);    v4 = v3;    if ( v0 == 1 )     sprintf_s(     v3,     0x100u,     "Evaluation license expired (%s %s). Please remove the evaluation kit from your computer.",     "Asprise OCR",     "15.3");    else     sprintf_s(     v3,     0x100u,     "Evaluation license control error #%d (%s %s). Please contact us at support@asprise.com.",     v0,     "Asprise OCR",     "15.3");    j_j__free(v4);    v2 = (void *)sub_10257E26(512);    sub_1025845D(v2, "%s?m=eval_error&p=%s&v=%s&e=%d", (unsigned int)"http://asprise.com/license-mesg.html");    MessageBoxA(0, v4, "Sorry, an error occurred", 0x40010u);    goto LABEL_20; } if ( dwDisposition == 1 ) {    *(_DWORD *)Data = v7;    if ( RegSetValueExA(phkResult, "sys-DO-NOT-MODIFY", 0, 4u, Data, 4u) )     v0 = 2; } else if ( dwDisposition == 2 ) {    *(_DWORD *)Data = 4;    if ( RegQueryValueExA(phkResult, "sys-DO-NOT-MODIFY", 0, 0, v8, (LPDWORD)Data) )    {     v0 = 3;    }    else if ( v7 >= (unsigned int)(*(_DWORD *)v8 + 2592000) )    {     v0 = 1;    } } else {    v0 = 4; } RegCloseKey(phkResult); if ( v0 )    goto LABEL_16; sub_1025A11E(); ++dword_10635F4C; LODWORD(v1) = sub_1025AF9F(0); if ( !(v1 % 4) ) {    v2 = (void *)sub_10257E26(512);    sub_1025845D(v2, "%s?m=ok&p=%s&v=%s&e=%d", (unsigned int)"http://asprise.com/license-mesg.html");    if ( MessageBoxA(       0,       "Thank you for evaluating Asprise products. \n"       "Click the 'Yes' button below to visit our website or 'No' to continue: ",       "Asprise Software - asprise.com",       0x1124u) != 6 )    { LABEL_21:     j_j__free(v2);     return v0 == 0;    } LABEL_20:    ShellExecuteA(0, "open", (LPCSTR)v2, 0, 0, 1);    goto LABEL_21; } return v0 == 0; }    以上就是试用检测的关键代码,流程简要分析如下: 1)   第一个调用函数sub_1025AF9F的反编译代码如下: signed __int64 __cdecl sub_1025AF9F(signed __int64 *a1) { signed __int64 result; // rax@1 struct _FILETIME SystemTimeAsFileTime; // [sp+0h] [bp-8h]@1   GetSystemTimeAsFileTime(&SystemTimeAsFileTime); result = (*(_QWORD *)&SystemTimeAsFileTime - 116444736000000000i64) / 0x989680ui64; if ( result > 32535244799i64 )    result = -1i64; if ( a1 )    *a1 = result; return result; }    这实际上就是C运行库的time函数 2)   写注册表    *(_DWORD *)Data = v7;    if ( RegSetValueExA(phkResult, "sys-DO-NOT-MODIFY", 0, 4u, Data, 4u) )  写注册表的数据参数Data,源自v7,而v7是time函数调用的结果。以上是将初始时间写入到注册表中 3)   查询注册表    *(_DWORD *)Data = 4;    if ( RegQueryValueExA(phkResult, "sys-DO-NOT-MODIFY", 0, 0, v8, (LPDWORD)Data) )  读取第一次运行时存储的初始时间 4)   随机提示 LODWORD(v1) = sub_1025AF9F(0); if ( !(v1 % 4) ) {    v2 = (void *)sub_10257E26(512);    sub_1025845D(v2, "%s?m=ok&p=%s&v=%s&e=%d", (unsigned int)"http://asprise.com/license-mesg.html");    if ( MessageBoxA(  将time(0)的返回值模4,当结果为0时,则弹出试用提示 5.      破解过程1)   去掉随机提示 在IDA中找到下面一行 .text:1005B96D           jnz   loc_1005BA6D  点击菜单“Edit”->“Patch Program”->“Assemble”,修改为 .text:1005B96D           jmp   loc_1005BA6D  2)   修改过期检测 在IDA中找到下面一行 .text:1005B92F           jb     short loc_1005B93D  点击菜单“Edit”->“Patch Program” ->“Assemble”,修改为 .text:1005B92F           jmp   short loc_1005B93D  3)   生成破解DLL 点击菜单“Edit”->“Patch Program” ->“Applypatches to input file”,在弹出的对话框中点击“OK”,生成破解的DLL文件  (完)

Asprise OCR SDK 15.3试用版破解相关推荐

  1. VS2008试用版破解方法

    vs2008破解方法 1.把Setup/setup.sdb文件中的[Product Key],由"T2CRQGDKBVW7KJR8C6CKXMW3D"修改为"PYHYPW ...

  2. [海蜘蛛] 海蜘蛛 V8 全线无限试用版 免费发布破解教程

    http://bbs.p52.cn/forum.php?mod=viewthread&tid=3499&extra=page%3D1&page=1&_dsign=79c ...

  3. visual Studio2008试用版过期升级正式版的破解方法

    1.visual studio2008试用版过期后会弹框出来 不要点"升级" 2.找到电脑上的visual studio2008安装包 点击 setup.exe 3.点击第一项[更 ...

  4. Edius 7 安装试用和破解方法

    本文包含以下信息: 一.Edius 7 简介 二.Edius 7无限试用的破解方法 三.使用DiskGenius Pro解决试用期过后"无法继续试用"问题 四.本文下载集合 一.E ...

  5. 试用c51语言采样连续5次异常_浙江省动态血压监测操作及诊断规范(试用版)

    浙江省动态血压监测操作及诊断规范(试用版) 浙江省医学会心电生理与起搏分会无创心电学组 心电与循环 主要执笔者 谢玮.黄小芳.于霞.包丽芳.叶沈锋.蔡卫勋 审阅者 李燕.胡申江.李佩璋 动态血压监测是 ...

  6. Visual Studio 20xx试用版升级为正式版(WIN7同样有效)图解、附带序列号

    Visual Studio 2005|2008 试用版升级为正式版(WIN7同样有效). 目录 一.步骤图解 二.win7破解工具下载 三.序列号 一.步骤图解 1.控制面板 => 程序和功能 ...

  7. 如何利用C++和libCurl使用OCR SDK

    如何利用C++和libCurl使用OCR SDK,本文的目的是教你如何通过与OCR SDK的对接,使用C++进行OCR. 你应该在我们的代码中看到这两行占位符. C++ #define APP_ID ...

  8. 磁盘管理大师Paragon Hard Disk Manager for mac永久试用版

    Paragon Hard Disk Manager mac破解版是适用于苹果电脑系统磁盘管理工具,拥有优化工具.完美分区所需要的一切,可靠地备份和灵活的恢复功能,将磁盘进行合理的分区,不但方便数据的存 ...

  9. WinRAR4.01破解版破解过程

    WinRAR是我们平时最常用到的软件之一,由于它并非免费软件,试用期过后,每次打开winRAR都会提示请注册的对话框,令人烦不胜烦.于是,我一般的做法是下载低版本的被破解后的winrar使用(最新版的 ...

最新文章

  1. C++:随笔3--复杂的数据结构
  2. Leetcode 25.K个一组翻转链表
  3. [模板]欧几里得算法/扩展欧几里得
  4. linux系统下springboot jar方式启动后允许后台运行
  5. 机器学习算法在自动驾驶领域的应用大盘点!
  6. 逾期之后还能贷款吗?
  7. 如何在 C# 8 中使用 Channels
  8. csp-c模拟测试43「A·B·C」
  9. php return直接输出,PHP中return用法详细解读
  10. 【剑指offer】面试题24:反转链表(Java 实现)
  11. 开环直流电机的机械特性_无刷直流电动机的开环调速机械特性研究
  12. matplotlib 中文_看了这个总结,其实 Matplotlib 可视化,也没那么难
  13. Matter-JS constraint 约束
  14. 梅科尔工作室-第七次网络前端培训(JS)
  15. python 空间法向量可视化_三维空间中平面的法向量计算
  16. AD7705模块设计(附源码)
  17. 数据结构试卷及答案(七)
  18. 像素、分辨率、图片大小概念
  19. 浙江大学竺可桢学院计算机专业好就业吗,浙大竺可桢学院有多厉害?看了这些数据你就知道了...
  20. 几款好用播放器ijkplayer、vlc、SmartPlayer、ExoPlayer

热门文章

  1. html输入框只能输入几个,input 两个input框只能允许同时输入一个
  2. java自带的xml解析,使用Java自带SAX工具解析XML
  3. 怎样用计算机算分数乘分数,《分数乘分数》教案.pdf
  4. linux实验之文件与文件,linux实验报告文件系统与文件管理.doc
  5. 单片机串口发送数据很慢?这种方法帮助你提高!
  6. 波士顿动力机器人全体出动,奉上新年之舞!
  7. Altium Designer 20,新功能有哪些?
  8. java控制io_Java-IO操作
  9. Ubuntu18.04安装VCS、Verdi、dve全套教程亲测(有成功截图)
  10. lotus php,LotusPhp笔记之:Cookie组件的使用详解