第二个需要写注册机

首先查看文件,打开文件,什么也没有,help ->about,弹出下面的弹窗

看来是没有什么线索,直接放进OD里面

这里有一个函数CreatFileA,这个函数目的是访问一个文件,如果文件不存在返回值为-1

HANDLE CreateFile(

LPCTSTR lpFileName, //指向文件名的指针

DWORD dwDesiredAccess, //访问模式(写/读)

DWORD dwShareMode, //共享模式

LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针

DWORD dwCreationDisposition, //如何创建

DWORD dwFlagsAndAttributes, //文件属性

HANDLE hTemplateFile //用于复制文件句柄

);

跟下去看,可以看到函数执行完成后会返回一个-1到eax,下一条指令cmp捕获到后让ZF位变成0,后面的jnz指令就没办法跳转了

如果没有这个文件的话就没有办法继续下去了,所以我们在同目录下新建一个同名称文件(CRACKME3.KEY),而且在里面写入字符串,重新开始调试



重新调试后就不会返回-1了

继续,接下来又调用了一个ReadFile函数把文件里面的字符串放进寄存器ebx和内存空间里面

而且可以看到,这个函数到这里只截取了到r的字符,也就是说前18个截取到了,后面8个暂时没有管

继续往下,有一个陌生的call,由于不清楚这个call的用处,所以f7跟进

前面两个xor清空寄存器,之后把push进来的参数,也就是18个字符给esi,然后给bl数值41,之后就是一串循环

循环是根据cl的大小来判断的,循环内部有bl的自加算法,如果bl里面的数等于4f就会跳出循环,之前给bl的数是41,也就是说这个循环会执行4f-41=14次

看一下这个代码,首先以字节的大小把刚才esi里面传入的字符给到al,然后将bl里面的数和al里面的数进行异或,异或完了之后再将它传给esi。

我们来看第一次异或后得到的结果,第一次是a的ascall码和41异或

得到了0x20,然后我们再搜索0x20的ascall码的含义

在键盘上是space,以字符的形式显示就是空格

b的ascall码和0x42(每次循环bl自加1)异或得到的结果也是0x20,所以前十四个字符在循环过后都显示为空格。

再看另外一个指令

这个是把前14个字符的ascall码加到0x4020f9这个地址上,原本地址里面数字是00,加上14次之后就变成了0x01c0这个十六进制数

那这个循环就没有什么其他含义了,往下走

可以看见刚出call后,刚才的4020f9这个地址就和12345678进行了一次异或,异或完了之后这个地址里面的数变成了123457b8,之后又进了一个call

这个call也是不清楚什么含义,f7进去看看之后发现是给esi赋值opqr,然后把123457b8(即所有输入进去字符中的前14个字符的ascall码的和异或上0x12345678之后得到的数)和opqr进行比较,如果相同就进行跳转。

而跳转是跳转到了破解成功的弹窗上,那么我们就明白了key文件里面的后4位字符和前面的14位字符的关系,后4位字符就是前面14位字符的ascall码和异或上0x12345678得到的

理清了思路,我们就可以写注册机制作key文件破解程序了

下面是注册机的脚本

username = input("please input your username:").center(14)

if len(username) > 14:
print("error,please input number less 14")
exit(0) #先用username和0x41开始异或
tem_ = 0
xor_use = []
sum = 0 for i in range(len(username)):
tem = ord("A") + i
xor_use.append(tem ^ ord(username[i]))
#还有连加异或后得到的结果
sum += ord(username[i]) key = sum ^ 0x12345678
key_bytes = bytes(key.to_bytes(4,byteorder='little'))
with open('CRACKME3.KEY',"wb+") as f:
#把前十四个加密后的字符输入进去,然后把后四位需要进行比较的字符也输入进去,即可搞定key文件注册
f.write(bytes(xor_use))
f.write(bytes(key_bytes)) print("it is ok!")

当然,这个程序也能破解,不过破解难度会比较大,有时间的话会更新

003-Cruehead-CrackMeV3的更多相关文章

  1. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数003·contour,轮廓处理

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数003·contour,轮廓处理 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替 ...

  2. php大力力 [003节]php在百度文库的几个基础教程mac环境下文本编辑工具

    2015-08-22 php大力力003.mac环境下文本编辑工具 在windows下,使用notepad特别多.在mac下使用“备忘录”app,word,反而没有存储过txt后缀等不同文本. mac ...

  3. 【面试题003】c数组做为参数退化的问题,二维数组中的查找

    [面试题003]c数组做为参数退化的问题,二维数组中的查找  一,c数组做为参数退化的问题 1.c/c++没有记录数组的大小,因此用指针访问数组中的元素的时候,我们要确保没有超过数组的边界, 通过下面 ...

  4. [反汇编练习] 160个CrackMe之003

    [反汇编练习] 160个CrackMe之003. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  5. java 复习003 之排序篇

    由java 复习003跳转过来的C语言实现版见some-sort-algorithms 快速排序(不稳定 O(n log n)) package vell.bibi.sort_algorithms; ...

  6. Genymotion模拟器一滑动页面就跳到搜索003

    今天郁闷的要死,好不容易让Appium关联起Genymotion了,但是一滑动屏幕就跳转到搜索003界面,当时还以为是Appium的Bug或者Genymotion本身出问题了. 结果网上搜了一段时间( ...

  7. python----特性003

    python特性003:计算特性 #!/usr/local/bin/python3.5 class MyNumber(object): def __init__(self,number): self. ...

  8. [置顶] cocos2d-x 3.0游戏开发xcode5帅印博客教学 003.[HoldTail]游戏世界以及背景画面

    cocos2d-x 3.0游戏开发xcode5帅印博客教学 003.[HoldTail]游戏世界以及背景画面 写给大家的前言,在学习cocos2d-x的时候自己走了很多的弯路,也遇到了很多很多问题,不 ...

  9. 2017-2018-1 1623 bug终结者 冲刺003

    bug终结者 冲刺003 by 王旌含 今日任务:优化界面布局,提供图片素材 需求 app图标.主界面图.主界面中按钮图:选择关卡图.关卡按键图:游戏中的小人.箱子.地板.墙.目的地:方向按钮:重置按 ...

  10. 『练手』003 Laura.SqlForever如何扩展 兼容更多数据库引擎

     003 Laura.SqlForever如何扩展 兼容更多数据库引擎 数据库引擎插件 在 界面上的体现 导航窗体 的 工具栏 中的 引擎下拉列表        导航窗体 的 树形控件 中的 引擎主节 ...

随机推荐

  1. 中国人民公安大学 Chinese people’ public security university 网络对抗技术 实验报告4

    中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验四 恶意代码技术     学生姓名 陈禹 年级 2018 区队 ...

  2. #Python #微信 #消息防撤回 Python实现微信防撤回

    微信(WeChat)是腾讯公司于2011年1月21日推出的一款社交软件,8年时间微信做到日活10亿,日消息量450亿.在此期间微信也推出了不少的功能如:"摇一摇"."漂流 ...

  3. 循环结构(Java)

    基本介绍 while循环语法 while(布尔表达式){循环内容} 只要布尔表达式为true,循环则会一直循环下去 我们大多数会让循环停止下来,我们需要一个让表达式失效的方式来结束循环 少部分需要循环 ...

  4. Linux系统管理实战-进程管理

    进程管理 了解进程 状态/生命周期 查看进程 管理进程 kill killall pkill 进程的调度 进程的nice 了解进程状态/生命周期 什么是进程? 进程的状态? 进程的生命周期? 查看进程 ...

  5. 阿里云Linux服务器部署JDK8实战教程

    下载地址 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 文件上传 把下载的文 ...

  6. Java mysql查询数据库重复数据(单个或多个字段)

    查询表重复数据: SELECT * FROM 表1 f WHERE (f.字段1,f.字段2) in (SELECT 字段1,字段2 FROM 表1 GROUP BY 字段1,字段2 HAVING c ...

  7. 【.NET】Swagger 允许接口重名

    问题: Swagger Failed to load API definition. 相信用过swagger的小伙伴 一定经历过这样的错误,问题点很简单,是接口重名了. 我百度了一下,找不到答案. 谷 ...

  8. Vue3+Vite项目中 使用WindiCSS.

    之前工作有了解过根据类名来写元素的样式,一听就发出疑问:这样写项目可读性恐怕不是很好吧... 之后来到杭州工作后,开始使用WindiCSS后发现 真香!!!  由于近期所写的项目都是自己一个人开发的 ...

  9. greenDao基础用法(一)

    1.配置 1.1 在 build.gradle(project) 中,加入这句 classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // a ...

  10. vmware网络故障处理

    1.基本情况,更新vmware后发现联不上ssh了.查看物理机和虚拟机的ip,使用ping命令发现 虚拟机可以ping物理机且有网络 但是物理机是无法ping虚拟机的 2.网络的教程整理了,各有问题, ...