[反汇编练习] 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            retndd 0x40315200403152  0040146F  Chafe_1.0040146F
00403156  00401063  Chafe_1.00401063
0040315A  00401361  Chafe_1.00401361
0040315E  0040149C  Chafe_1.0040149C
00403162  004014BA  Chafe_1.004014BAcall 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幸福

转载于:https://www.cnblogs.com/bbdxf/p/3817880.html

[反汇编练习] 160个CrackMe之023相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. Crackme006 - 全新160个CrackMe学习系列(图文|视频|注册机源码)

    知乎:逆向驿站 原文链接 CrackMe006 | 难度适中适合练手 |160个CrackMe深度解析(图文+视频+注册机源码) crackme006,依然是delphi的,而且没壳子,条线比较清晰, ...

  8. 视频+图文+注册+机源码 | 160个CrackMe深度解析合集 | 逆向破解入门

    全部合集的获取请关注微信公众号:逆向驿站 回复:160 即可获得其余合集 以下是示例文章 160个CrackMe深度解析合集-001 提倡"刨根问底",拒绝"浅尝辄止&q ...

  9. Crackme006 - 全新160个CrackMe深度解析系列(图文+视频+注册机源码)

    原文链接 CrackMe006 | 难度适中适合练手 |160个CrackMe深度解析(图文+视频+注册机源码) crackme006,依然是delphi的,而且没壳子,条线比较清晰,算法也不难,非常 ...

最新文章

  1. ICCV 2021 | 用于细粒度 3D 形状分割的基于持久同源的图卷积网络
  2. spring jpa mysql集群_Spring Boot系列之十四 JPA 连接mycat
  3. Python 基础教程(第2版) 中文版+英文原版下载
  4. excel 两组数据交点_Python 自动化测试(四):数据驱动
  5. mysql允许两个用户远程连接_mysql允许用户远程连接
  6. 《SpringCloud超级入门》Eureka注册中心开启密码认证《十二》
  7. py3下怎么用StringIO
  8. PHP基础学习课程强烈推荐
  9. php pdo-insert,php mysql pdo insert multiple rows 批量插入
  10. C语言 复制字符串 malloc
  11. 浅析汽车融资租赁业务模式
  12. GNU GCC 编译
  13. 三星android截屏快捷键是什么,三星s10截屏快捷键是什么
  14. Git设置代理服务器
  15. OTU/ASV/Feature tabel 表格 过滤 相对丰度 微生物
  16. 13.2 用Patsy创建模型
  17. 微信小程序:MD5 加密
  18. 淘宝商品详情页API接口、淘宝商品销量API接口、淘宝商品列表API接口、淘宝APP详情API接口、淘宝详情API接口
  19. python3的numpy包中的numpy.logspace解析
  20. 【该文章已被封禁】区块链钱包APP逆向分析及实现

热门文章

  1. linux常见服务解释
  2. 创新设计思维记录(part1)
  3. 《Unity 5.x游戏开发实战》一1.9 添加一个水平面
  4. 新人小白面试软件测试必问
  5. 【活动推荐】美团外卖两千万日订单背后的客户端技术架构
  6. Memory cgroup out of memory
  7. 微信小程序iBeacon获取问题(wx.onBeaconUpdate不执行)【已解决】
  8. VUE | key的内部原理、Vue监测数据的原理、Vue.set()和vm.$set()的使用
  9. 多懂点SQL可以写出更好的接口
  10. CS231n系列之 Lecture1:Introduction