第二个需要写注册机

首先查看文件,打开文件,什么也没有,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. python + selenium 常用公共方法封装

    selenium 环境配置及浏览器驱动的安装:https://www.cnblogs.com/gancuimian/p/16435300.html uiautomator2 常用公共方法封装见之前的帖 ...

  2. C#访问MySQL(一):连接查询删除(查删)

    前言: 通过C#连接访问MySQL:连接查询. 1.项目添加MySQL引用: 2.获取数据库一个满足条件的值: public static object GetSingle2(string SQLSt ...

  3. uniapp 模拟器的使用

    uniapp 模拟器的使用 下载夜深模拟器 uniapp  - 工具-设置 adb路径  模拟器路径 模拟器端口号 :26944

  4. Optional类与使用==判断null有什么区别?使用Optional类有什么优势?

    1.使用object==null的例子 2.null带来的问题 3.其他语言中null的处理(替代) 4.Java8的Optional类 4.1 这样做有什么好处呢? 4.2 引入Optional类的 ...

  5. Jmeter一、开源软件的崛起

    一.jmeter自身特点: 1.开源,轻量级,更适合自动化和持续集成. 2.学习难度大. 3.资料少.多英文. 二.性能测试工具选型的原则 1.成本: a.工具成本 b.学习成本 2.通信协议: a. ...

  6. tomcat任务部署

    tomcat项目部署 主机 IP 需求 web-1 192.168.78.144 tomcat+jenkins web-2 192.168.78.145 tomcat 在RHEL-1主机上部署的jen ...

  7. Mysql的MVCC与幻读

    以下特殊情况在可重复读时会产生幻读: 1.a事务先select,b事务insert确实会加一个gap锁,但是如果b事务commit,这个gap锁就会释放(释放后a事务可以随意操作), 2.a事务再se ...

  8. java-------导出数据csv

    outputStream = new FileOutoutStream(file); outputStreamWriter = new OutputStreamWriter (outputStream ...

  9. sql server 自动核算

    USE tempdb; CREATE TABLE #temptable ( [姓名] NVARCHAR(255), [加班日期] DATE, [加班时长] DECIMAL(8, 2) ); INSER ...

  10. 5.3dmax轴相关

    # 知识点: 转换为可编辑的样条线(spline) chamfer 切角 Fillet 圆角 车削命令 书柜案例2 样条线(从图形到多边形) 1.在平面视图中选择矩形并创建一个矩形,将矩形转化为可编辑 ...