Tuts4you lena‘s 40 crackme教程[1]
资源百度云盘链接:https://pan.baidu.com/s/1Pey2Yz2-1c2C_BW2vfy3pg
提取码:c7gm
这是一个名为Lena的破解者写的40个crackme, 我准备把这40个crackme的破解教程以博客形式发出,今天是第一个。首先看一下第一个crackme里面包含的所有文件:
把这个红框所示引用程序拖入Ollydbg后显示下图:
接下去我们运行一遍,看一下效果:
这里显示出了要我们购买证书的字样,题目这里是要求我们突破这个对话框而直接转成已经购买好了证书的对话框
鉴于这个程序不大并且已经有了失败对话框的字符串提示,我们来找一下对应的字符串:
果然找到了对应的字符串,以及提示成功的字符串,接下去我们进入You really did it!.... 的字符串看一下。
这里是一个MessageBox显示成功,而上面的内容全是0,所以必定是通过跳转到达这里的,顺着红线找到跳转的地方。
成功找到那个跳转,是一个jmp,我用correct jmp注释标注了,再往上面看一看就看到了CreateFile, 提示失败的Msgbox以及ReadFile。
这个CreateFile的模式是OPEN_EXISTING的,说明是打开已存在文件,这个名为Keyfile.dat。这里面必定是存着密匙的地方,下面有ReadFile, 必定是把Keyfile.dat文件里内容读到内存的某个地方,然后进行比较。
我们在目录下创建Keyfile.dat并且随意写入一部分数据:
再把程序重新拖入Od并且观察刚刚的位置:
由于CreateFile打开文件成功所以规避了失败对话框而是跳转到了ReadFile处,继续F8运行到ReadFile执行结束,然后到对应的缓冲区查看读取的内容:
读取的对应地址是: 0x40211A, 一看果然我输入的乱码被读取到内存中,往下看0x4010B0和0x4010B2两处分别是两个跳转
其中jnz,即我框出来的那句跳转是为了避免调到jmp处的, jmp会跳转到一个失败对话框,提示无效的密匙。
实际上之前ReadFile会有一个返回值,该值会返回到eax中,如果ReadFile返回0代表失败了,否则是成功,test eax, eax就是检验eax是否为0,如果读取成功了就不会为0。
在地址0x4010B8处会对0x402173地址处的内容与0x10做对比,如果比0x10小了,那就会跳转到失败对话框处,这里是检验密匙长度的,也就是说,Keyfile.dat中的内容长度必须大于16个字符。为何我这么讲,来看一下0x402173:
这是ReadFile读取字节数的位置,所以我们的Keyfile.dat里面的内容必须大于10字节。再看一下从0x4010C1处开始的这段。这一段就是检验密匙的阶段了
#include <windows.h>
#include <cstdio>
int main() {BYTE *pBuf = (BYTE *)"password";DWORD dwEBX, dwESI;BYTE bAL;dwEBX ^= dwEBX; // xor ebx, ebxdwEBX ^= dwESI; // xor esi, esiwhile (1) {bAL = *(pBuf + dwEBX); // mov al, byte ptr ds:[ebx + 0x40211A]if (0x0 == bAL) { // cmp al, 0x0; je 0x4010D3if (0x8 > dwESI) { // cmp al, 0x8; jl 0x4010F7MessageBox(NULL, "Invalid code", "caption", MB_OK | MB_ICONERROR);ExitProcess(0);}MessageBox(NULL, "Congratulations!!", "Caption", MB_OK);break;}if ('G' == bAL) // cmp al, 0x47; jnz 0x4010D0dwESI += 1; // inc esidwEBX += 1; // inc ebx} // jmp 0x004010C1system("pause");return(0);
}
我用C语言编写了高等语言的转换,相对清晰,对照查看。
最后可以得出结论,至少需要16个字符,并且其中不管在什么位置,至少需要连续的8个G字符位于Keyfile.dat中便可通过!
(完)
Tuts4you lena‘s 40 crackme教程[1]相关推荐
- tuts4you上lena‘s40个crackme(1)
本来是不打算写文章了,因为懒,想以后通过录屏的形式保存一下自己学的路程.但奈何开学后一直没找到机会,在宿舍也不愿意大吼大叫的讲东西,只好再写写文章了 最近学了一些汇编语言和逆向工程,所以就想通过这40 ...
- CSS 布局:40个教程、技巧、例子和最佳实践
前言: 布局是WEB开发一个重要的课题,进入XHTML/CSS后,使用TABLE布局的方式逐渐淡出,CSS布局以众多优点成为主流,本文将介绍40个基于CSS的web布局的资源和教程.文章的出处在htt ...
- mac 10.13.5, texpad 1.7.40安装教程
感想 最近用到了texpad来修改论文,但是不幸的是texpad是收费的,正版还是蛮贵的,教程没啥好说的,我这里记录一下我心酸的安装教程,我发现mac电脑会经常更新我的texpad,导致我要经常重装t ...
- CentOS 7.4 安装 MySQL 5.6.40 完美教程
为什么80%的码农都做不了架构师?>>> CentOS 7.4 系统安装好之后,默认都是没有安装任何应用软件的,下面就动手丰衣足食安装把. 一.安装 MySQL 去官网下载最新 ...
- 计算机平面设计必学英语,40个Fireworks学习英文教程
下面为大家汇总了40个Fireworks学习英文教程,英文名字:40+ High Quality Adobe Fireworks Tutorials, Resources & PNG file ...
- 40个大数据学习资源,个个是干货,最后7个太给力
"数据是驱动商业向前发展的核心,更是人类社会的未来." 尽管将马云的这句话断章取义地拿出来说会显得唐突,但这话所表达的意思却显而易见.今天给大家分享的这40个教程,送给对未来抱有远 ...
- 简单粗暴的JavaScript学习教程,前端入门的不二之选!
JavaScript 是网景(Netscape)公司开发的一种基于客户端浏览器.面向(基于)对象.事件驱动式的网页脚本语言.JavaScript语言的前身叫作Livescript. JavaScrip ...
- 使用Numpy和Scipy处理图像
图像 = 2-D 数值数组(或者 3-D: CT, MRI, 2D + 时间; 4-D, ...)这里 图像 == Numpy数组 np.array 这个教程中使用的工具: numpy:基本数组操作 ...
- 004 .NetReactor 3.6.0.0之另类脱壳法
文章目录 前言 查壳 脱壳 修复目标程序 前言 最近一直在看脱壳的相关资料,看到了Tuts4you社区脱壳脚本的教程,这个壳我感觉很不错挺有意思的,于是打算将内容整理下分享出来. 查壳 这个壳是.Ne ...
最新文章
- VS下对Resx资源文件的操作
- telegram bot 机器人 发送 加粗 斜体 字体
- 每天一道LeetCode-----KMP算法查找子串,重新实现strStr()函数
- 【剑指offer】包含min函数的栈
- linux抓包命令tcptrace,每天学习一个命令:tcpdump 命令行下抓包
- window.innerHeight和document.documentElement.clientHeight区别
- Scrapy 中的 Request 对象和 Respionse 对象
- 【springBoot】之快速构建一个web项目
- C# 关于winFrom控制网页的自动登录的问题(网页刷屏器的制作原理)
- 秋季吃哪些食物可以改善心情?
- 什么是锁?看完你就明白了
- Vue详细介绍及使用
- mysql创建日历表,可以按日或按月增加数据
- 解读采用DSP工业电机控制系统电路_电动机控制电路图讲解
- php正则匹配中文、汉字
- 全媒体运营师胡耀文教你:教你从0到1,搭建直播电商的直播间模块
- 【C++】1085:球弹跳高度的计算(信息学奥赛)
- ZOJ Monthly, February 2012 - H Matrix (ZOJ 3578)
- 使用stylelint格式css代码
- 三大链表之klist