逆向破解之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 ...
随机推荐
- Linux DNS分离解析与构建智能DNS服务器
一 构建DNS分离解析 方法一 : [root@localhost ~]# vim /etc/named.conf [root@localhost ~]# cd /var/named/ [root@l ...
- Pyppeteer
pyppeteer模块的基本使用 引言 Selenium 在被使用的时候有个麻烦事,就是环境的相关配置,得安装好相关浏览器,比如 Chrome.Firefox 等等,然后还要到官方网站去下载对应的驱动 ...
- 前端Vue项目——初始化及导航栏
一.项目初始化 创建webpack模板项目如下所示: MacBook-Pro:PycharmProjects hqs$ vue init webpack luffy_project ? Project ...
- [LeetCode] 82. Remove Duplicates from Sorted List II 移除有序链表中的重复项之二
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...
- API数据加密框架monkey-api-encrypt
之前有写过一篇加密的文章<前后端API交互如何保证数据安全性>.主要是在Spring Boot中如何对接口的数据进行自动加解密操作,通过注解的方式来指定是否需要加解密. 原理也很简单,通过 ...
- 命令行编译带外部包依赖的java源文件 [以JDBC MySQL8为例]
环境: MySQL8 JDK11(SE) 首先下载MySQL8的JDBC驱动 https://dev.mysql.com/downloads/connector/j/选 PlatForm Indepe ...
- Qt 绘制图表 - Qt Charts版
一.前言 自从 Qt 发布以来,给广大跨平台界面研发人员带来了无数的福利.但是Qt自己却一直没有提供自带的图表库,这就使得 QWT.QCustomPlot 等第三方图表库有了巨大的生存空间,为了降低开 ...
- vs2019 更新之后无法用ctrl+d再设置回来..
工具-选项-环境-键盘
- 聊聊Lambda架构
定义 在数据分析场景中,我们可能会遇到这样的问题.例如,我们要做一个推荐系统,如果我们用批处理任务去做,一天或者一小时的推荐频次明显延迟太大.如果用流处理任务,虽然延迟的问题解决了,然而只用实时数据而 ...
- handle句柄
若是你向我问起 Win32 程序设计中印象最深(最坑爹)的一个概念是什么,那么我会毫不犹豫地告诉你——句柄(Handles).究其原因,无论是 MSDN 还是 维基百科,对于“句柄”这个词的解说都显得 ...