功能:

  拿到文件,先执行一下。功能如下:

  1、nag窗口

    会先出现如下nag窗口,持续几秒

    

  2、注册窗口:

    出现错误会提示:You Get Wrong  Try Again  

    

破解:

  1、查壳:

    无壳,并且是用VB5.0-6.0写的  

    

解除nag窗口:

    方法一:Timer搜索法:找到timer函数的位置,并做修改

      缺点:程序的作者将计时器的默认名称改掉之后,根本无法在内存中搜索到Timer关键字,也就无法下手

      步骤:

        程序加载进od,在入口处点击在数据窗口跟随,数据窗口右键查找二进制字符串,Timer(Timer是VB程序默认的定时器变量):  

        

        其中58 1B表示的就是时间参数:0x1B58,这个是计时器的秒数。也就是十进制的7000,7000毫秒就是7秒。

        

        所以第一种去Neg的方法就是将0x1B58改为0x0001,就是将时间缩短到最短。当然还是会有一瞬间

         

    方法二:4c法:

       重新载入程序:

        在数据窗口中,右键转到表达式:输入4067d4+4c,找到form GUI描述表的指针    

            

        选中,右键,数据窗口跟随DWORD    

            

        跟随到406868这个数据段:

        每一个小块的数据是每一个窗体的信息,其中00和01是窗体的序号 而10是第一个窗体的启动标志。

         

        所以:我们只要把第一个窗体数据块的00改成10 然后把第二个窗体的数据块的10改成00。(注:亲测无效)。

        将窗体的序号调换。即可去除neg。  

        

        保存 ,去除nag成功

注册:

   一:爆破

      老规矩:查找:  

      

      向上看,找到关键跳转,nop,保存

      

      运行:

      

  二、注册机

      找到到关键跳转,在这里尝试下断,判断call的功能是否与加密有关:

      

      测试:输入1234,56789

      

      程序断下,看到栈空间中出现1066822,有点像注册码

      

      输入测试:

      

      成功,那么还在上面。

      找到这个函数的开始位置,下断:

      

      第一部分:f8一直跟随,看到eax='1234'出现,主要是:获得的长度*0x15B38 + 第一位数0x31  得到edi = 56d11 十进制为 355601    

      

      继续向下,

      第二部分:将刚才计算的结果转为浮点数,放入到FPU栈,然后将结果加上2.0 得到355603

       

      继续向下,

      第三部分:刚刚得到的浮点数*3-2得到1066807并保存进ST7  

      

      继续向下,

      第四部分:得到的浮点数减去(-15)也就是加15  -->  1066807+15=1066822  这个就是我们刚刚看到的验证码了  

      

总结一下算法:

      [(长度*0x15B38 + 第一位数的十六进制)--->变为十进制 +2]*3-2 +15

下面可以写注册机了:

Num = input('输入:\n')

pwd = ''

test = 0x15B38*len(Num)+ord(Num[0])

pwd = (test+2)*3-2+15

print(pwd)

注册机代码

参考文档:https://bbs.pediy.com/thread-249719.htm

总结:慢慢来,要细心

Crackme_003的更多相关文章

随机推荐

  1. Baccarat凭什么吸引做市商?2021年将如何发展?

    在过去的一年里,基于资金池的AMM自动化做市商几乎统治了所有DeFi活动,他们没有订单簿,而是根据算法曲线提供资产.尽管在流动性和交易方面取得了令人惊叹的成绩,但是其自身具有无常损失.多代币敞口以及低 ...

  2. 算法图解:Python笔记代码

    二分查找 选择排序 递归 快速排序 广度优先搜索 狄克斯特拉算法 贪婪算法 二分查找 def binary_search(lst,item): low = 0 high = len(lst)-1 wh ...

  3. SQL EXPLAIN解析

    本文转载自MySQL性能优化最佳实践 - 08 SQL EXPLAIN解析 什么是归并排序? 如果需要排序的数据超过了sort_buffer_size的大小,说明无法在内存中完成排序,就需要写到临时文 ...

  4. wordpress注册、登录后跳转到首页

    只想注册后跳转到首页 function new_login_redirect() { return '这里换成首页地址'; } add_action( 'user_register', 'auto_l ...

  5. 线段树&数链剖分

    傻逼线段树,傻逼数剖 线段树 定义: 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点. 使用线段树可以快速的查找某一个节点在若干条线段中出现 ...

  6. 使用PageHelper进行分页查询

    service层代码: public Result getDataSetList(String dataCode, String dataName, int pageIndex, int length ...

  7. Java并发之ThreadPoolExecutor源码解析(二)

    ThreadPoolExecutor ThreadPoolExecutor是ExecutorService的一种实现,可以用若干已经池化的线程执行被提交的任务.使用线程池可以帮助我们限定和整合程序资源 ...

  8. Vue框架简介及简单使用

    目录 一.前端框架介绍 二.vue框架简介 三.vue使用初体验 1. vue如何在页面中引入 2. 插值表达式 3. 文本指令 4. 方法指令(事件指令) 5. 属性指令 四.js数据类型补充 1. ...

  9. 《C++ Primer》笔记 第6章 函数

    任意两个形参都不能同名,而且函数最外层作用域中的局部变量也不能使用与函数形参一样的名字(形参就相当于该函数的局部变量). 形参名是可选的,但是由于我们无法使用未命名的形参,所以形参一般都应该有个名字. ...

  10. Docker下FastDFS环境搭建

    本文使用docker进行搭建. #拉取镜像docker pull delron/fastdfs​#创建tracker容器docker create --network=host --name trac ...