XueTr(PC Hunter) pro 注册分析

21 篇文章 1 订阅

原文防盗链地址: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更方便定位(下面代码就是这样)

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

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

紧接着下一行

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 中有用到

    

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

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

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

 

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

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

最后,写段代码生成 keyfile:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#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 时间? 还是我漏了什么?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PCHunter 是一款功能强大的系统安全信息查看工具,在 PCHunter 中您不但可以深入的查看系统各类信息,还可以很方便的揪出电脑的木马病毒,同时还可以在线修复各种系统问题。由于本工具大量使用 Windows 内核技术,尤其是为了做一些检测而使用了些 Windows 未公开的内核数据结构,虽然我们一直尽力避免或减小这给本软件可能带来的稳定性上的影响,但我们无法保证这对本软件稳定性绝对没有影响。 Windows 系统信息查看工具 PCHunter 中文版Windows 系统信息查看工具 PCHunter 中文版 PCHunter 软件的功能 1、进程、线程、进程模块、进程窗口、进程内存信息查看,杀进程、杀线程、卸载模块等功能 2、内核驱动模块查看,支持内核驱动模块的内存拷贝 3、SSDT、Shadow SSDT、FSD、KBD、TCPIP、Nsiproxy、Tdx、Classpnp、Atapi、Acpi、SCSI、IDT、GDT信息查看,并能检测和恢复ssdt hook和inline hook 4、CreateProcess、CreateThread、LoadImage、CmpCallback、BugCheckCallback、Shutdown、Lego等近20多种Notify Routine信息查看,并支持对这些Notify Routine的删除 5、端口信息查看,目前不支持2000系统 6、查看消息钩子 7、内核模块的iat、eat、inline hook、patches检测和恢复 8、磁盘、卷、键盘、网络层等过滤驱动检测,并支持删除 9、注册表编辑 10、进程iat、eat、inline hook、patches检测和恢复 11、文件系统查看,支持基本的文件操作 12、查看(编辑)IE插件、SPI、启动项、服务、Hosts文件、映像劫持、文件关联、系统防火墙规则、IME 13、ObjectType Hook检测和恢复 14、DPC定时器检测和删除 15、MBR Rootkit检测和修复 16、内核对象劫持检测 17、WorkerThread枚举 18、Ndis中一些回调信息枚举 19、硬件调试寄存器、调试相关API检测 20、枚举SFilter/Flgmgr的回调 21、系统用户名检测
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值