crackme001
最近在学习C语言的语法,今天因为早上起来得太早,导致一整天状态都不是很好,索性就没有继续,就拿了个最简单的crackme练练手
首先跑一下程序,看下报错

PE查壳,发现是一个啥子delphi的东西,没见过啊

遂百度查看一手,还好不是壳子,就是个开放工具,那应该可以直接撸不用脱壳了

先看一下MessageBoxA这个函数停在哪

停在了这个地方

反汇编进去跟一手

但是看了一下这前后似乎没有啥子jcc语句的跳转

所以智能搜索看了一下字符串,找到了报错的语句

设置断点调试看看

断点后运行发现还是报错,那么应该是断点的位置不对

既然一直失败,那就把断点设置在失败这个地方

运行一下,然后没有报任何的提示框,那么断点的位置应该是下对了

断点往上跟一下,发现应该是成功的语句,在0042F4D5这个位置有一个jnz的语句,如果执行jnz就会跳转到0042F4F1这个地址,那么正确的语句就不会被执行
那么这个地方就有两种方式让它不跳转,一是直接nop置空,二是把ZF寄存器的值改为1

这里我用的第一种方法,直接把jcc语句nop掉

测试一下,发现成功跳转

这里只是成功绕过了,但是注册码可能会改变,这时候我继续找一下他的加密算法
继续往jcc语句上面跟一下
在jcc语句上有一个函数的调用先不管,再往上看发现有两个往eax,edx寄存器存入值的操作,猜测是字符串存在某个内存里,然后移到了寄存器里面

再往成功的上面看,发现有两个单词,我猜测是字符串

然后成功

这是最右边的一个按钮,看样子应该已经破解成功了,再测试一下左边那个按钮,之前测试了断在try again并没有起到效果,那么很可能是左边这个按钮是用try again的语句
再在第一个try again这个地方下个断点

这里的try again很奇怪,只有错误信息,并没有登录成功的语句,在之前0042FA5A这个内存有一个jge语句,jge是大于等于跳转,那么再网上看0042FA57这个cmp语句就是拿eax的值与4对比
那么这个try again的作用应该是将输入的字符串与4对比,若小于4直接返回错误信息,若大于4则程序继续往下执行
再看到第二个try again,这里是有正确信息的字符串的,那么这里应该是正确密码的判断地方,往上跟jcc语句,好像是和右边按钮一样的结构
那么很明显,edx,eax就是存储字符串的地方了

直接在call这个地方,即0042FAFE这个地方下个断点,然后发现eax的值存放得有一个ascii码

OK,成功了

左右两个框都已经绕过了,我还是想看一下他的加密算法是如何实现的,我猜测加密算法就肯定在这两个try again之间
往下看的时候,发现这段代码明显是在内存和寄存器之间操作,那么很可能就是加密算法

在0042FA87这个地方下个断点,分析下加密算法


ebp:0019F76C esp:0019F740
imul指令:有符号乘,影响 OF、CF 标志位
如果参数是 r8/m8, 将把 AL 做乘数, 结果放在 AX
如果参数是 r16/m16, 将把 AX 做乘数, 结果放在 EAX
如果参数是 r32/m32, 将把 EAX 做乘数, 结果放在 EDX:EAX
0042FA87 |. 8B45 F0 mov eax,[local.4] 022E0F70即用户名存入eax
0042FA8A |. 0FB600 movzx eax,byte ptr ds:[eax] 取第一个字符5,也就是0x35
0042FA8D |. F72D 50174300 imul dword ptr ds:[0x431750] 0x35*0x29=0x87D,结果存入edx:eax
0042FA93 |. A3 50174300 mov dword ptr ds:[0x431750],eax 再将eax给0x431750
0042FA98 |. A1 50174300 mov eax,dword ptr ds:[0x431750] 因为edx为0,取结果放入[431750]
0042FA9D |. 0105 50174300 add dword ptr ds:[0x431750],eax 自加,得0x10FA,放到eax
继续向下看,到下一个call的地方
在0042FAA6执行过后,将字符串CW传入了edx

继续步过这个函数,观察变化

可以看到403708传入ebp-4和字符串CW两个参数运行后,ebp-4变为CW,所以403708应该是一个字符串赋值操作
把"CRACKED"放入edx

步过call函数,发现edx置0,那么这个0042FAB8的作用是把CRACKED这个字符串存入ebp-8

继续跟下去,应该是将ebp-4(CW)和 - 压栈

接下来传入[ebp-0x18],内存[0x431750]的值传入eax,调用函数,跟过这三步之后堆栈并没有变化,所以暂时不管

单步跟到call函数之后,发现[ebp-18]的值变成了4018,那么这个函数的作用应该是将数字转换成字符串,然后下面是三个压栈指令
传入 ebp-c,5运行后出栈5个参数说明之前压栈的 ebp-4(CW)和’-‘未此函数的参数
运行后ebp-c存储着正确的序列号

再继续往下跟就是到第二个call的地方了

再往下就是注册机的部分了,算法这一部分就结束了,那么总结一下这个序列号的算法就是:
'CW-' + 用户名第一个数*29*2+ '-CRACKED'
最后跟师傅交流了一下,他说这个可以先进ida静态分析一下,然后再用od动态分析,因为我ida的操作实在是不太熟练,就只是看一下流程图吧

跟进一下模块,这个地方很明显就是核心算法,也就是之前分析的验证字符串长度的地方

这个地方如果cmp,eax小于4,那么直接跳转到下面这个模块,这个地方就是之前用od跟到的模块

如果cmp, eax大于4走右边到jnz判断,成功则进左,就是注册码正确的那边,失败则进右,就是注册码错误那边

那么很明显,这一部分就是加密算法了,分析的话就不具体分析了,上面用od已经将加密算法给逆出来了

再以后逆向程序的时候可以先用ida看看程序的结构,再用od动态调试的话会更不错
逆向这个东西是在是令人头疼,不过转换下心情也是挺不错的
crackme001的更多相关文章
- Crackme006 - 全新160个CrackMe学习系列(图文|视频|注册机源码)
知乎:逆向驿站 原文链接 CrackMe006 | 难度适中适合练手 |160个CrackMe深度解析(图文+视频+注册机源码) crackme006,依然是delphi的,而且没壳子,条线比较清晰, ...
- CrackMe005-下篇 | 逆向破解分析 | 160个CrackMe(视频+图文)深度解析系列
作者:逆向驿站微信公众号:逆向驿站知乎:逆向驿站 CrackMe005,上篇说了具体方法,下篇来发逆向分析过程,看看老夫是如何得到上篇的具体方法的! 准备 [环境和工具] win7/xp虚拟机环境 C ...
- 逆向破解之160个CrackMe —— 001(上)
CrackMe--001 前置知识介绍: 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合,一共160个待逆向破解的程序 CrackMe:一些公开给别人尝试破解的小程序,制 ...
随机推荐
- npm publish bug & solution
npm publish bug & solution npm ERR! Unexpected token < in JSON at position 0 while parsing ne ...
- css 命名冲突 & solution
css 命名冲突 & solution 类似这样,为了解决模块间可能存在的 css 命名冲突问题,需要单独提供给模块开发者一套模块开发环境:同时,文档上要有如何使用的规范说明. CSS 建议: ...
- select notes mark
select notes mark mark-line https://time.geekbang.org/column/article/224545
- Chrome debug & string to object & copy format json
Chrome debug & string to object & copy format json // save as global variable copy(JSON.stri ...
- NGK高效的背后驱动力是社区发展
社区是公有链生态系统中最重要的部分,如果开发了区块链应用或工具,却没有用户使用,那将毫无价值.因此对公链项目来说首先需要构建用户群,并深入研究用户群体的需求.就目前而言,任何项目都需要社区力量加入项目 ...
- BGV暴涨千倍,未来或将超越YFI领跑DeFi全场!
毫无疑问,YFI在2020年上半年以一己之力掀翻了DeFi市场的热潮.迄今为止,YFI的新鲜资讯从不缺席,最近也是频频登上各大知名媒体热搜.其币价远远超过比特币价格,也让资本市场注意到DeFi市场原来 ...
- 随手一记,关于Java日期时间格式化
在Java中,我们大多数情况下格式化日期都是使用simpleDateFormat,比如把一个日期格式化成:2019-12-31的形式,我们一般定义模板为:yyyy-MM-dd的形式. 我们需要注意的是 ...
- DRF 三大认证的配置及使用方法
目录 三大认证 一.身份认证 1.身份认证配置 1.1 全局配置身份认证模块 1.2 局部配置身份认证模块 2.drf提供的身份认证类(了解) 3.rf-jwt提供的身份认证类(常用) 4.自定义身份 ...
- WIFI6 基本知识(一)
什么是WI-FI6(802.11ax) Wi-Fi 6 是下一代 802.11ax 标准的简称.随着 Wi-Fi 标准的演进,WFA 为了便于 Wi-Fi 用户和设备厂商轻松了解其设备连接或支持的 W ...
- ZooTeam 前端周刊|第 111期
转: ZooTeam 前端周刊|第 111期 ZooTeam 前端周刊|第 111期 浏览更多往期周刊,请访问: https://weekly.zoo.team 基于Vue的前端架构,我做了这15点 ...