CrackMe011
Crackme011 的逆向分析
1.程序观察
可以看到,程序只有让输入的地方,没有确认按钮什么的。
在程序左侧,写着 Status: UNREGISTRIERT。
猜想:
- 程序会根据输入框的变化事件来判断是否正确(其实是不正确的,到后面就知道了)。
- 输入正确的序列号程序旁边的 Status 会改变。
2.简单查壳
使用 VB 编写的程序,没有壳。
3.程序分析
使用 OD 载入程序,搜索字符串。
可以看到有很多的很相似的字符串,还有很多个 "REGISTRIERT"。
我们也不知道这是什么东西,随便双击一个进入代码。
可以发现,这代码和 009 和 010 非常相像。
都是先求得输入的长度,然后建立循环,最后再进行比较。
但是这里,一个代码块有很多的这样的组合。
这是为什么呢?
我们先在比较函数处下断点。
我们没有进行任何操作,程序就立刻中断了。
猜想程序可能使用了定时器。我们使用 VB Decompiler 加载程序
可以看到有4个定时器。
每个定时器代码块,里面都是很多个上面那样的代码。
先分析程序的算法
- 程序先计算出我们输入的序列号的长度
- 建立循环,循环次数是序列号的长度
- 在循环中,程序取得我们输入序列号的前两个字符,将其转化为浮点数,保存在内存中
- 然后程序依次取得序列号的单个字符,将其转化为使用10进制表示的 ASCII 码
- 将上述两个值相加,再转化为十六进制
- 将每个字符和前两个字符相加的值连接起来
最后程序将这个字符串和一串字符串相比较,相同就注册成功。
由于我们输入的序列号最后转化的字符串是十六进制表示的,所以相比较的字符串也应该是在 0-9,A-F 范围内的,这样我们很容易就确定了真正的用来比较的字符串:"081 7E 74 7D 7A 7D 7C 7F 82 83 6D 74 74 7A 7F 7E 7B 7C 7D 82 6D 8H 7E 7B 7C"。
由于最后生成的字符串,是和我们输入的序列号的前两位息息相关的。
前两位越大,最后每个字符相对应的也就越大。
前两位不一样,最后每个数字相对应的也就不一样。
根据正确的比较码,我们可以反推出正确的序列号:
74*3032589#**0541238#7412
相关文件在我的 Github:https://github.com/UnreachableLove/160-Crackme/tree/master/Crackme011
转载于:https://www.cnblogs.com/white-album2/p/11509058.html
CrackMe011相关推荐
- 160个Crackme011
文章目录 查壳 分析思路寻找突破口 OD分析程序 分析核心算法 强行推序列号 查壳 目标程序是使用VB写的,和前面三个crackme是同一个作者 分析思路寻找突破口 这个就是这次的目标程序,只提供了一 ...
最新文章
- css盒子教程,彻底弄懂css盒子模式(div布局快速入门)_css教程
- Django 框架13: 自定义过滤器和标签
- MVP 2008全球峰会可预订宾馆,寻室友
- linuex查看繁忙_如何用九条命令在一分钟内检查Linux服务器性能?
- 转载 MySQL 性能优化的最佳20多条经验分享 http://www.jb51.net/article/24392.htm
- c++将int转换成string_Integer与int的区别 (== 与 equal)
- 给运维工程师的Cheatsheets! 《Shell脚本速查手册》免费下!
- Bootstrap 学习笔记8 下拉菜单滚动监听
- body div js 放大图片_jquery图片放大插件鼠标悬停图片放大效果
- java识别系统_[Java教程]Java识别操作系统
- EOS cleos --skip-transaction-signatures 跳过签名
- 日益努力而后风生水起,送3本技术好书
- 斯诺登给普通人开发了个「反监控」的 App
- 【iOS篇】在iPhone上安装描述文件
- 【谷粒商城 - k8s、devOps专栏】
- matlab优化工具箱OptimizationToolbox使用方法
- C语言 写一个函数求两个数的较大值
- HACKTHEBOX——Help
- 计算机二级MS-Office真题及答案-历年汇总
- Linux中cut命令的作用
热门文章
- DOM之innerHTML属性
- Vue3 组合式Api之customRef实现防抖功能
- php的弹出窗口,弹出窗口 PHP
- 安卓beforetextchanged_【已解决】Android中给EditText添加的TextWatcher中的onTextChanged始终被调用(被执行多次)...
- bigdecimal java 最大值_Java中的数学运算BigDecimal
- Linux查看域名对应的ip地址
- 【软考】操作系统计算机网络复习指南
- Apsara Clouder专项技能认证:实现调用API接口(阿里云疫情白给课程系列)
- 把变量赋值给寄存器_阻塞赋值和非阻塞赋值的区别与记忆
- 仿京东显示隐藏密码明文案例(字体图标实现)