XueTr(PC Hunter) pro 注册分析

摘要:
,“ShouJiErShiSiShi”,16),预测是为算法准备密钥,因为许多算法都是这样的,首先设置_密钥,然后调用加密/解密,然后是下一行中有四个参数的函数(??或我错过了什么?

原文防盗链地址:http://www.cnblogs.com/aj3423/p/3477042.html

xuetr 介绍:http://www.epoolsoft.com/forum.php?mod=viewthread&tid=18&extra=page%3D1

xuetr pro 下载地址:http://down.epoolsoft.com/pchunter/PCHunter_pro.zip

key file 下载:  http://files.cnblogs.com/aj3423/pchunter.ek.rar

pro版 介绍上说会读取 pchunter.ek 这个keyfile,所以od载入,bp CreateFileA, bp CreateFileW

会断两次,都是断在同一个函数,稍微跟几步会检查文件大小是不是256字节,不是就over,

打开 pchunter.ek,我开始是填入 12345678901234 ... 123456 共256字节, 填什么都行,后来发觉填写 00~FF更方便定位(下面代码就是这样)

往下走,来到算法部分,首先是

XueTr(PC Hunter) pro 注册分析第1张

3个参数的函数 (??, "ShouJiErShiSiShi", 16), 预测是给算法准备key,因为好多算法都是这样,先set_key,然后再调用encrypt/decrypt,

紧接着下一行

XueTr(PC Hunter) pro 注册分析第2张

4个参数的函数 (??, output buffer, key_file内容, 128), 一看就是解密keyfile了,到这还不知道是什么算法,猜测出aes_decrypt有几点:

1. 第一个图的 aes_set_key 里,用 ida 分析 41FB90,可以看到有 switch( case 16: ...   case 24: ...   case 32: ), aes中 16,24,32 分别对应密钥长度是 128, 192, 256 bit,调试时的值是 16, 和上面的key "ShouJiErShiSiShi" 长度是 16 对应

2. 算法有个特征是异或 0x1B,往上搜了下,aes 中有用到

    XueTr(PC Hunter) pro 注册分析第3张

3. 输入和输出有固定模式,因为输入是1234567890..这样,所以图上5行是一个循环, 而输出也是5行一个循环,

XueTr(PC Hunter) pro 注册分析第4张

aes的ecb模式就是,google下可以搜到:

XueTr(PC Hunter) pro 注册分析第5张

4. 作者肯定是自己encrypt,然后在程序里在decrypt

简单写了个测试,确认是 aes_ecb_decrypt,接着往下

来到一堆获取时间的函数,但确定不了 是从128字节的哪部分读取的,所以重新填充key file,这次用 00 ~ FF 填充, 发觉是从偏移 80 和 88 分别读取了两个 FILETIME 结构体,作为starttime 和 endtime

最后,写段代码生成 keyfile:

#include <windows.h>
#include <string>
#include <iostream>
#include <fstream>
using namespace std;

#include "crypto/aes.h" // 用到了cryptopp 库
#include "crypto/modes.h"
#include "crypto/filters.h"
using namespace CryptoPP;

template<class ByteT>
string hex2str(ByteT* hex, int len, const string& delim=" ") {
	if(len == 0) return "";
	string s;
	char x[4];
	for(int i=0; i<len; i++) {
		sprintf_s(x, 4, "%02X", ((unsigned char*)hex)[i]);
		s += x;
		if(i != len-1) s += delim; // append delim if not the last char
	}
	return s;
}
string hex2str(const string& hex, const string& delim=" ") {
	return hex2str(hex.c_str(), hex.length(), delim);
}

string aes_encrypt(string& plain, string& key) {
    ECB_Mode< AES >::Encryption e((byte*)key.c_str(), key.length()); 
	string cipher;
	StringSource ss(plain, true, 
		new StreamTransformationFilter( e, 
			new StringSink( cipher ), 
			StreamTransformationFilter::NO_PADDING) ); 
	return cipher;
}


#pragma pack(push, 1)
struct reg {
	byte unknown_1[80];
	FILETIME ft_beg;
	FILETIME ft_end;
	byte unknown[32];
};
#pragma pack(pop)

int main() {
	string key = "ShouJiErShiSiShi";

	reg r;
	byte* p = (byte*)&r;
	for(unsigned int i=0; i<sizeof(reg); i++) { // 填充 00 ~ FF
		p[i] = i;
	}

	SYSTEMTIME st;
	GetSystemTime(&st); // 得到当前时间 -> start time
	SYSTEMTIME st_new = st;
	st_new.wYear += 10; // 当前时间+10年 -> end time

	SystemTimeToFileTime(&st, &r.ft_beg); // 转成8字节的 FILETIME,xuetr用的这个
	SystemTimeToFileTime(&st_new, &r.ft_end);


	string plain;
	plain.assign((const char*)&r, sizeof(r));
	cout << "raw:" << endl << hex2str(plain) << endl;

	string encrypted = aes_encrypt(plain, key); // 加密
	// cout << "encrypted:" << endl << hex2str(encrypted) << endl;

	ofstream ofs("e:/pchunter.ek", ios::binary); // 写到 key file
	ofs << hex2str(encrypted, "");
	ofs.close();

}

  

128 字节的 keyfile,里面只用到了16字节的两个 FILETIME 时间? 还是我漏了什么?

免责声明:文章转载自《XueTr(PC Hunter) pro 注册分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇机器学习基础——带你实战朴素贝叶斯模型文本分类revit添加族参数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

设计模式之禅之设计模式-建造者模式

一:建造者模式的定义        --->建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示        ● Product产品类                通常是实现了模板方法模式,也就是有模板方法和基本方法,这个参考模板方法模式。例子中的Ben...

基于总变差模型的纹理图像中图像主结构的提取方法。

2019.12.16 日更正:本文最后有提及本算法不合适C语言实现,但是可在【算法随记六】一段Matlab版本的Total Variation(TV)去噪算法的C语言翻译一文中找到替代算法。 本文主要由Structure Extraction from Texture via Relative Total Variation一文中的内容翻译而来,作者又是香...

[.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型)

[.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 策略模式的组成:  —抽象策略角色: 策略类,通常由一个接口或者抽象类实现。  —具体策略角色:包装了相关的算法和行为...

openssl之EVP系列之12---EVP_Seal系列函数介绍

openssl之EVP系列之12---EVP_Seal系列函数介绍---依据openssl doc/crypto/EVP_SealInit.pod翻译和自己的理解写成(作者:DragonKing, Mail:wzhah@263.net ,公布于:http://openssl.126.com之openssl专业论坛,版本号:openssl-0.9.7)改系...

从BF算法到kmp算法详解

正文索引 一、KMP介绍 二、例子:子串匹配母串 1.BF算法的解决方法 三、kmp算法的实现 (1)为什么已经有BF算法了还要有KMP算法呢? (2)发明的算法基本思想 (3)具体实现 一、KMP介绍 KMP算法是一种改进的字符串匹配算法(有BF算法改进而来,BF算法是暴利搜索匹配的方式,而KMP则是对BF算法的回溯过程进行改进,从而大幅度降低了时间复...

字符串匹配算法

一、简介 文本信息可以说是迄今为止最主要的一种信息交换手段,而作为文本处理中的一个重要领域——字符串匹配,就是我们今天要说的话题。(原文还特意提及文本数据数量每18个月翻一番,以此论证算法必须要是高效的。不过我注意到摩尔定律也是18个月翻番,这正说明数据的增长是紧紧跟随处理速度的,因此越是使用高效的算法,将来待处理的数据就会越多。这也提示屏幕前的各位,代码...