Crackme019 的逆向分析

1.程序观察

可以看到,程序要求用户名至少要5位。

2.简单查壳

无壳。

3.程序分析

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

可以看到,字符串上方不远处有一个跳转语句。
在 JNZ 语句处下断点,运行程序,中断在了断点处

修改 ZF 标志位

因为 eax 的值是 JNZ 语句上面的函数返回的

所以我们进入这个函数里面看一看

可以看到,004018C0 这个函数在 004018D1 处调用了一个函数,参数有两个,其中一个是我们输入的假码,另一个可能是真码,我们试一下

那 004018D1 处的这个函数有可能就是比较函数了,我们进入这个函数内部看一下

这个函数又调用了 cmp 函数进行比较

看来,004018C0 函数就是用来比较注册码是否正确的,正确 eax 返回0,不正确返回非0。

下面分析程序的算法

程序首先求得用户名和注册码的长度,如果用户名长度小于5就会报错。

然后程序建立循环,循环次数为用户名的长度

  1. 取用户名一个字符 name[n],n 为循环次数
  2. 让一个十六进制的默认值 0x81276345 加上 name[n]
  3. 取循环次数 n,将 n 左移 8 位
  4. 步骤2的结果与 步骤3的结果进行异或运算
  5. 取循环次数加一
  6. 让用户名长度乘以循环次数,然后按位取反
  7. 5和6的结果相乘
  8. 4的结果再和7的结果相乘

以上就是循环的内容,如下图

循环完成之后,程序将结果转化为 lu 类型的,也就是无符号长整形整数

这就是最终的注册码啦!

4.久违的注册机环节

#include <stdio.h>
#include <string.h>
#include <Windows.h>int Key()
{char szName[20]    = { 0 };int NameLen         = 0;int code             = 0x81276345;printf("请输入用户名:");scanf_s("%s", szName, 20);NameLen = strlen(szName);for (int i = 0; i < NameLen; i++){code += szName[i];code = code ^ (i << 8);code = code * ((~(NameLen * i)) * (i + 1));}printf("%lu", code);return 0;
}int main(int argc, char* argv[])
{Key();return 0;
}

相关文件在我的 Github:https://github.com/UnreachableLove/160-Crackme/tree/master/Crackme019

2019-09-20 19:27:13

转载于:https://www.cnblogs.com/white-album2/p/11559121.html

Crackme019相关推荐

  1. 160个Crackme019

    文章目录 查壳 分析程序 校验结果 写出注册机 查壳 目标程序难度一颗星,没有壳,VC6写的,终于不再是VB的程序了.VC6的好处就是可以用IDA配合OD调试了 分析程序 随便输入一个账号密码,根据字 ...

最新文章

  1. bzoj 2119 股市的预测 —— 枚举关键点+后缀数组
  2. python函数名字_Python每日3题-为什么函数名字可以当做参数用?
  3. OTT交付如何超越传统广电交付,为用户带来高质量视频网络——对话Synamedia流媒体技术发展经理卢彦林...
  4. android10唯一识别,Android 10 如何获取唯一值?
  5. 在Unity3D中实现安卓平台的本地通知推送
  6. inode及硬链接和软链接
  7. Spring Boot教程(二十五)关于RabbitMQ服务器整合
  8. Product of Array Except Self
  9. 如何安装2个版本的python
  10. InfluxDB、grafana、collect部署监控(centos6.8)
  11. TI TMS570LC43xx 裸机开发快速上手
  12. mysql 写undolog_Mysq bin redo undo log
  13. matlab更改安全密钥,Linux下设置安全密钥登录
  14. 苹果内核H5网页漫画小说系统源码+支持对接公众号
  15. 域名解析成ip的过程
  16. linux系统能做什么的,Linux系统适合日常使用吗?普通人学Linux能干什么
  17. 数字图像处理与Python实现-图像降噪-指数型高通滤波
  18. Vlan(虚拟局域网配置)
  19. matlab论文致谢,2020大学毕业论文致谢信
  20. C#中WinFrom保存文件SaveFileDialog类的使用方法

热门文章

  1. JavaScript-解构赋值
  2. c语言用单链表实现lru算法,利用单链表实现LRU算法
  3. 【王道计组笔记】定点数编码方式(原码,补码,反码)
  4. python武器代码_程序员需要掌握的七种 Python 代码更易维护的武器
  5. 光模块价格由带宽还是距离决定_5G光模块市场:行“提量降本”之道 走“技术深耕”之途...
  6. Shiro配置cookie以及共享Session和Session失效问题
  7. Windows由于在创建转储期间出错,创建转储文件失败导致的蓝底白字蓝屏重启,最全细解决方案
  8. 2019百度之星程序设计大赛 1005 Seq
  9. HTML5 响应式网页设计之页面美化(一.响应式布局)
  10. linux系统q7文件,linux系统安装包的管理