【破文标题】crackme_zapline 分析
【破文作者】CloAk
【作者邮箱】@qq.com
【作者主页】
【破解工具】OD,...
【破解平台】Windows
------------------------------------------------------------------------
【破解过程】//zaplineCreackme 分析 // 首先, 程序没有按钮 目测使用 bp GetWindowText // 早先已经调试过, 但是因为没仔细看, 研究了半天 // 首先下 bp GetWindowTextW 断下返回来到下面, 00EBCA12 |. PUSH ESI ; /Count = 0x8
00EBCA13 |. PUSH EAX ; |Buffer =
00EBCA14 |. 8B03 MOV EAX, DWORD PTR DS:[EBX] ; |
00EBCA16 |. PUSH EAX ; |hWnd =
00EBCA17 |. FF15 E002ED00 CALL DWORD PTR DS:[<&USER32.GetWindowTex>; \GetWindowTextW
00EBCA1D |. 8BF0 MOV ESI, EAX
00EBCA1F |. 83FE FF CMP ESI, -0x1
00EBCA22 |. JNZ SHORT 00EBCA37 // 上面的地方没有上来, 走到retn 来到下面 00EBCA60 /$ PUSH EBX
00EBCA61 |. PUSH ESI
00EBCA62 |. 8BF1 MOV ESI, ECX
00EBCA64 |. PUSH EDI
00EBCA65 |. 8DBE LEA EDI, DWORD PTR DS:[ESI+0x378]
00EBCA6B |. PUSH EDI
00EBCA6C |. 8D8E LEA ECX, DWORD PTR DS:[ESI+0x384]
00EBCA72 |. E8 59FFFFFF CALL 00EBC9D0 ; // 读取注册名
00EBCA77 |. 8D86 7C030000 LEA EAX, DWORD PTR DS:[ESI+0x37C] ; ** 来到这里
00EBCA7D |. PUSH EAX
00EBCA7E |. 8D8E LEA ECX, DWORD PTR DS:[ESI+0x388]
00EBCA84 |. E8 47FFFFFF CALL 00EBC9D0 ; // 读取代码
00EBCA89 |. 8D9E LEA EBX, DWORD PTR DS:[ESI+0x380]
00EBCA8F |. PUSH EBX ; // 这两个参数是一样的 所以先不管了
00EBCA90 |. PUSH EDI ; // 继续走过这个call 这个里边你可以自己跟一下
00EBCA91 |. E8 1AFDFFFF CALL 00EBC7B0 ; // compare?
00EBCA96 |. 83C4 ADD ESP, 0x8
00EBCA99 |. 84C0 TEST AL, AL
00EBCA9B |. JE SHORT 00EBCAD0
00EBCA9D |. 8B4E MOV ECX, DWORD PTR DS:[ESI+0x4]
00EBCAA0 |. 6A PUSH 0x35 ; /TimerID = (.)
00EBCAA2 |. PUSH ECX ; |hWnd = NULL
00EBCAA3 |. FF15 3003ED00 CALL DWORD PTR DS:[<&USER32.KillTimer>] ; \KillTimer
00EBCAA9 |. 8B56 MOV EDX, DWORD PTR DS:[ESI+0x4]
00EBCAAC |. 6A PUSH 0x36 ; /TimerID = (.)
00EBCAAE |. PUSH EDX ; |hWnd = 009D0000
00EBCAAF |. FF15 3003ED00 CALL DWORD PTR DS:[<&USER32.KillTimer>] ; \KillTimer
00EBCAB5 |. PUSH EDI
00EBCAB6 |. 8BCB MOV ECX, EBX
00EBCAB8 |. E8 83EDFEFF CALL 00EAB840
00EBCABD |. 8B46 MOV EAX, DWORD PTR DS:[ESI+0x4]
00EBCAC0 |. 6A PUSH 0x0 ; /Timerproc = NULL
00EBCAC2 |. C8000000 PUSH 0xC8 ; |Timeout = . ms
00EBCAC7 |. 6A PUSH 0x34 ; |TimerID = (.)
00EBCAC9 |. PUSH EAX ; |hWnd = NULL
00EBCACA |. FF15 F002ED00 CALL DWORD PTR DS:[<&USER32.SetTimer>] ; \SetTimer
00EBCAD0 |> 5F POP EDI ; 009DF938
00EBCAD1 |. 5E POP ESI ; 009DF938
00EBCAD2 |. 5B POP EBX ; 009DF938
00EBCAD3 \. C3 RETN // 走过retn来到下面这里
00EBCAE0 /$ PUSH EBX
00EBCAE1 |. PUSH ESI
00EBCAE2 |. PUSH EDI
00EBCAE3 |. 8BF1 MOV ESI, ECX
00EBCAE5 |. E8 76FFFFFF CALL 00EBCA60 ; ** 在这里
00EBCAEA |. 8B96 MOV EDX, DWORD PTR DS:[ESI+0x378] ; 读取注册名
00EBCAF0 |. 8B4A F4 MOV ECX, DWORD PTR DS:[EDX-0xC] ; 长度
00EBCAF3 |. 33DB XOR EBX, EBX
00EBCAF5 |. 33C0 XOR EAX, EAX
00EBCAF7 |. 85C9 TEST ECX, ECX
00EBCAF9 |. 7E 1A JLE SHORT 00EBCB15
00EBCAFB |. EB JMP SHORT 00EBCB00
00EBCAFD | 8D49 LEA ECX, DWORD PTR DS:[ECX]
00EBCB00 |> 85C0 /TEST EAX, EAX
00EBCB02 |. |JS SHORT 00EBCB48
00EBCB04 |. 3BC1 |CMP EAX, ECX
00EBCB06 |. 7F |JG SHORT 00EBCB48
00EBCB08 |. 0FB73A |MOVZX EDI, WORD PTR DS:[EDX]
00EBCB0B |. |INC EAX
00EBCB0C |. 03DF |ADD EBX, EDI
00EBCB0E |. 83C2 |ADD EDX, 0x2
00EBCB11 |. 3BC1 |CMP EAX, ECX
00EBCB13 |.^ 7C EB \JL SHORT 00EBCB00 ; 累加用户名ascii码
00EBCB15 |> 8BB6 7C030000 MOV ESI, DWORD PTR DS:[ESI+0x37C]
00EBCB1B |. 8B4E F4 MOV ECX, DWORD PTR DS:[ESI-0xC]
00EBCB1E |. 33FF XOR EDI, EDI
00EBCB20 |. 33C0 XOR EAX, EAX
00EBCB22 |. 85C9 TEST ECX, ECX
00EBCB24 |. 7E JLE SHORT 00EBCB3D
00EBCB26 |. 8BD6 MOV EDX, ESI
00EBCB28 |> 85C0 /TEST EAX, EAX
00EBCB2A |. 1C |JS SHORT 00EBCB48
00EBCB2C |. 3BC1 |CMP EAX, ECX
00EBCB2E |. 7F |JG SHORT 00EBCB48
00EBCB30 |. 0FB732 |MOVZX ESI, WORD PTR DS:[EDX]
00EBCB33 |. |INC EAX
00EBCB34 |. 03FE |ADD EDI, ESI
00EBCB36 |. 83C2 |ADD EDX, 0x2
00EBCB39 |. 3BC1 |CMP EAX, ECX
00EBCB3B |.^ 7C EB \JL SHORT 00EBCB28 ; 累加注册码ascii码
00EBCB3D |> 33C0 XOR EAX, EAX
00EBCB3F |. 3BDF CMP EBX, EDI ; 比较累加的数值对不对
00EBCB41 |. 5F POP EDI ; 009DF938
00EBCB42 |. 5E POP ESI ; 009DF938
00EBCB43 0F94C0 SETE AL // 这里可以改 setnt
00EBCB46 |. 5B POP EBX ; 009DF938
00EBCB47 |. C3 RETN // 然后继续走过这个call 00EBCCCE |. E8 0DFEFFFF CALL 00EBCAE0
00EBCCD3 |. 85C0 TEST EAX, EAX ; ** 来到这里
00EBCCD5 4D JE SHORT 00EBCD24
00EBCCD7 |. 8B46 MOV EAX, DWORD PTR DS:[ESI+0x4]
00EBCCDA |. 6A PUSH 0x34 ; /TimerID = (.)
00EBCCDC |. PUSH EAX ; |hWnd =
00EBCCDD |. FF15 3003ED00 CALL DWORD PTR DS:[<&USER32.KillTimer>] ; \KillTimer
00EBCCE3 |. 8B4E MOV ECX, DWORD PTR DS:[ESI+0x4]
00EBCCE6 |. 6A PUSH 0x0 ; /Timerproc = NULL
00EBCCE8 |. C8000000 PUSH 0xC8 ; |Timeout = . ms
00EBCCED |. 6A PUSH 0x35 ; |TimerID = (.)
00EBCCEF |. PUSH ECX ; |hWnd = 009DFAD8
00EBCCF0 |. FF15 F002ED00 CALL DWORD PTR DS:[<&USER32.SetTimer>] ; \SetTimer
00EBCCF6 |. 5E POP ESI ; // 上面开始了时钟看到下面的0x35
00EBCCF7 |. 5D POP EBP ; // 果断在 0xEBCCFB下断
00EBCCF8 |. C2 RETN 0x4
00EBCCFB |> 83F8 CMP EAX, 0x35
00EBCCFE JNZ SHORT 00EBCD24
00EBCD00 |. E8 5BFEFFFF CALL 00EBCB60 ; // 又是比较F7
00EBCD05 |. 85C0 TEST EAX, EAX
00EBCD07 |. 1B JE SHORT 00EBCD24
00EBCD09 |. 8B56 MOV EDX, DWORD PTR DS:[ESI+0x4]
00EBCD0C |. 6A PUSH 0x35 ; /TimerID = (.)
00EBCD0E |. PUSH EDX ; |hWnd = ('吾爱破解2012CM大赛作品',class='ATL:00ED82E8')
00EBCD0F |. FF15 3003ED00 CALL DWORD PTR DS:[<&USER32.KillTimer>] ; \KillTimer
00EBCD15 |. 6A PUSH 0x1
00EBCD17 |. EE030000 PUSH 0x3EE
00EBCD1C |. 8D4E LEA ECX, DWORD PTR DS:[ESI+0x50]
00EBCD1F |. E8 BCFEFFFF CALL 00EBCBE0 ; 成功标志
00EBCD24 |> 5E POP ESI ; 009DFAD8
00EBCD25 |. 5D POP EBP ; 009DFAD8
00EBCD26 \. C2 RETN 0x4 // 来到0x00EBCD00, 看到类似刚才的代码我有些被弄混了!!
00EBCB79 |. /7E 1A JLE SHORT 00EBCB95
00EBCB7B |. |EB JMP SHORT 00EBCB80
00EBCB7D | |8D49 LEA ECX, DWORD PTR DS:[ECX]
00EBCB80 |> |85C0 /TEST EAX, EAX
00EBCB82 |. | |JS SHORT 00EBCBCD
00EBCB84 |. |3BC1 |CMP EAX, ECX
00EBCB86 |. |7F |JG SHORT 00EBCBCD
00EBCB88 |. |0FB73A |MOVZX EDI, WORD PTR DS:[EDX]
00EBCB8B |. | |INC EAX
00EBCB8C |. |03DF |ADD EBX, EDI
00EBCB8E |. |83C2 |ADD EDX, 0x2
00EBCB91 |. |3BC1 |CMP EAX, ECX
00EBCB93 |.^|7C EB \JL SHORT 00EBCB80
00EBCB95 |> \8BB6 7C030000 MOV ESI, DWORD PTR DS:[ESI+0x37C]
00EBCB9B |. 8B4E F4 MOV ECX, DWORD PTR DS:[ESI-0xC]
00EBCB9E |. 33FF XOR EDI, EDI
00EBCBA0 |. 33C0 XOR EAX, EAX
00EBCBA2 |. 85C9 TEST ECX, ECX
00EBCBA4 |. 7E JLE SHORT 00EBCBBD
00EBCBA6 |. 8BD6 MOV EDX, ESI
00EBCBA8 |> 85C0 /TEST EAX, EAX
00EBCBAA |. |JS SHORT 00EBCBCD
00EBCBAC |. 3BC1 |CMP EAX, ECX
00EBCBAE |. 7F 1D |JG SHORT 00EBCBCD
00EBCBB0 |. 0FB732 |MOVZX ESI, WORD PTR DS:[EDX]
00EBCBB3 |. |INC EAX
00EBCBB4 |. 03FE |ADD EDI, ESI
00EBCBB6 |. 83C2 |ADD EDX, 0x2
00EBCBB9 |. 3BC1 |CMP EAX, ECX
00EBCBBB |.^ 7C EB \JL SHORT 00EBCBA8
00EBCBBD |> \8D045B LEA EAX, DWORD PTR DS:[EBX+EBX*] ; **注册码累加的值 *
00EBCBC0 |. 33C9 XOR ECX, ECX
00EBCBC2 |. 3BC7 CMP EAX, EDI
00EBCBC4 |. 0F94C1 SETE CL
00EBCBC7 |. 5F POP EDI ; crackme_.00EBCD05
00EBCBC8 |. 5E POP ESI ; crackme_.00EBCD05
00EBCBC9 |. 5B POP EBX ; crackme_.00EBCD05
00EBCBCA |. 8BC1 MOV EAX, ECX
00EBCBCC |. C3 RETN // 当上面的判断比较成功的话 即出现注册成功, 但是因为自己没细心看, 浪费了很多时间 ------------------------------------------------------------------------
【破解总结】参考sdzzb大神的破文
http://www.52pojie.cn/forum.php?mod=viewthread&tid=146265 // 总结
对每一个retn后的数据需要仔细观察! , 特别是多层嵌套的call , 不要弄混了!
------------------------------------------------------------------------
【版权声明】

crackme_zapline分析的更多相关文章

  1. alias导致virtualenv异常的分析和解法

    title: alias导致virtualenv异常的分析和解法 toc: true comments: true date: 2016-06-27 23:40:56 tags: [OS X, ZSH ...

  2. 火焰图分析openresty性能瓶颈

    注:本文操作基于CentOS 系统 准备工作 用wget从https://sourceware.org/systemtap/ftp/releases/下载最新版的systemtap.tar.gz压缩包 ...

  3. 一起来玩echarts系列(一)------箱线图的分析与绘制

    一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...

  4. 应用工具 .NET Portability Analyzer 分析迁移dotnet core

    大多数开发人员更喜欢一次性编写好业务逻辑代码,以后再重用这些代码.与构建不同的应用以面向多个平台相比,这种方法更加容易.如果您创建与 .NET Core 兼容的.NET 标准库,那么现在比以往任何时候 ...

  5. UWP中新加的数据绑定方式x:Bind分析总结

    UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...

  6. 查看w3wp进程占用的内存及.NET内存泄露,死锁分析

    一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方 ...

  7. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  8. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

  9. HashMap与TreeMap源码分析

    1. 引言     在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...

随机推荐

  1. jQuery 源码解析一:jQuery 类库整体架构设计解析

    如果是做 web 的话,相信都要对 Dom 进行增删查改,那大家都或多或少接触到过 jQuery 类库,其最大特色就是强大的选择器,让开发者脱离原生 JS 一大堆 getElementById.get ...

  2. MongoDB 快速入门--高级

    引用 --------->DBRefs DBRef的形式: { $ref : , $id : , $db : } $ref:集合名称 $id:引用的id $db:数据库名称,可选参数 { &qu ...

  3. JTextField限制 输入数字

    貌似有很多方法,先记了再说... 1.限制输入数字 用法 textfield.setDocument(new IntegerDocument()); class IntegerDocument ext ...

  4. Spring+Ibatis集成开发实例

    首先简历数据库demo(本文选mysql) 数据库脚本: CREATE TABLE `ibatis` (  `id` varchar(20) NOT NULL,  `name` varchar(20) ...

  5. c# 将PPT转换成HTML

    这只是一个小程序,就是将ppt转换成html,方法很多,为了以后备用,在此记录一下,也和大家分享 源码如下: using System; using System.Collections.Generi ...

  6. 设计模式奠基石——UML关系转化为代码

    1.继承关系(泛化关系) [说明]:继承关系是子类(派生类)继承父类(基类),或者子接口继承父接口的关系.即子类对象"is a" 父类对象,比方鸟是动物. [UML图]: 图解:A ...

  7. python selenium自动化(一)点击页面链接测试

    需求:现在有一个网站的页面,我希望用python自动化的测试点击这个页面上所有的在本窗口跳转,并且是本站内的链接,前往到链接页面之后在通过后退返回到原始页面. 要完成这个需求就必须实现3点: 1. 找 ...

  8. Python基础教程之List对象 转

    Python基础教程之List对象 时间:2014-01-19    来源:服务器之家    投稿:root   1.PyListObject对象typedef struct {    PyObjec ...

  9. 高级I/O之异步I/O

    A synchronous I/O operation causes the requesting process to be blocked until that I/O operation com ...

  10. 苹果开发工具:Xcode和Interface Builder

    摘要:在Mac OS X上开发,首选Xcode继承开发环境.本文对开发工具套件中最重要的Xcode和Interface Builder两个工具做了简要介绍,并提供<苹果开发工具概述>PDF ...