WinHex18.4算法分析
经过分析,注册码分为六个部分:
Name: "xxx"
Addr1: "yyy"
Addr2: "zzz" 这三个字符不代表长度
Key1: "32个十六进制数的字符串" 它在内存中的形式是:比如字符串是
"18A519949D4E5F1FAED08A3EAB7CC665" 它会以两个字符为单位作为一个字节, 以顺序列在内存中 ===> 18 A5 19 94 等等
Key2: "32个十六进制数字符串" 同上
Chksm: "kk" 就一个字节
以上的六个部分的后半个部分会被拷贝到以下位置:
xxx 5e2f14
yyy 5e2f65
zzz 5e2fa2
key1的值 5e2fdf
key2的值 5e2fef
key1和key2中的值在内存中是紧密相连的.
Chksm的值 5e30f9
以上六个部分的前半个部分,会进行比较, 也就是说必须一模一样. 除了中间的空格还可以被替换成其他字符
用PEID查看发现未加壳,之后查看导入表,发现关键函数

在lstrcmpiA下断,随意输入注册码,之后发现,注册判断函数在sub_568A74
整串字符串的分离和拷贝跟sub_569fa4有关, 他会清除一些分隔符, 进入下一部分.
六个部分的前半部分都是以如下的形式进行检测的:

其中5e42fc是一个中转站:
在sub_569fa4中,会将分离出来的字符串拷贝到5e42fc中,如果是后半部分的字符串那么还会拷贝到[5e2F14,+0xeb)的相应位置




以上是六段注册码的分离以及部分检测.
下面是checksum的值的计算方式:

就是把5e2f14开始的0xeb个字节, 以字节为单位全部相加
由于这个数据块前面已经置过0, 所以不会有其他影响因素.
checksum就是把5个部分的后半部分以字节为单位全部相加,得到的值的低字节,就是checksum的值了.
另外0x5e3238的值决定了软件的到期时间
0x5e3238的值是由key1的首word和尾word异或得到的, 得注意字节序, 这个值必须在[46e4,5221)之间,高字节必须&&0x80==0
key1的倒数第3个字节 byte_5e2fec and 0x1f == 0x13 ==>5e2fec == 0x13 或0x33 0x53 73 93 b3 e3
byte_5e2fec/32 ==> 5e31a2 !=5,8,6 那么b3就不行了` 0 1 2 3 4 5 6
byte_5e31a2 [2,6]
Name: "aaaa"
Addr1: "bbbb"
Addr2: "cccc"
Key1: "2A3C1111111111111111111111535770"
Key2: "11111111111111111111111111111111"
Chksm: "E3"

Genuinely Licensed for personal use. 个人使用
Software is unlocked. All Updates released before 2018/03/28 are free for me.
软件已经解锁. 2018年3月28日以前的所有升级对我来说都是免费的.
WinHex18.4算法分析的更多相关文章
- Fibonacci 数列算法分析
/************************************************* * Fibonacci 数列算法分析 ****************************** ...
- 数据结构与算法分析——C语言描述 第三章的单链表
数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typede ...
- 第四章 Leader选举算法分析
Leader选举 学习leader选举算法,主要是从选举概述,算法分析与源码分析(后续章节写)三个方面进行. Leader选举概述 服务器启动时期的Leader选举 选举的隐式条件便是ZooKeepe ...
- Python数据结构与算法--算法分析
在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...
- 算法分析 Analysis of Algorithms -------GeekforGeeker 翻译
算法分析 Analysis of Algorithms 为什么要做性能分析?Why performance analysis? 在计算机领域有很多重要的因素我们要考虑 比如用户友好度,模块化, 安全性 ...
- 阶乘之和 & 程序运行时间 & 算法分析
实例:输入n,计算S = 1! + 2! + 3! + 4! + ... + n!的末六位(不含前导0).其中 n ≤ 106. 分析:考虑到数据溢出后程序如下: #include <stdio ...
- GC之一--GC 的算法分析、垃圾收集器、内存分配策略介绍
一.概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本 ...
- XoftSpy 4.13的注册算法分析
[标题]XoftSpy 4.13的注册算法分析 [作者]forever[RCT] [语言]VC [工具]ida4.6,ollydbg1.1 [正文] 这个软件的算法很简单,正好拿来做逆向分 ...
- 数据结果与算法分析(1)——算法分析
在确定一个算法正确的同时,也要保证算法的有效性.算法分析的最重要的标准时运行时间T(N),运行时间与输入元素个数N有关. 数学基础 T(N) = O(f(N)) 表示T(N ...
随机推荐
- MyBatis笔记(一) 最简单的select
小白学习MyBatis的第一天,学习资料包括MyBatis3的官方文档,以及孤傲苍狼大佬的博客.这里先致敬大佬. · 首先,什么是MyBatis? 引用官网的一段话,“MyBatis 是一款优秀的持久 ...
- 类成员(static)和final修饰符
在Java类里只能包含成员变量.方法.构造器.初始化块.内部类(包括接口.枚举)5种成员,类成员是用static来修饰的,其属于整个类. 当使用实例来访问类成员时,实际上依然是委托给该类来访问类成员, ...
- 使用AtomicLong,经典银行账户问题
1.新建Account类,使用AtomicLong定义账户余额,增加和减少金额方法使用getAndAdd方法. package com.xkzhangsan.atomicpack.bank; impo ...
- Exp6 信息搜集与漏洞扫描 20164303
一.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 二.实践内容. (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测. ...
- python进阶(一)
一.调试Debugging应用 (1)命令行内运行 $ python -m pdb my_script.py 这会触发debugger在脚本第⼀⾏指令处停⽌执⾏.这在脚本很短时会很有帮助.你可以通过( ...
- 获取占用fd最大的前20个进程
for x in `ps -eF| awk '{ print $2 }'`;do echo `ls /proc/$x/fd 2> /dev/null | wc -l` $x `cat /proc ...
- 【搬运工】mysql用户权限设置
关于mysql的用户管理,笔记 1.创建新用户 通过root用户登录之后创建 >> grant all privileges on *.* to testuser@localhost id ...
- Economics degrees
Economics degrees Name game"> 经济学学位"> 名称痕戏 Luring students with a new label 新瓶旧酒吸引学生 ...
- bzoj 2286: [Sdoi2011]消耗战 虚树+树dp
2286: [Sdoi2011]消耗战 Time Limit: 20 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 在一 ...
- SPI通信的基础知识
1 SPI物理层 SPI通信设备之间常用物理连接方式如下图 SPI通讯使用3条总线及片选线,3条总线分别为SCK.MOSI.MISO,片选线为CS. CS:从设备选择信号线,常称为片选信号线,也称 ...