逆向破解之160个CrackMe —— 029
CrackMe —— 029
160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序
CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 cracker,想挑战一下其它 cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破。
| 编号 | 作者 | 保护方式 |
| 029 | Cosh | Name/Serial |
工具
x32dbg
开始破解之旅
ON.1
爆破方式
首先使用x32dbg打开029号程序,搜索字符串

这里我们看到了正确信息提示符和错误信息提示符
进入正确信息提示符地址004015E0处
0040159A | 8B45 F0 | mov eax,dword ptr ss:[ebp-] |
0040159D | 8A18 | mov bl,byte ptr ds:[eax] |
0040159F | 32D9 | xor bl,cl |
004015A1 | | mov byte ptr ds:[eax],bl |
004015A3 | | inc ecx |
004015A4 | | inc eax |
004015A5 | | cmp byte ptr ds:[eax], |
004015A8 | F3 | jne cosh..40159D |
004015AA | 8B45 E4 | mov eax,dword ptr ss:[ebp-1C] |
004015AD | 8B55 F0 | mov edx,dword ptr ss:[ebp-] | edx:EntryPoint
004015B0 | 33C9 | xor ecx,ecx |
004015B2 | 8A18 | mov bl,byte ptr ds:[eax] |
004015B4 | 8A0A | mov cl,byte ptr ds:[edx] | edx:EntryPoint
004015B6 | 3AD9 | cmp bl,cl |
004015B8 | | jne cosh..4015C3 | 此处验证跳转
004015BA | | inc eax |
004015BB | | inc edx | edx:EntryPoint
004015BC | | cmp byte ptr ds:[eax], |
004015BF | EF | jne cosh..4015B0 | 此处验证跳转
004015C1 | EB | jmp cosh..4015D9 |
004015C3 | 6A | push |
004015C5 | 6C304000 | push cosh..40306C | 40306C:"ERROR"
004015CA | | push cosh.. | :"One of the Details you entered was wrong"
004015CF | 8B4D E0 | mov ecx,dword ptr ss:[ebp-] |
004015D2 | E8 BB020000 | call <JMP.&Ordinal#> |
004015D7 | EB | jmp cosh..4015ED |
004015D9 | 6A | push |
004015DB | | push cosh.. | :"YOU DID IT"
004015E0 | | push cosh.. | :"Well done,Cracker"
004015E5 | 8B4D E0 | mov ecx,dword ptr ss:[ebp-] |
004015E8 | E8 A5020000 | call <JMP.&Ordinal#> |
004015ED | 6A | push |
004015EF | FF15 | call dword ptr ds:[<&Sleep>] |
我们看到在地址004015BF处经过JMP来到了正确提示符处,这里就是验证注册码正确性的地方,在继续向上翻看,也有验证地址为004015B8,此处验证失败也会跳转到错误的地方
我们将这两个地址修改为NOP,F9运行输入任意字符点击check按钮

bingo ~ 破解成功
在上方还会有多处验证判断,判断输入格式是否正确
ON.2
追码方式
我们看到地址到地址为Name计算的方法
使用Python代码为
name = 'lonenysky'
value = []
for i, key in enumerate(name):
value.append(chr(ord(key) ^ (i + 1)))
print('name is %s' % ''.join(value))
value = []
for i, key in enumerate(name):
value.append(chr(ord(key) ^ (i + 0x0a)))
print('serial is %s' % ''.join(value))

bingo ~ 破解成功
在追码的过程中当我们不知道cl的值时可以观看下方的窗口推测出来

逆向破解之160个CrackMe —— 029的更多相关文章
- 逆向破解之160个CrackMe —— 001
CrackMe —— 001 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 002-003
CrackMe —— 002 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 004-005
CrackMe —— 004 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 013
CrackMe —— 013 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 014
CrackMe —— 014 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 016
CrackMe —— 016 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 017
CrackMe —— 017 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 018
CrackMe —— 018 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 逆向破解之160个CrackMe —— 025
CrackMe —— 025 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
随机推荐
- 【day03】php
一.类型判别函数库 1.安装:类型判别函数库是PHPCORE的组成部分,不用安装 2. (1)is_integer|is_int|is_long 描述: 检测变量是否是整数 格式: ...
- MySQL实战45讲学习笔记:第二十一讲
一.引子 在上一篇文章中,我和你介绍了间隙锁和 next-key lock 的概念,但是并没有说明加锁规则.间隙锁的概念理解起来确实有点儿难,尤其在配合上行锁以后,很容易在判断是否会出现锁等待的问题上 ...
- [LeetCode] 746. Min Cost Climbing Stairs 爬楼梯的最小损失
On a staircase, the i-th step has some non-negative cost cost[i] assigned (0 indexed). Once you pay ...
- vue中子组件的methods中获取到props中的值
这个官网很清楚,也很简单,父组件中使用v-bind绑定传送,子组件使用props接收即可 例如: 父组件中 <template> <div> <head-top>& ...
- Git的学习总结
首先,Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 也是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. ...
- RabbitMQ操作代码封装
1.Message.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...
- jenkins pipeline 复杂的发布流程
1.参数化构建界面 2.交付流水线界面 3.脚本详解 #!groovy pipeline { //在任何可用的代理上执行Pipeline agent any //参数化变量,目前只支持[boolean ...
- Qt 绘制图表 - Qt Charts版
一.前言 自从 Qt 发布以来,给广大跨平台界面研发人员带来了无数的福利.但是Qt自己却一直没有提供自带的图表库,这就使得 QWT.QCustomPlot 等第三方图表库有了巨大的生存空间,为了降低开 ...
- 【转】PyQt弹出式对话框的常用方法及标准按钮类型
pyQt之弹出式对话框(QMessageBox)的常用方法及标准按钮类型 一.控件说明 QMessageBox是一种通用的弹出式对话框,用于显示消息,允许用户通过单击不同的标准按钮对消息进行反馈,且每 ...
- CentOS7 SUDO 笔记--没配置sudoer,为什么有的账号能用sudo命令,有的不能用
原来: 一.安装linux 创建的用户(管理员打钩)默认在 wheel组里. 1. 使用 cat /etc/passwd 查看用户所在组.中间那个数字是 groupid 不太好看 2.使用 cat / ...