吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 10236|回复: 20

[转载技术] XueTr(PC Hunter) pro 注册分析 —— by:aj3423

  [复制链接]
PS_URINE 发表于 2015-1-30 12:39 | 显示全部楼层 |阅读模式

本帖最后由 PS_URINE 于 2015-1-30 12:41 编辑

原文防盗链地址: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更方便定位(下面代码就是这样)
往下走,来到算法部分,首先是
16155704-6d098b9b154d4a5f8090bd1a6296c879.jpg
3个参数的函数 (??, "ShouJiErShiSiShi", 16), 预测是给算法准备key,因为好多算法都是这样,先set_key,然后再调用encrypt/decrypt,
紧接着下一行
16155924-9e75cc78349b42f584e6eb61126a8fc9.jpg
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 中有用到
    16161937-99287e38d16547c88b2bea1bcfbc9f40.jpg
3. 输入和输出有固定模式,因为输入是1234567890..这样,所以图上5行是一个循环, 而输出也是5行一个循环,
16163745-e44a9c2a62d4434fa27073c1e8b98fe1.jpg
aes的ecb模式就是,google下可以搜到:
16163759-00ff0b66443c44f695dab7acff72b48f.jpg
4. 作者肯定是自己encrypt,然后在程序里在decrypt

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


最后,写段代码生成 keyfile:

  1. <font face="微软雅黑" size="2">#include <windows.h>
  2. #include <string>
  3. #include <iostream>
  4. #include <fstream>
  5. using namespace std;

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

  10. template<class ByteT>
  11. string hex2str(ByteT* hex, int len, const string& delim=" ") {
  12.     if(len == 0) return "";
  13.     string s;
  14.     char x[4];
  15.     for(int i=0; i<len; i++) {
  16.         sprintf_s(x, 4, "%02X", ((unsigned char*)hex)[i]);
  17.         s += x;
  18.         if(i != len-1) s += delim; // append delim if not the last char
  19.     }
  20.     return s;
  21. }
  22. string hex2str(const string& hex, const string& delim=" ") {
  23.     return hex2str(hex.c_str(), hex.length(), delim);
  24. }

  25. string aes_encrypt(string& plain, string& key) {
  26.     ECB_Mode< AES >::Encryption e((byte*)key.c_str(), key.length());
  27.     string cipher;
  28.     StringSource ss(plain, true,
  29.         new StreamTransformationFilter( e,
  30.             new StringSink( cipher ),
  31.             StreamTransformationFilter::NO_PADDING) );
  32.     return cipher;
  33. }


  34. #pragma pack(push, 1)
  35. struct reg {
  36.     byte unknown_1[80];
  37.     FILETIME ft_beg;
  38.     FILETIME ft_end;
  39.     byte unknown[32];
  40. };
  41. #pragma pack(pop)

  42. int main() {
  43.     string key = "ShouJiErShiSiShi";

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

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

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


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

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

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

  63. }</font>
复制代码
128 字节的 keyfile,里面只用到了16字节的两个 FILETIME 时间? 还是我漏了什么?



评分

参与人数 22HB +28 THX +16 收起 理由
lies + 1
花盗睡鼠 + 2 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
虚心学习 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
24567 + 2
Jawon + 2
一路走来不容易 + 1
Soul1999 + 1
sjtkxy + 1 + 1
美好映像 + 2 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
boot + 1
消逝的过去 + 1
temp + 1
叶落花开 + 2
jaunic + 1
hnymsh + 2
毛毛月 + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
雨季 + 2 + 1 评分=感恩!简单却充满爱!感谢您的作品!!.
ningzhonghui + 1 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
逍遥枷锁 + 3 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
Desire + 2 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
zxy20014 + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
zx2cwf + 3 + 1 好人有好报!你的热心我永远不忘!谢谢!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
520Kelly 发表于 2015-1-30 12:48 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| PS_URINE 发表于 2015-1-30 12:49 | 显示全部楼层

520Kelly 发表于 2015-1-30 12:48
专业版貌似没啥更强大啊

专业版就是个CM
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
520Kelly 发表于 2015-1-30 12:50 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
zx2cwf 发表于 2015-1-30 13:55 | 显示全部楼层

PC Hunter 确实是好东西哎  杀毒必备
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
gmh5225 发表于 2015-1-30 14:57 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
叶落 发表于 2015-1-30 16:00 | 显示全部楼层

为什么我没用的。。。打开还是白板
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| PS_URINE 发表于 2015-1-30 18:30 | 显示全部楼层

叶落 发表于 2015-1-30 16:00
为什么我没用的。。。打开还是白板

我也白板233333
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
叶落 发表于 2015-1-30 22:05 | 显示全部楼层


这样不好玩。。。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
ningzhonghui 发表于 2015-1-30 22:53 | 显示全部楼层

好深0,表示看得一头雾水...还是谢谢大牛分享讲解...
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表