160个Crackme009
文章目录
- 查壳
- VB Decompiler分析程序
- 前置知识
- OD分析算法
- 写出注册机
- 验证结果
查壳
先来查一下壳,这个程序是用VB写的,和008是同一个作者,用的是用户名和序列号的保护方式,难度可能会有所上升,所以得分析整个按钮点击事件的算法。
VB Decompiler分析程序
把程序拖到VB Decompiler里,这个可是VB的逆向神器啊。
重要的信息有两个,一个是Native Code,说明是自然编译的,程序在编译的时候能够被编译为机器码,以Native Code方式编译的VB程序可以直接用OD调试。
另外一个就是Click的按钮点击事件了,因为整个程序只有一个OK按钮,所以直接就能判定这个就ok按钮的点击事件。
记下偏移,来到0x401FF0处。
前置知识
想要分析出来这个Crackme,必须具备两个VB的前置知识
- 第一个就是VB的变量特征,VB是采用寄存器接收变量地址,地址是指向一个结构体,首地址存放的是类型编号,首地址+0x8。如果是字符串则首地址+0x8的位置是字符串的地址
- 第二个VB反汇编中很多时候会在[ebp-0x34]这个堆栈地址中看到最终的计算的结果,至于为什么 待会就知道了
如果你不知道上面两个规律 这个Crackme绝对会逆的一脸蒙蔽
OD分析算法
随便输入一个账号密码,直接来到按钮事件开头,开始分析整个算法。
首先函数会求出用户名的长度,怎么知道是求的用户名的长度呢?首先看堆栈找到参数的地址 数据窗口跟随,然后首地址+0x8的地方 也就是我内存窗口选中的地址再次数据窗口跟随。
就找到了真正的参数,这个就是VB变量的存放规则,几乎无时无刻不在用。
接着步过这个函数,eax返回地址+0x8的位置就是用户名的长度。
接着以字符串的长度为循环次开始循环。
首先取出用户名的每一位,然后计算每一位的ASCII值,
然后将用户名的ASCII值和前一位的ASCII值相加得出结果,再用vbaVarMove这个函数将结果保存到[ebp-0x34]这个地址。想要动态的看到所有的过程可以用上面的方法观察堆栈参数,找到首地址+0x8的位置详细分析。
直接跳过这轮循环在[ebp-0x34]的地址处查看最后的结果为0x2C4。
接着用vbaVarMul将用户名ASCII的结果和0x499602D2相乘,也就是十进制的1234567890,然后再次通过vbaVarMove将计算结果保存到[ebp-0x34]。
然后用-替换掉计算结果的第4位
和结果的第9位
接着将最后计算的结果和原先输入的密码做比较,用堆栈的参数和VB的数据结构特点可以看到正确的注册码和原先输入的密码。
到这里,这个注册算法就分析完成了
写出注册机
int CalcKey()
{char szUserName[20] = { 0 }; __int64 result = 0;char key[50] = { 0 };printf("请输入用户名:");scanf_s("%s", szUserName, 20);int iUserNameLen = strlen(szUserName);//求出每一位用户名的和for (int i = 0; i < iUserNameLen; i++){result += szUserName[i];}result *= 1234567890;//转为字符串sprintf(key, "%I64d", result);//替换第4位和第9位key[3] = '-';key[8] = '-';printf("%s\n", key);return 0;
}
验证结果
输入用户名,将计算的序列号填入。OK显示正常,这个Crackme也就完成了。
需要相关文件的可以到我的Github下载:https://github.com/TonyChen56/160-Crackme
160个Crackme009相关推荐
- 硬盘温度70度正常吗_70多岁老年人原来血压160,现在130正常吗?医生为你分析实情...
70多岁的老年人,原来有高血压,高压160左右,现在是130左右,正常吗?这个问题问的太过笼统,我们只好通过这个问题,来分享一些老年高血压患者血压控制的一些知识点,希望能够对老年人的高血压控制,能够有 ...
- 微软语音扩展全球语言支持,发布160个新声音
导语:全世界有数千种语言,最具语言天赋的人也只能说数十种,普通人能够学会两三种语言已属不易.然而,在科技日新月异的今天,具备自然语言对话能力的AI已经能够掌握上百种语言,扩展人类自身能力,为不同场景的 ...
- 5分钟带你读「大清」微积分!160多年前清朝数学家撰写文言文版高等数学
视学算法报道 编辑:小咸鱼 好困 [新智元导读]你有见过160多年前清朝数学家写的微积分书吗?这可能是最难懂的高数教材了,堪称天书!近日,网上流传着一本清朝的微积分课本,其中的所有数学表达式都是 ...
- 机器学习160个常见问题.pdf
来自公众号:机器学习算法与Python实战 原文链接:https://hackernoon.com/160-data-science-interview-questions-415s3y2a (Ale ...
- 某34岁程序员哀叹:北京有一套房和160万现金,但500万的股票缩水到70万,上周刚失业,今天跟女友分手,心态崩了!...
在如今的互联网寒冬里,身处其中的打工人是什么处境呢? 来看看一个中年互联网人的故事:34岁,北京一套房,160万现金,原本500万的中概股现在缩水到70万.谈了一个90年的女友今天分手了,上周又刚失业 ...
- 阿里跳槽拼多多,80万年薪涨到160万,值不值得去?
很多人现在找工作的话既想找一份不辛苦薪资要高还要有前途的工作,但世界上有这么便宜的事情吗,显然没有啊.该程序员说道拼多多挖他过去160w年薪,现在在阿里的话总包80万,想问下大家自己该不该过去呢? 原 ...
- 到手40万/年,每年假期160天!提供二室一厅住房,事业编!我酸了。。。。
来源 | 硕博关注 编辑 | 论文项目硕博招聘 大量网友表示,这样的待遇,高过99%的高校!! 深圳中学招聘教师,清一色的名校毕业生,这已是尽人皆知的事情.然而,近期,深圳中学2021年新入职的教师部 ...
- 扛鼎之作!Twitter 图机器学习大牛发表160页论文:以几何学视角统一深度学习
编译 | Mr Bear.青暮 转自 | AI科技评论 导语:近日,帝国理工学院教授.Twitter 首席科学家 Michael Bronstein 发表了一篇长达160页的论文(或者说书籍),试图从 ...
- 麦肯锡全球调研160个案例,发布5个行业34个AI应用场景
来源:全球人工智能 概要:"我觉得不行!":"我觉得可以!"这正是现在大家看待AI的两种态度. "我觉得不行!":"我觉得可以!& ...
最新文章
- windows笔记-内存映射文件
- python实现高校教务管理系统_python实现教务管理系统
- 阿里巴巴副总裁陈丽娟:我对阿里云产品生态的思考 | 云原生加速器观点
- GPS服务端解析程序编写日记之--vs2010中多种语言开发及调试的若干注意事项
- 网络分流器-网络分流器的应用领域
- android百度地图例子,使用百度地图API进行Android地图应用开发(Eclipse)(示例代码)...
- php将汉字转换为gb2312编码,php实现utf-8和GB2312编码相互转换
- libusb的交叉编译
- 十年 IT 老兵告诉你如何快速构建可直接落地、基于开源的低成本架构! | 技术头条...
- HDU2102 A计划【BFS】
- win10磁盘管理界面各系统分区介绍
- 11.求二元查找树的镜像[MirrorOfBST]
- REST+EJB+JPA 框架在 Eclipse+TomEE 的开发环境搭建
- Linux重定向和管道的基础学习
- 计算机网卡和交换机网卡以及交换机数据转发
- 精通 Python 网络爬虫:核心技术、框架与项目实战
- SQLOS任务调度算法
- linux双系统安装
- c++实现高速缓存Cache
- wx.showShareImageMenu使用
热门文章
- DL之DCGNN:基于TF利用DCGAN实现在MNIST数据集上训练生成新样本
- PyQt:成功解决Exception quot;unhandled TypeErrorquot; expected str, bytes or os.PathLike object, no
- HDU 2001 计算两点间的距离
- SEO那些事:一句代码一键分享网站
- PADS 创建封装笔记
- IIS设置Access-Control-Allow-Origin
- GMGridView cell button
- 视口和窗口的理解方法
- 如何用jlink+jflash烧写stm32f103CB的option bytes 和程序
- ios多线程开发的常用三种方式