Crackme011 的逆向分析

1.程序观察

可以看到,程序只有让输入的地方,没有确认按钮什么的。
在程序左侧,写着 Status: UNREGISTRIERT。

猜想:

  1. 程序会根据输入框的变化事件来判断是否正确(其实是不正确的,到后面就知道了)。
  2. 输入正确的序列号程序旁边的 Status 会改变。

 2.简单查壳

使用 VB 编写的程序,没有壳。

 3.程序分析

使用 OD 载入程序,搜索字符串。

可以看到有很多的很相似的字符串,还有很多个 "REGISTRIERT"。

我们也不知道这是什么东西,随便双击一个进入代码。

可以发现,这代码和 009 和 010 非常相像。
都是先求得输入的长度,然后建立循环,最后再进行比较。
但是这里,一个代码块有很多的这样的组合。

这是为什么呢?
我们先在比较函数处下断点。

我们没有进行任何操作,程序就立刻中断了。
猜想程序可能使用了定时器。我们使用 VB Decompiler 加载程序

可以看到有4个定时器。

每个定时器代码块,里面都是很多个上面那样的代码。

先分析程序的算法

  1. 程序先计算出我们输入的序列号的长度
  2. 建立循环,循环次数是序列号的长度
  3. 在循环中,程序取得我们输入序列号的前两个字符,将其转化为浮点数,保存在内存中
  4. 然后程序依次取得序列号的单个字符,将其转化为使用10进制表示的 ASCII 码
  5. 将上述两个值相加,再转化为十六进制
  6. 将每个字符和前两个字符相加的值连接起来

最后程序将这个字符串和一串字符串相比较,相同就注册成功。

由于我们输入的序列号最后转化的字符串是十六进制表示的,所以相比较的字符串也应该是在 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相关推荐

  1. 160个Crackme011

    文章目录 查壳 分析思路寻找突破口 OD分析程序 分析核心算法 强行推序列号 查壳 目标程序是使用VB写的,和前面三个crackme是同一个作者 分析思路寻找突破口 这个就是这次的目标程序,只提供了一 ...

最新文章

  1. css盒子教程,彻底弄懂css盒子模式(div布局快速入门)_css教程
  2. Django 框架13: 自定义过滤器和标签
  3. MVP 2008全球峰会可预订宾馆,寻室友
  4. linuex查看繁忙_如何用九条命令在一分钟内检查Linux服务器性能?
  5. 转载 MySQL 性能优化的最佳20多条经验分享 http://www.jb51.net/article/24392.htm
  6. c++将int转换成string_Integer与int的区别 (== 与 equal)
  7. 给运维工程师的Cheatsheets! 《Shell脚本速查手册》免费下!
  8. Bootstrap 学习笔记8 下拉菜单滚动监听
  9. body div js 放大图片_jquery图片放大插件鼠标悬停图片放大效果
  10. java识别系统_[Java教程]Java识别操作系统
  11. EOS cleos --skip-transaction-signatures 跳过签名
  12. 日益努力而后风生水起,送3本技术好书
  13. 斯诺登给普通人开发了个「反监控」的 App
  14. 【iOS篇】在iPhone上安装描述文件
  15. 【谷粒商城 - k8s、devOps专栏】
  16. matlab优化工具箱OptimizationToolbox使用方法
  17. C语言 写一个函数求两个数的较大值
  18. HACKTHEBOX——Help
  19. 计算机二级MS-Office真题及答案-历年汇总
  20. Linux中cut命令的作用

热门文章

  1. DOM之innerHTML属性
  2. Vue3 组合式Api之customRef实现防抖功能
  3. php的弹出窗口,弹出窗口 PHP
  4. 安卓beforetextchanged_【已解决】Android中给EditText添加的TextWatcher中的onTextChanged始终被调用(被执行多次)...
  5. bigdecimal java 最大值_Java中的数学运算BigDecimal
  6. Linux查看域名对应的ip地址
  7. 【软考】操作系统计算机网络复习指南
  8. Apsara Clouder专项技能认证:实现调用API接口(阿里云疫情白给课程系列)
  9. 把变量赋值给寄存器_阻塞赋值和非阻塞赋值的区别与记忆
  10. 仿京东显示隐藏密码明文案例(字体图标实现)