【破文标题】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. http请求中乱码------编码的转换

    在http请求中如果包含了汉字,那么就会出现乱码,引文默认的编码是ISO的,为了正常的显示,需要将编码转化为UTF或者gbk,下面提供一个辅助类. import java.io.Unsupported ...

  2. jqGrid 学习

    jqGrid 学习: 一.下载需要的jqGrid包:http://www.trirand.com/blog/?page_id=6 二.下载JQuery UI:http://jqueryui.com/d ...

  3. npm package 装包匹配原则

    经常看到package.json 里面有这样的devDependencies: "devDependencies": { "@angular/common": ...

  4. C++ 不支持模版的分离式编译

    1.C++不支持模版的分离式编译,为什么? C++是分别,单独编译,对于每个cpp文件,预编译为编译单元,这个编译单元是自包含文件,编译的时候,不需要其他的文件,编译好了,生成obj文件,然后连接成e ...

  5. 推荐图书-《SQL Server 2008商业智能完美解决方案》

    内容简介 <SQL Server 2008商业智能完美解决方案>介绍如何使用Microsoft SQL Server 2008开发商业智能(BI)解决方案.<SQL Server 2 ...

  6. delphi 18 屏蔽和替换 右键菜单

    //屏蔽右键菜单procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;  var Handled: Boolean);begin  wi ...

  7. C语言经典算法100例(二)

    11.判断某一年是否是闰年. //判断某一年份是否是闰年 int IsLeapYear(int year) { return (year % 400 == 0 || (year % 4 == 0) & ...

  8. mapreduce2运行流程

  9. springMVC中的Controller里面定义全局变量

    转自:http://notebookdong.iteye.com/blog/1869852 使用SpringMVC的时候,如果想要在Controller中定义一个全局变量,并且实现在不同用户访问程序的 ...

  10. 关于NuDaqPci 数据采集

    最近在做公司一个fct的测试及调试软件 设计到的比较多的通信问题 1,Gpib通信(调用ADL-GPIB) 2,串口通信 3,Usb通信(调用USBXpress) 4,Pci通信(调用PCIS-DAS ...