新人报道--处女破--爆破Asprise OCR v3.0 for C/C++
【破文标题】新人报道--初鸟首次爆破Asprise OCR v3.0 for C/C++【破文作者】roking
【作者邮箱】[email protected]
【作者主页】/
【破解工具】OllyICEv1.10/UltraEdit
【破解平台】Windows Server 2003
【软件名称】Asprise OCR v3.0 for Visual C++(VC)/MFC/C/C++ Builder/Delphi
【软件大小】1.79M
【原版下载】http://asprise.com/product/ocr/download.php?lang=c
【保护方式】不明
【软件简介】用于西文OCR识别的SDK,可识别文字及条形码。以下是官方简介:
Asprise OCR SDK v3.0 for Visual C++(VC)/MFC/C/C++ Builder/Delphi
Asprise OCR SDK library for Visual C++(VC)/MFC/C/C++ Builder/Delphi enables you to equip your Visual C++(VC)/MFC/C/C++ Builder/Delphi applications with optical character recognition (OCR) ability.
Features of Asprise OCR include:
Highest Level of Accuracy - Asprise OCR can easily recognize difficult documents of poor image quality;
Excellent Format Retention - Text layouts on the input documents are preserved;
High Speed - Asprise OCR uses optimized OCR engine to perform excellent recognition in very short time;
Ease of Use - We strive to make the developer's life easier. Complex parameter configurations are removed from Asprise OCR SDK. You only have to supply the image document. Asprise OCR can intelligently determine the best setting internally.
Barcode Recognition - Beside characters (letters and numbers), Asprise OCR can recognize almost every kind of bar code. You can choose to recognize barcode or characters or both.
Flexible Licensing Scheme - You can purchase binary APIs or source code - the Lowest OCR library ownership cost!
【破解声明】虽然此破法手段与PYG提倡的“八荣八耻”的原则背道而驰,但请原谅我初鸟一个且为首次破解
------------------------------------------------------------------------
【破解过程】前言:
两年前我的机器上就已搜集了上G的破文、破具资料,一直尘封在数百G的硬盘数据收藏中不曾研读过。前段时间因为搞验证码识别的需要,找到Asprise OCR,上网居然没找到破解版。想起来能不能自己动手,就翻了翻老资料,对比了下网上的资源,发现了PYG这个网站,就有了从初鸟起步的想法,有想法就动手,先把汇编捡起来,1天看完了王爽的汇编教程,罗云斌的WIN32汇编还没来得及看,就迫不及待地想挤入PYG学习,于是递交了申请并有幸来到这里。crackme都还没做过,只是看了几篇教程,就拿Asprise OCR v3.0来试刀,运气不错,竟然给爆了,所以表达不准确、幼稚、谬误之处,还请各位前辈不吝批评斧正,我定当感激涕零。
一、破解准备
1、解压缩从官方下载的文件ocr-eval-c.zip,阅读开发手册知道此SDK的核心是3个dll文件:
AspriseOCR.dll
DevIL.dll
ILU.dll
通过在网上搜索确定DevIL.dll和ILU.dll是第三方开源项目Developer's Image Library (DevIL) 的组件,因此确定OCR的核心在AspriseOCR.dll
运行SDK自带的演示程序GenericC.exe,发现在每次OCR时试用版弹出窗口提示。查官网FAQ说试用版与正式版功能上并无不同,这样就有可能通过破解得到完整功能的无试用提示的版本。
2、由于核心算法在AspriseOCR.dll中,无法直接跟踪调试,就打算使用演示程序GenericC.exe来追进AspriseOCR.dll分析。开始时没有分析是否加壳(结果说明应该是没有加壳),再说我还没有学习壳方面的知识,仅抱着试试看的心态直接进入破解步骤。
二、破解步骤(由于不熟悉工具的使用,期间许多失败的尝试就不详写了,仅给出成功的步骤)
1、使用OD打开GenericC.exe,先不执行,在反汇编窗口中查找“所有模块中的名称”,定位到AsproseO模块的“OCR”函数处(10001740)下断点。(通过GenericC的源码知道仅演示调用了OCR这个函数,通过在此下断可以开始跟进AspriseOCR.dll)
2、F9执行,在GenericC.exe窗口中输入要识别的图片文件路径回车,OD在上面的断点处中断:
10001740 >/$8B4424 08 mov eax, dword ptr ;*** OCR函数入口
10001744|.8B4C24 04 mov ecx, dword ptr
10001748|.50 push eax
10001749|.51 push ecx
1000174A|.E8 01FFFFFF call 10001650 ;再这里F7进入看看里面有些啥
1000174F|.50 push eax
10001750|.E8 9BFCFFFF call 100013F0
10001755|.83C4 0C add esp, 0C
10001758\.C3 retn
F8执行到上面1000174A处使用F7跟进,通过反汇编的注释看到先是一系列关于DevIL.dll及ILU.dll的外部调用,应该都是图片预处理相关,和注册检验无关,一直F8来到10001727这个call:
10001727|.E8 74F9FFFF call 100010A0
1000172C|.83C4 04 add esp, 4
1000172F|.5F pop edi
10001730|.5E pop esi
10001731|.5B pop ebx
10001732|.59 pop ecx
10001733\.C3 retn
在这之前都是对DevIL.dll及ILU.dll的调用,到这里要离开之前的一个call是干啥的?F7跟进看看:
100010A0/$83EC 18 sub esp, 18
100010A3|.8B4424 1C mov eax, dword ptr
100010A7|.C74424 00 301>mov dword ptr , 100E1F30
100010AF|.C74424 04 309>mov dword ptr , 100D9130 ;ASCII "-v"
100010B7|.C74424 08 2C9>mov dword ptr , 100D912C
100010BF|.C74424 0C 289>mov dword ptr , 100D9128 ;ASCII "-c"
100010C7|.C74424 10 209>mov dword ptr , 100D9120 ;ASCII "####"
100010CF|.894424 14 mov dword ptr , eax
100010D3|.E8 085B0000 call 10006BE0
100010D8|.85C0 test eax, eax
100010DA|.75 09 jnz short 100010E5
100010DC|.B8 E8900D10 mov eax, 100D90E8 ;ASCII "#ERROR: Evaluation error or evaluation period expires"
100010E1|.83C4 18 add esp, 18
100010E4|.C3 retn
100010E5|>56 push esi
100010E6|.8D4C24 04 lea ecx, dword ptr
100010EA|.57 push edi
100010EB|.51 push ecx
100010EC|.6A 06 push 6
一堆我现在还看不懂的东西(Win32汇编我还没学,不过到现在程序的流程还没把我搞晕,再跟踪看看),我只关心call和跳转,上面一段代码中看到一段文字#ERROR: Evaluation error or evaluation period expires,那么它之前的位于100010D3处的Call应该重点研究,为方便重复研究,在此下断点,然后用F7跟入,一进去就看到一堆
取系统时间、读写注册表等的代码(我对这些还不通,但可以对着OD的反汇编和注释“望文生义”),这些代码应该和OCR的功能本身没啥关系呀,值得怀疑,F8边跟边看(看不懂就假装自己看懂了,要不然我哪还有动力搞下去呀!),很快就来到提示“演示版”对话框的地方,在它附近还有其他一些啥“试用超期”之类其他一些信息,看来工作重点应该在这一块。可是我这点小半拉子汇编水平应该也搞不定它呀,哎!不是官网上说试用版与正式版功能上无差别吗,那我跟着程序继续走,看看讨厌的演示版提示对话框关闭后是不是该开始OCR识别功能了?
一路F8,好!又回到上面100010D3处的Call的下一条指令了,在这期间我一直留意着右边寄存器的内容,看图像中的文字是否在某个寄存器中出现过,没有发现,说明到此为止还没有进行OCR的具体功能,100010D3处的Call就是进行各种演示版检测及对话框提示的功能。
3、我现在应该把这一段跳过去,可是我这么跳还是那么跳?晕!逻辑有些乱,短跳?指令长度如何算?我还都没搞清楚,还好我知道nop,不会跳咱还不会nop吗!再看一眼代码:
100010D3|.E8 085B0000 call 10006BE0
100010D8|.85C0 test eax, eax
100010DA|.75 09 jnz short 100010E5
100010DC|.B8 E8900D10 mov eax, 100D90E8 ;ASCII "#ERROR: Evaluation error or evaluation period expires"
100010E1|.83C4 18 add esp, 18
100010E4|.C3 retn
100010E5|>56 push esi
100010E6|.8D4C24 04 lea ecx, dword ptr
100010EA|.57 push edi
100010EB|.51 push ecx
100010EC|.6A 06 push 6
从100010D3到100010E4里应该包含了试用版检测提示及不知啥情况下会发生的“#ERROR: Evaluation error or evaluation period expires”的死跳。我先在心里给自己鼓鼓劲:我分析得应该...应该没错!就mop!不!是nop它(其实心虚得很)。
在OD里如何修改并保存?!以后在学,用UltraEdit打开AspriseOCR.dll,搜索找到“E8085B0000”就一处,应该是了,把那里及随后的18个字节全替换成90,保存。检验一下成果,执行GenericC.exe进行OCR识别,没有再出现试用提示。改改系统时间、删除注册表中添加的项依然正常。爆破成功(我再相信自己一回)!!!
------------------------------------------------------------------------
【破解总结】 实际过程中有许多失败的尝试,最终也没有深入分析里面的细节,仅从函数调用入口、call、跳转及ASCII文字信息入手进行粗略的跟踪,这次成功是运气使然,没有让我在第一次出手时受到残酷打击,给了我一些深入学习crack的信心,这是我感到庆幸的。
路漫漫其修远,我的窃喜到此为止,希望各位前辈不要给我留面子,能拿用您们的出神入化的手指在键盘上为我敲下中肯的学习建议,指正我的错误,我将感激不尽!
------------------------------------------------------------------------
【版权声明】
[ 本帖最后由 roking 于 2008-3-17 18:12 编辑 ] 大哥你是如何一天内看完王爽的汇编语言的,可以把方法告诉我吗,我可是开了 3 个月才看完的啊:L :L :L
回复 #2 lgjxj 的帖子
以前我有一台小日本产的PB-700掌上机器(16K内存、解释BASIC,有点像PC-1500)的时候,使用BASIC写过一个能执行CASL汇编语言的模拟机,用来学习CASL,之后96年学过一阵8086汇编皮毛用于做软盘KEY,虽然没有深入,但对机理还是了解的。之后多年进行高级语言应用程序的开发和调试,所以现在捡起来还快些。有目标的话,对于读计算机方面的书,我的脑袋就特别的兴奋。我读王爽的书,边读边回忆,前5章仔细把练习题做了边,后面的就快速浏览了。虽然不精,但可以边用边学。对于80X86保护模式下的汇编,下了书还没看,以前也没接触过,需要好好学一下。
[ 本帖最后由 roking 于 2007-2-16 17:24 编辑 ] 楼主还真是吃电脑饭的人 技术人才.......... 楼主是个强人啊:victory: /:? 这是什么东东哦?
有点复杂乃 好厉害呀,这是块好料。 太.太厉害啦! :L