[反汇编练习] 160个CrackMe之023.

本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西。

其中,文章中按照如下逻辑编排(解决如下问题):

1、使用什么环境和工具

2、程序分析

3、思路分析和破解流程

4、注册机的探索

----------------------------------

提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大,只要你跟踪了,不用怎么看代码就理解了!

----------------------------------

1、工具和环境:

WinXP SP3 + 52Pojie六周年纪念版OD + PEID + 汇编金手指。

160个CrackMe的打包文件。

下载地址: http://pan.baidu.com/s/1xUWOY 密码: jbnq

注:

1、Win7系统对于模块和程序开启了随机初始地址的功能,会给分析带来很大的负担,所以不建议使用Win7进行分析。

2、以上工具都是在52PoJie论坛下的原版程序,NOD32不报毒,个人承诺绝对不会进行任何和木马病毒相关内容。

2、程序分析:

想要破解一个程序,必须先了解这个程序。所以,在破解过程中,对最初程序的分析很重要,他可以帮助我们理解作者的目的和意图,特别是对于注册码的处理细节,从而方便我们反向跟踪和推导。

和上一节一样,打开CHM,选择第23个Chafe.1.EXE,保存下来。运行程序,程序界面如下:

 

注:它是没有信息框提示错误的,弹出的信息框是About按钮。

 

3、思路分析和破解流程

PEID:  MASM32 / TASM32

步骤:

1、打开OD,将exe拖到OD窗口中,等程序暂停后,直接点击运行按钮(F9),不用理会。

2、在exe中输入Name: bbdxf  Key:123123。

3、在OD中反汇编窗口,右键->中文搜索引擎->智能搜索。

我们很容易发现了正确文本提示内容:YES!You found your serial!

右键->Follow。大概地浏览下代码:

00401294  |.  E8 BA010000   call 00401453                            ;  Case 113 (WM_TIMER) of switch 0040123F
00401299 |. 0FBE05 663140>movsx eax,byte ptr ds:[0x403166] ; // 4
004012A0 |. 3A05 67314000 cmp al,byte ptr ds:[0x403167]
004012A6 |. 75 06 jnz short 004012AE
004012A8 |. 33C0 xor eax,eax
004012AA |. C9 leave
004012AB |. C2 1000 retn 0x10 ; // 返回到User32模块
004012AE |> A2 67314000 mov byte ptr ds:[0x403167],al
004012B3 |. 83F8 10 cmp eax,0x10
004012B6 |. 74 16 je short 004012CE ; // 关键跳转
004012B8 |. 68 65304000 push 00403065 ; /Your serial is not valid.
004012BD |. FF35 7C314000 push dword ptr ds:[0x40317C] ; |hWnd = 000F01EA ('Your serial is not valid.',class='Edit',parent=0007011C)
004012C3 |. E8 66020000 call <jmp.&USER32.SetWindowTextA> ; \SetWindowTextA
004012C8 |. 33C0 xor eax,eax
004012CA |. C9 leave
004012CB |. C2 1000 retn 0x10
004012CE |> 68 7F304000 push 0040307F ; /YES! You found your serial!!
004012D3 |. FF35 7C314000 push dword ptr ds:[0x40317C] ; |hWnd = 000F01EA ('Your serial is not valid.',class='Edit',parent=0007011C)
004012D9 |. E8 50020000 call <jmp.&USER32.SetWindowTextA> ; \SetWindowTextA
004012DE |. 33C0 xor eax,eax
004012E0 |. C9 leave
004012E1 |. C2 1000 retn 0x10

是不是很容易就发现了关键跳转!!( PS: 纯汇编写的代码真少,随便上下翻一下,代码就看完了! )

选中 je short 004012CE,按下空格键,修改为强制跳转 jmp 004012CE ,然后回到exe程序,随意输入Name和Key,哈哈,成功了!

 

4、注册机的探索

就如同About里面说的,这个程序真正想破解要找到注册码而不是爆破!我们尝试一下:

首先,根据文本提示  Case 113 (WM_TIMER) of switch 0040123F,我们知道他是通过定时器触发检测,我们在这里下断,F8单步跟踪:

call 00401453内容:

00401453  /$  55            push ebp                                 ;  // OnTimer的响应函数
00401454 |. 8BEC mov ebp,esp
00401456 |. 83C4 FC add esp,-0x4
00401459 |. 8925 A0314000 mov dword ptr ds:[0x4031A0],esp
0040145F |. 8D25 52314000 lea esp,dword ptr ds:[0x403152] ; // 函数表头
00401465 |. 0FBE05 663140>movsx eax,byte ptr ds:[0x403166]
0040146C |. 03E0 add esp,eax
0040146E \. C3 retn dd 0x403152 00403152 0040146F Chafe_1.0040146F
00403156 00401063 Chafe_1.00401063
0040315A 00401361 Chafe_1.00401361
0040315E 0040149C Chafe_1.0040149C
00403162 004014BA Chafe_1.004014BA call ret 返回到这里: 00401361 . 8D3D 8C314000 lea edi,dword ptr ds:[0x40318C] ; bbdxf
00401367 . 0FBE05 683140>movsx eax,byte ptr ds:[0x403168] ; \n
0040136E . 03F8 add edi,eax
00401370 . FE05 68314000 inc byte ptr ds:[0x403168]
00401376 . A1 88314000 mov eax,dword ptr ds:[0x403188]
0040137B . 8B25 A0314000 mov esp,dword ptr ds:[0x4031A0]
00401381 . 40 inc eax
00401382 . FF05 88314000 inc dword ptr ds:[0x403188]
00401388 . 3307 xor eax,dword ptr ds:[edi]
0040138A . A3 88314000 mov dword ptr ds:[0x403188],eax
0040138F . 803D 68314000>cmp byte ptr ds:[0x403168],0x10
00401396 . 75 07 jnz short 0040139F
00401398 . 8005 66314000>add byte ptr ds:[0x403166],0x4
0040139F > C9 leave
004013A0 . C3 retn 接着返回到这里: 00401299 |. 0FBE05 663140>movsx eax,byte ptr ds:[0x403166] ; // 4
004012A0 |. 3A05 67314000 cmp al,byte ptr ds:[0x403167]
004012A6 |. 75 06 jnz short 004012AE
004012A8 |. 33C0 xor eax,eax
004012AA |. C9 leave
004012AB |. C2 1000 retn 0x10 ; // 返回到User32模块
004012AE |> A2 67314000 mov byte ptr ds:[0x403167],al
004012B3 |. 83F8 10 cmp eax,0x10
004012B6 |. 74 16 je short 004012CE ; // 关键跳转
004012B8 |. 68 65304000 push 00403065 ; /Your serial is not valid.
004012BD |. FF35 7C314000 push dword ptr ds:[0x40317C] ; |hWnd = 000F01EA ('Your serial is not valid.',class='Edit',parent=0007011C)
004012C3 |. E8 66020000 call <jmp.&USER32.SetWindowTextA> ; \SetWindowTextA
004012C8 |. 33C0 xor eax,eax
004012CA |. C9 leave
004012CB |. C2 1000 retn 0x10
004012CE |> 68 7F304000 push 0040307F ; /YES! You found your serial!!
004012D3 |. FF35 7C314000 push dword ptr ds:[0x40317C] ; |hWnd = 000F01EA ('Your serial is not valid.',class='Edit',parent=0007011C)
004012D9 |. E8 50020000 call <jmp.&USER32.SetWindowTextA> ; \SetWindowTextA
004012DE |. 33C0 xor eax,eax
004012E0 |. C9 leave
004012E1 |. C2 1000 retn 0x10

这里面大量地使用了【0x403188】一类的全局变量,但是他们的意思和内容都不是很明确,虽然流程很明确,但是还是不是很明白是什么意思。所以,暂时就没有算法了!

BY  笨笨D幸福

[反汇编练习] 160个CrackMe之023的更多相关文章

  1. [反汇编练习] 160个CrackMe之027

    [反汇编练习] 160个CrackMe之027. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  2. [反汇编练习] 160个CrackMe之026

    [反汇编练习] 160个CrackMe之026. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  3. [反汇编练习] 160个CrackMe之025

    [反汇编练习] 160个CrackMe之025. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  4. [反汇编练习] 160个CrackMe之024

    [反汇编练习] 160个CrackMe之024. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  5. [反汇编练习] 160个CrackMe之022

    [反汇编练习] 160个CrackMe之022. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  6. [反汇编练习] 160个CrackMe之021

    [反汇编练习] 160个CrackMe之021. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  7. [反汇编练习] 160个CrackMe之020

    [反汇编练习] 160个CrackMe之020. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  8. [反汇编练习] 160个CrackMe之019

    [反汇编练习] 160个CrackMe之018. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  9. [反汇编练习] 160个CrackMe之018

    [反汇编练习] 160个CrackMe之018. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

随机推荐

  1. kvm虚拟迁移

    1. 虚拟迁移 迁移: 系统的迁移是指把源主机上的操作系统和应用程序移动到目的主机,并且能够在目的主机上正常运行.在没有虚拟机的时代,物理机之间的迁移依靠的是系统备份和恢复技术.在源主机上实时备份操作 ...

  2. IRQ中断处理流程

    基于Linux2.6.30.4分析IRQ中断的处理流程. 1.中断入口 /* arch/arm/kenel/entry-armv.S*/ b vector_irq + stubs_offset 2.v ...

  3. Spring,Mybatis,Springmvc框架整合项目(第三部分)

    一.静态资源不拦截 第二部分最后显示的几个页面其实都加载了css和js等文件,要不然不会显示的那么好看(假装好看吧),前面已经说了,我们在web.xml中配置了url的拦截形式是/,那么Dispatc ...

  4. 自学入门 Python 优质中文资源索引

    所有资源基于 Python3 版本,全部中文内容,适用于 爬虫 / Web / 数据 方向,每个单元根据学习习惯从 书籍 / 文档 / 视频 中选择一类即可,建议任选一本书籍,然后配合文档类进行学习. ...

  5. 03006_Servlet简介

    1.什么是Servlet (1)Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源: (2)Servlet的实质就是java代码 ...

  6. java 协程框架kilim

    http://phl.iteye.com/blog/2247112 http://chen-tao.github.io/2015/10/02/kilim-work-way/ 待丰富

  7. Hibernate 框架理解

    Hibernate框架简化了java应用程序与数据库交互的开发.Hibernate是一个开源,轻量级的ORM(对象关系映射)工具. ORM工具简化浏览数据的创建,数据处理和数据访问.它是将对象映射到数 ...

  8. vs系列自带的localdb数据库当做数据库

    我在学习mvc4框架的时候,因为是笔记本,觉得装了一个vs就很大了,再装一个sql server 就更麻烦,因此,就想到使用vs自带的localDB,直接生成预览的时候是没有问题的,但是当把mvc4的 ...

  9. cf950d A Leapfrog in the Array

    考虑在位置 \(p\) 的青蛙. 如果 \(p\) 是奇数,答案显然是 \((p+1)/2\). 否则,由于未跳时 \(p\) 左边有 \(p/2\) 只,则 \(p\) 右边有 \(n-p/2\) ...

  10. Virtualbox虚拟机相关

    Virtualbox虚拟机相关 Virtualbox是我一直使用的虚拟机,由于需要一些测试环境等,会经常使用多个虚拟机.经常捣腾.之前有涉及到一些virtualbox方面的问题的处理,并没有记录下来, ...