逆向破解之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 ...
随机推荐
- [随笔]冲NOIP一等奖。。
唉不想多说了. 真是一段“传奇”的经历啊. 还是那句话..“是的我上次什么都没说就走了...”这次也一样. 我还是太单纯的以为我们是肯定能够参加北大的夏令营的..然而结果真是意料之外啊. 本来我以为我 ...
- ASP.NET Core 中的 Main 方法
ASP.NET Core 中的 Main 方法 在 ASP.NET Core 项目中,我们有一个名为Program.cs的文件.在这个文件中,我们有一个public static void Main( ...
- Ensight——Fluent重叠网格解决方案【翻译】
原文链接:https://support.ceisoftware.com/hc/en-us/articles/360000664191-Overset-Grid-Solutions-from-Flue ...
- Django中render_to_response和render的区别(转载)
转载地址:https://www.douban.com/note/278152737/ 自django1.3开始:render()方法是render_to_response的一个崭新的快捷方式,前者会 ...
- C# HTTP系列3 HttpWebRequest.ContentType属性
系列目录 [已更新最新开发文章,点击查看详细] 获取或设置请求的 Content-type HTTP 标头的值.默认值为null. 常见的请求内容类型为以下几种: /// <summar ...
- 整理在Spring IOC容器初始化后可以处理特定逻辑的多种实现方式
Spring框架的核心是依赖注入.切面:Spring Boot是在Spring框架的基础上为其提供许多默认配置.默认约定(约定优于配置),从而达到减少或减化配置进而可开箱即用.快速上手:Spring ...
- 用欧拉计划学习Rust编程(第13~16题)
最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...
- go-gin-api 规划目录和参数验证(二)
概述 首先同步下项目概况: 上篇文章分享了,使用 go modules 初始化项目,这篇文章咱们分享: 规划目录结构 模型绑定和验证 自定义验证器 制定 API 返回结构 废话不多说,咱们开始吧. 规 ...
- Aladdin and the Flying Carpet LightOJ 1341 唯一分解定理
题意:给出a,b,问有多少种长方形满足面积为a,最短边>=b? 首先简单讲一下唯一分解定理. 唯一分解定理:任何一个自然数N,都可以满足:,pi是质数. 且N的正因子个数为(1+a1)*(1+a ...
- Jenkins集成Sonar Quabe和权限配置
目录 安装Sonar Jenkins配置sonar Maven Jenkins Job配置 Pipeline Jenkins Job配置 Sonar权限管理 Sonar quality Gate通过阈 ...