Crackme_003
功能:
拿到文件,先执行一下。功能如下:
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
总结:慢慢来,要细心
原文地址:https://www.cnblogs.com/yidianhan/p/11601061.html
- java之多线程(Thread)
- HDUOJ------3336 Count the string(kmp)
- hduoj------2594 Simpsons’ Hidden Talents
- 通过Xtrabackup日志来恢复检查点文件
- POJ--2158--------------Milking Grid(最小覆盖字符矩阵)---(开二维kmp)
- poj-------------(2752)Seek the Name, Seek the Fame(kmp)
- hust--------The Minimum Length (最短循环节)(kmp)
- hdu-----(3746)Cyclic Nacklace(kmp)
- javaSE之如何将一个文件复制到另一个文件
- 将文件字节输出流写入到文本中
- javaSE之如何将一个文档显示出来(,txt,.doc,.....)
- Git -- 分支与合并 (命令行+可视化工具p4merge)
- java之如何实现调用启动一个可执行文件,exe
- file类之目录
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Redis 配置连接池,redisTemplate 操作多个db数据库,切换多个db,解决JedisConnectionFactory的设置连接方法过时问题。(转)
- ES6深入浅出-10 ES6新增的数据类型-2.Set与数组去重
- Android添加新按键
- hdu_1059(多重背包)
- CF543D Road Improvement(换根dp)
- 五十四:WTForms表单验证之自定义表单验证器
- 为什么CSS,JS以及图片等这些资源的路径需要加问号
- 无为商城_创建Zuul网关
- HTML基础
- react用redux 做的todolist
- 区间dp体会
- Restframework
- Python中编写类的各种技巧和方法
- 无为商城_创建EurekaServer
- Vue