CrackMe ——记一次逆向练手

来源:互联网 发布:西北师大知行学院分布 编辑:程序博客网 时间:2024/06/01 04:00

CrackMe.exe

拿到一个exe文件,打开看一看

cm

发现是一个输入用户名和序列号的一个程序

查一下有没有加壳

这里写图片描述

发现并没有加壳,直接扔进OD打开

这里写图片描述

F9先跑一跑

这里写图片描述

输入错误的用户名和序列号会弹出错误提示框,预测程序逻辑是把输入框中的字符串和程序中存储的字符串比较。因此,初步的目标是找到比较的函数,从函数中找到用于比较的字符串。


查看CrackMe模块调用的API函数快捷键(Alt+E)

这里写图片描述

点进去,选择CrackMe 模块

这里写图片描述

Ctrl+N进入查看模块调用的API函数

这里写图片描述

可以看到很多调用的函数,我猜测程序调用了API函数,从对话框中获取字符串,因此,需要关注一些获取对话框字符串的敏感API函数,锁定GetDlgTextA函数(这里的A指的是ASCII编码,W结尾表示宽字节Unicode)

右键在这个API函数调用的地方下断点

这里写图片描述

在这里下断点不清楚是否操作成功,Alt+B看一下断点情况

这里写图片描述

显示的确成功下断点,PS:断点窗口可以设置断点是否有效,这里显示Always表示断点生效,如果是Disable,表示暂时禁用了这个断点,断点一般最好不要删掉,禁用即可,断点调试来之不易,且下且珍惜233

另一个在API下断点的方式

OD一个强大的功能是可以添加很多第三方插件,对逆向有很大帮助,我的OD是吾爱下的,带了一些Plugin,这里用的是API断点插件

这里写图片描述

选择对话框中的GetDlgTextA

这里写图片描述

同样可以达到同样的效果,像我这样的小白最好还是完整走一次过程,加深印象:)

F9开始运行程序,到达我们设置的API断点处

这里写图片描述

这个函数将输入的用户名和序列号传入程序中,进行下一步比较

F7单步跟踪

这里写图片描述

关注堆栈窗口,调用函数时,传入的参数会被压进堆栈

继续单步跟踪

这里写图片描述

找到了比较函数,函数中,将我们输入的字符串和1008比较,大致可以确定1008是我们要的序列号

打开程序,输入正确的用户名和序列号

这里写图片描述

最后附上CrackMe.exe的源程序

CrackMe.exe