某录。。逆向分析
本帖最后由 冥界3大法王 于 2023-12-26 16:36 编辑进入注册界面。 粘个垃圾注册码
Name:冥界3大法王
Key: TRD6.EZ6L.5CBF.2GKW.H3EW.78EM.4TQM.9J4L.WMJ9.3M5G.EABE.2F7A.MAFG.ULSY.U2SA
从中我们得知:注册码TRD6开头
字串参考搜索过滤下
左顶1处只有1条,右下处双击后只有4条
先看到第4条
我们在这里!
有经验的论坛先生一眼就知道这是获得不同的用户授权,其中还有TR50(旧版注册码,具体看下面的伪代码)
因为一共有4种: 普通版、专业版、视频专业版、开发者版
我们下载到的就是最高版本了。
0050f4da if (*(ecx_10 - 0xc) != 0x4a || (*(ecx_10 - 0xc) == 0x4a && eax_7 == 0))
0050f5be sub_54fb97(&var_2c, 0xf49b)
0050f5c5 var_8.b = 3
0050f5d2 void var_18
0050f5d2 sub_4061fb(&var_1c, &var_18, 4)
0050f5d7 var_8.b = 4
0050f5de void* var_14
0050f5de sub_40f73b(&var_14)
0050f5e3 var_8.b = 5
0050f5ea sub_4133aa(&var_18)
0050f5ef char* var_4c_9 = var_1c
0050f5f7 char* var_50_6 = var_20
0050f606 sub_40785c(arg1, data_9c4f44 + 0x3650, 0, u"InvReg Name=[%s] Key=[%s]")
0050f61b var_8.b = 6
0050f624 void var_30
0050f624 int32_t eax_19 = sub_405dd6(&var_18, *sub_408c47(&var_30, "TR30"))
0050f62b char ebx_2 = (neg.d(eax_19)).b
0050f631 var_8.b = 5
0050f638 sub_40f765(&var_30)
0050f63f if (sbb.b(ebx_2, ebx_2, eax_19 != 0) != 0xff)
0050f651 var_8.b = 7
0050f659 sub_406826(&var_14, sub_54fb97(&var_30, 0x84))
0050f65e var_8.b = 5
0050f665 sub_40f765(&var_30)
0050f677 var_8.b = 8
0050f680 int32_t eax_22 = sub_405dd6(&var_18, *sub_408c47(&var_30, "TR50"))
0050f687 char ebx_4 = (neg.d(eax_22)).b
0050f68d var_8.b = 5
0050f694 sub_40f765(&var_30)
0050f69b if (sbb.b(ebx_4, ebx_4, eax_22 != 0) != 0xff)
0050f6ad var_8.b = 9
0050f6b5 sub_406826(&var_14, sub_54fb97(&var_30, 0xf824))
0050f6ba var_8.b = 5
0050f6c1 sub_40f765(&var_30)
0050f6d3 var_8.b = 0xa
0050f6dc int32_t eax_25 = sub_405dd6(&var_18, *sub_408c47(&var_30, "TR60"))
0050f6e3 char ebx_6 = (neg.d(eax_25)).b
0050f6e9 var_8.b = 5
0050f6f0 sub_40f765(&var_30)
0050f6fc if (sbb.b(ebx_6, ebx_6, eax_25 != 0) != 0xff)
0050f70a var_8.b = 0xb
0050f712 sub_406826(&var_14, sub_54fb97(&var_30, 0xf499))
0050f717 var_8.b = 5
0050f71e sub_40f765(&var_30)
0050f730 var_8.b = 0xc
0050f739 int32_t eax_28 = sub_405dd6(&var_18, *sub_408c47(&var_30, "TRJ0"))
0050f740 char ebx_8 = (neg.d(eax_28)).b
0050f746 var_8.b = 5
0050f74d sub_40f765(&var_30)
0050f754 if (sbb.b(ebx_8, ebx_8, eax_28 != 0) != 0xff)
0050f766 var_8.b = 0xd
0050f76e sub_406826(&var_14, sub_54fb97(&var_30, 0xf775))
0050f773 var_8.b = 5
0050f77a sub_40f765(&var_30)
0050f78c var_8.b = 0xe
0050f795 int32_t eax_31 = sub_405dd6(&var_18, *sub_408c47(&var_30, "TRJ5"))
0050f79c char ebx_10 = (neg.d(eax_31)).b
0050f7a2 var_8.b = 5
0050f7a9 sub_40f765(&var_30)
0050f7b0 if (sbb.b(ebx_10, ebx_10, eax_31 != 0) != 0xff)
0050f7c2 var_8.b = 0xf
0050f7ca sub_406826(&var_14, sub_54fb97(&var_30, 0xf52f))
0050f7cf var_8.b = 5
0050f7d6 sub_40f765(&var_30)
0050f7e8 var_8.b = 0x10
0050f7f1 int32_t eax_34 = sub_405dd6(&var_18, *sub_408c47(&var_30, "TRSC"))
0050f7f8 char ebx_12 = (neg.d(eax_34)).b
0050f7fe var_8.b = 5
0050f805 sub_40f765(&var_30)
0050f80c if (sbb.b(ebx_12, ebx_12, eax_34 != 0) != 0xff)
0050f81a var_8.b = 0x11
0050f822 sub_406826(&var_14, sub_54fb97(&var_30, 0xf499))
0050f827 var_8.b = 5
0050f82e sub_40f765(&var_30)
0050f840 var_8.b = 0x12
0050f849 int32_t eax_37 = sub_405dd6(&var_18, *sub_408c47(&var_30, "TRP4"))
0050f850 char ebx_14 = (neg.d(eax_37)).b
0050f856 var_8.b = 5
0050f85d sub_40f765(&var_30)
0050f864 if (sbb.b(ebx_14, ebx_14, eax_37 != 0) != 0xff)
0050f876 var_8.b = 0x13
0050f87e sub_406826(&var_14, sub_54fb97(&var_30, 0xf825))
0050f883 var_8.b = 5
0050f88a sub_40f765(&var_30)
0050f89c var_8.b = 0x14
0050f8a5 int32_t eax_40 = sub_405dd6(&var_18, *sub_408c47(&var_30, "TRP6"))
0050f8ac char ebx_16 = (neg.d(eax_40)).b
0050f8b2 var_8.b = 5
0050f8b9 sub_40f765(&var_30)
0050f8c5 if (sbb.b(ebx_16, ebx_16, eax_40 != 0) != 0xff)
0050f8d3 var_8.b = 0x15
0050f8db sub_406826(&var_14, sub_54fb97(&var_30, 0xf49a))
0050f8e0 var_8.b = 5
0050f8e7 sub_40f765(&var_30)
0050f8fa var_8.b = 0x16
0050f903 int32_t eax_43 = sub_405dd6(&var_18, *sub_408c47(&var_30, "TRPC"))
0050f90a char ebx_18 = (neg.d(eax_43)).b
0050f910 var_8.b = 5
0050f917 sub_40f765(&var_30)
0050f91e if (sbb.b(ebx_18, ebx_18, eax_43 != 0) != 0xff)
0050f92c var_8.b = 0x17
0050f934 sub_406826(&var_14, sub_54fb97(&var_30, 0xf49a))
0050f939 var_8.b = 5
0050f940 sub_40f765(&var_30)
0050f952 var_8.b = 0x18
0050f95b int32_t eax_46 = sub_405dd6(&var_18, *sub_408c47(&var_30, "TRD3"))
0050f962 char ebx_20 = (neg.d(eax_46)).b
0050f968 var_8.b = 5
0050f96f sub_40f765(&var_30)
0050f976 if (sbb.b(ebx_20, ebx_20, eax_46 != 0) != 0xff)
0050f988 var_8.b = 0x19
0050f990 sub_406826(&var_14, sub_54fb97(&var_30, 0xf502))
0050f995 var_8.b = 5
0050f99c sub_40f765(&var_30)
0050f9ae var_8.b = 0x1a
0050f9b7 int32_t eax_49 = sub_405dd6(&var_18, *sub_408c47(&var_30, "TRD4"))
0050f9be char ebx_22 = (neg.d(eax_49)).b
0050f9c4 var_8.b = 5
0050f9cb sub_40f765(&var_30)
0050f9d2 if (sbb.b(ebx_22, ebx_22, eax_49 != 0) != 0xff)
0050f9e4 var_8.b = 0x1b
0050f9ec sub_406826(&var_14, sub_54fb97(&var_30, 0xf826))
0050f9f1 var_8.b = 5
0050f9f8 sub_40f765(&var_30)
0050fa0a var_8.b = 0x1c
0050fa13 int32_t eax_52 = sub_405dd6(&var_18, *sub_408c47(&var_30, "TRD6"))
0050fa1a char ebx_24 = (neg.d(eax_52)).b
0050fa20 var_8.b = 5
0050fa27 sub_40f765(&var_30)
0050fa2e if (sbb.b(ebx_24, ebx_24, eax_52 != 0) != 0xff)
0050fa40 var_8.b = 0x1d
0050fa48 sub_406826(&var_14, sub_54fb97(&var_30, 0xf49b))
0050fa4d var_8.b = 5
0050fa54 sub_40f765(&var_30)
0050fa66 var_8.b = 0x1e
0050fa6f int32_t eax_55 = sub_405dd6(&var_18, *sub_408c47(&var_30, "TAV6"))
0050fa76 char ebx_26 = (neg.d(eax_55)).b
0050fa7c var_8.b = 5
0050fa83 sub_40f765(&var_30)
0050fa8a if (sbb.b(ebx_26, ebx_26, eax_55 != 0) != 0xff)
0050fa9c var_8.b = 0x1f
0050faa4 sub_406826(&var_14, sub_54fb97(&var_30, 0x123))
0050faa9 var_8.b = 5
0050fab0 sub_40f765(&var_30)
0050fac2 var_8.b = 0x20
0050facb int32_t var_24_1 = 1
0050fad2 void var_34
0050fad2 int32_t eax_58 = sub_405dd6(&var_18, *sub_408c47(&var_34, "TRSC"))
0050fad9 int32_t eax_60
0050fad9 if (eax_58 != 0)
0050fae4 int32_t var_8_1 = 0x21
0050faf0 var_24_1 = 3
0050faf7 eax_60 = sub_405dd6(&var_18, *sub_408c47(&var_30, "TRPC"))
0050fafe if (eax_60 != 0)
0050fb00 ebx_26 = 0
0050fafe if (eax_58 == 0 || (eax_58 != 0 && eax_60 == 0))
0050fb04 ebx_26 = 1
0050fb06 int32_t var_8_2 = 0x20
0050fb11 if ((var_24_1.b & 2) != 0)
0050fb13 var_24_1 = var_24_1 & 0xfffffffd
0050fb1a sub_40f765(&var_30)
0050fb1f var_8 = 5
0050fb2a if ((var_24_1.b & 1) != 0)
0050fb2c int32_t var_24_2 = var_24_1 & 0xfffffffe
0050fb33 sub_40f765(&var_34)
0050fb3a if (ebx_26 != 0)
0050fb44 sub_40697b(&var_14, u" (Chn)")
0050fb51 int32_t var_5c_4
0050fb51 int32_t eax_62
0050fb51 if (*(var_14 - 0xc) != 0)
0050fb69 eax_62 = sub_405dd6(&var_14, var_2c)
0050fb70 if (eax_62 == 0)
0050fbac int32_t var_4c_41 = 0
0050fbad int32_t var_50_22 = 0x45
0050fbaf int32_t var_54_2 = 0
0050fbb0 int32_t var_58_5 = 0x40000000
0050fbb5 var_5c_4 = 0xef20
0050fb72 else
0050fb72 int16_t* var_4c_40 = var_2c
0050fb78 void* var_50_21 = var_14
0050fb86 var_8.b = 0x22
0050fb96 sub_576406(*sub_54fb97(&var_34, 0xf4f7), 0x40000000, 0, 0x45, 0)
0050fb9e var_8.b = 5
0050fba5 sub_40f765(&var_34)
0050fb53 else
0050fb53 int32_t var_4c_38 = 0
0050fb54 int32_t var_50_20 = 0x45
0050fb56 int32_t var_54_1 = 0
0050fb57 int32_t var_58_3 = 0x40000000
0050fb5c var_5c_4 = 0xf65f
0050fb70 if (*(var_14 - 0xc) == 0 || (*(var_14 - 0xc) != 0 && eax_62 == 0))
0050fbba sub_576e7d(var_5c_4, 0x40000000, 0, 0x45, 0)
0050fbd1 sub_673994(sub_673699(arg1, 0x3fe))
0050fbd6 var_8.b = 4
0050fbdd sub_40f765(&var_14)
0050fbe2 var_8.b = 3
0050fbe9 sub_40f765(&var_18)
0050fbee var_8.b = 2
0050fbf5 sub_40f765(&var_2c)
0050f488 else
0050f490 if (IsWindow(hWnd: arg1) != 0)
0050f4a1 SetFocus(hWnd: GetDlgItem(hDlg: arg1, nIDDlgItem: 0x3fe))
0050f4b5 sub_576e7d(0xef1f, 0x20000000, 0, 0x45, 0)
0050fbfa var_8.b = 1
0050fc01 sub_40f765(&var_28)
0050fc06 var_8.b = 0
0050fc0d sub_40f765(&var_1c)
0050fc12 int32_t var_8_3 = 0xffffffff
0050fc19 int32_t* eax_66 = sub_40f765(&var_20)
006a30f4 *fsbase = var_10
006a3103 void* const __saved_ebp_1 = &data_50fc23
0050fc23 return eax_66
再来看第1处
代码不长
F5转成汇编指令
似乎只要返回1 ,就是注册版啦~~
那我们就改次试下呗
点OK
似乎看起来很美好!{:301_986:}
但是!你录制一个在线的音频就会发现只要到达1分03秒就会插入一段噪音。即便你使用的是老外的破解补丁(修改公钥的)
或者是8.2注册码注册成功的,一样一样的,到点它就插,噪音依旧在,它肯放过谁?不要迷信老外有多牛,其实水货骗子也不少。
https://static.52pojie.cn/static/image/hrline/2.gif
为什么会这样呢? 因为修改的重点没有找到地方!
因为安装了虚拟的声卡,所以驱动才是工作的核心!So。。。
接下来,继续猜,继续看:
你就会发现要修改的是驱动文件,和上面的步奏一样,定位过去:
🛑0002e428{
0002e453 sub_11014(&arg_8, " …", 0x67, 0x23c);
0002e458 void* rdx = *(uint64_t*)((char*)arg1 + 0xb8);
0002e45f int64_t* rsi = *(uint64_t*)((char*)arg1 + 0x18);
0002e467 uint64_t rdi = ((uint64_t)*(uint32_t*)((char*)rdx + 0x10));
0002e46a int32_t r8 = *(uint32_t*)((char*)rdx + 8);
0002e46e void* r12 = *(uint64_t*)(*(uint64_t*)((char*)rdx + 0x30) + 0x18);
0002e472 int32_t rax_1 = *(uint32_t*)((char*)rdx + 0x18);
0002e475 int64_t r9 = *(uint64_t*)((char*)rdx + 0x20);
0002e479 int32_t rbp = 0;
0002e480 int32_t rbx = -0x3ffffff3;
0002e487 int64_t i_5 = 2;
0002e48b uint64_t rax_31;
0002e48b int32_t var_80;
0002e48b char const* const var_78;
0002e48b void* var_70;
0002e48b void* var_68;
0002e48b void* const var_60;
0002e48b void* var_58;
0002e48b int32_t rax_8;
0002e48b if (rax_1 > 0x22242c)
0002e485 {
0002e62d if (rax_1 != 0x222432)
0002e628 {
0002e636 if (rax_1 != 0x222434)
0002e633 {
0002e63f if (rax_1 == 0x222438)
0002e63c {
0002e860 if (rdi != 0)
0002e85e {
0002e860 goto label_2ea42;
0002e860 }
0002e86a if (r8 != 8)
0002e866 {
0002e86a goto label_2ea42;
0002e86a }
0002e876 sub_188cc(r12, rsi);
0002e87b rbp = ((int32_t)(rdi + 8));
0002e87e goto label_2e6bf;
0002e87e }
0002e648 if (rax_1 == 0x222440)
0002e645 {
0002e747 if (rdi < 0xa)
0002e744 {
0002e747 goto label_2ea42;
0002e747 }
0002e750 if (r8 != 0)
0002e74d {
0002e750 goto label_2ea42;
0002e750 }
0002e756 int64_t var_88_1 = 0;
0002e767 KeWaitForSingleObject(&data_263f0, 0);
0002e781 sub_125e0(&data_23140, " RegKey: ", rsi, rdi);
0002e786 uint64_t r11_1 = ((uint64_t)*(uint32_t*)rsi);
0002e78c if (r11_1 != 0)
0002e789 {
0002e792 uint64_t rdx_5 = ((uint64_t)*(uint32_t*)((char*)rsi + 4));
0002e797 if (rdx_5 == 0)
0002e795 {
0002e797 goto label_2e853;
0002e797 }
0002e7a5 if (rdi != ((rdx_5 + r11_1) + 8))
0002e79d {
0002e7a5 goto label_2e853;
0002e7a5 }
0002e7b4 if (*(uint8_t*)((((uint64_t)((int32_t)(r11_1 - 1))) + rsi) + 8) != 0)
0002e7af {
0002e7b4 goto label_2e853;
0002e7b4 }
0002e7c4 if (*(uint8_t*)((((uint64_t)((int32_t)((rdx_5 + r11_1) - 1))) + rsi) + 8) != 0)
0002e7bf {
0002e7c4 goto label_2e853;
0002e7c4 }
0002e7da var_58 = &data_264d8;
0002e7ed var_60 = &data_21810;
0002e7f2 var_68 = ((r11_1 + rsi) + 8);
0002e7f7 var_70 = &rsi;
0002e811 var_78 = "TRD6";
0002e820 var_80 = "62986078307099653364299865171380…";
0002e82c char const* const var_88_2 = "17925312521913220660404051102511…";
0002e831 sub_337a0(2, "54445178707350154153446595860944…", "30511340066003777712015025752116…");
0002e83f KeReleaseMutex(&data_263f0, 0);
0002e845 goto label_2e6bf;
0002e845 }
0002e853 label_2e853:
0002e853 KeReleaseMutex(&data_263f0, 0);
0002e859 goto label_2ea42;
0002e859 }
0002e651 if (rax_1 != 0x22244c)
0002e64e {
0002e65c if (rax_1 != 0x222660)
0002e657 {
0002e661 if (rax_1 != 0x222667)
0002e65e {
0002e661 goto label_2ea42;
0002e661 }
0002e66e sub_15e18("Test started", rdx);
0002e68c sub_11014(&arg_18, " …", 0x67, 0x6c);
0002e691 int64_t* rdx_3 = arg_18;
0002e69c if (rdx_3 != 0)
0002e699 {
0002e6a1 *(uint8_t*)(*(uint64_t*)rdx_3 + 0x18) = 0x2d;
0002e6a5 rdx_3[-1] = (rdx_3[-1] - 1);
0002e6aa void* rax_16 = rdx_3[-2];
0002e6ae *(uint32_t*)((char*)rax_16 + 0xc) = (*(uint32_t*)((char*)rax_16 + 0xc) - 1);
0002e6ae }
0002e6ba sub_15e18("Test ended", rdx_3);
0002e6ba goto label_2e6bf;
0002e6ba }
0002e6d2 if ((rdi == 0x10 && r8 == 0))
0002e6cf {
0002e6d8 int64_t rcx_6 = *(uint64_t*)rsi;
0002e6e2 bool c_1 = rcx_6 < 0x41f263767c9dfd97;
0002e6e5 int32_t rax_17;
0002e6e5 int64_t rcx_7;
0002e6e5 if (rcx_6 == 0x41f263767c9dfd97)
0002e6e2 {
0002e6e7 rcx_7 = rsi;
0002e6eb c_1 = rcx_7 < 0x3959e61728f9c394;
0002e6ef if (rcx_7 == 0x3959e61728f9c394)
0002e6eb {
0002e6f1 rax_17 = 0;
0002e6f1 }
0002e6e5 }
0002e6ef if ((rcx_6 != 0x41f263767c9dfd97 || (rcx_6 == 0x41f263767c9dfd97 && rcx_7 != 0x3959e61728f9c394)))
0002e6eb {
⋯0002e6f5 bool c_2 = /* bool c_2 = unimplemented{sbb eax, eax} */;
0002e6f7 rax_17 = ((&data_216a0 - &data_216a0) - 0xffffffff);
0002e6f7 }
0002e6fc if (rax_17 == 0)
0002e6fa {
0002e702 sub_16f64();
0002e702 }
0002e6fa }
0002e6c6 goto label_2ea42;
0002e6c6 }
0002e718 if ((rdi == 0 && r8 > 1))
0002e714 {
0002e728 sub_12b1c(&data_25cd8, rsi);
0002e72d int64_t i = -1;
0002e733 int64_t* rdi_1 = rsi;
0002e736 rbx = 0;
0002e738 while (i != 0)
0002e738 {
0002e738 bool cond:5_1 = 0 != *(uint8_t*)rdi_1;
0002e738 rdi_1 = ((char*)rdi_1 + 1);
0002e738 i = (i - 1);
0002e738 if ((!cond:5_1))
0002e738 {
0002e738 break;
0002e738 }
0002e738 }
0002e73d rbp = ((int32_t)(!i));
0002e73a }
0002e70c goto label_2ea42;
0002e70c }
0002e88f if ((rdi == 0 && r8 == 4))
0002e88b {
0002e8a5 rbx = sub_18620(r12, &arg_20);
0002e8b0 *(uint32_t*)rsi = arg_20;
0002e8b2 if (rbx == 0)
0002e8ae {
0002e8b8 rbp = ((int32_t)(rdi + 4));
0002e8b8 }
0002e8ae }
0002e883 goto label_2ea42;
0002e883 }
0002e8c2 if (rdi != 0)
0002e8c0 {
0002e8c2 goto label_2ea42;
0002e8c2 }
0002e8d0 if (r8 != 0x2a980)
0002e8cd {
0002e8d0 goto label_2ea42;
0002e8d0 }
0002e8d6 void* rcx_12 = *(uint64_t*)((char*)arg1 + 8);
0002e8de int64_t rax_24;
0002e8de if ((*(uint8_t*)((char*)rcx_12 + 0xa) & 5) == 0)
0002e8da {
0002e8e6 var_80 = 0;
0002e8f7 rax_24 = MmMapLockedPagesSpecifyCache(rcx_12, 0, 1, 0, 0, 0);
0002e8e6 }
0002e8e0 else
0002e8e0 {
0002e8e0 rax_24 = *(uint64_t*)((char*)rcx_12 + 0x18);
0002e8e0 }
0002e900 if (rax_24 != 0)
0002e8fd {
0002ea0c void* rcx_20 = *(uint64_t*)((char*)arg1 + 8);
0002ea14 int64_t rax_32;
0002ea14 if ((*(uint8_t*)((char*)rcx_20 + 0xa) & 5) == 0)
0002ea10 {
0002ea1c var_80 = 0;
0002ea2d rax_32 = MmMapLockedPagesSpecifyCache(rcx_20, 0, 1, 0, 0, 0);
0002ea1c }
0002ea16 else
0002ea16 {
0002ea16 rax_32 = *(uint64_t*)((char*)rcx_20 + 0x18);
0002ea16 }
0002ea36 rax_8 = sub_180d8(rax_32);
0002ea3d if (rax_8 == 0)
0002ea3b {
0002ea3d rbp = 0x2a980;
0002ea3d }
0002ea3b goto label_2ea40;
0002ea3b }
0002e90a int32_t rcx_13 = 0;
0002e90c uint64_t i_4 = ((uint64_t)*(uint32_t*)(*(uint64_t*)((char*)arg1 + 8) + 0x28));
0002e912 uint64_t i_1 = (!i_4);
0002e918 if (i_1 != 0)
0002e915 {
0002e921 do
0002e921 {
0002e91a rcx_13 = (rcx_13 + 1);
0002e91d i_1 = (i_1 >> 4);
0002e91d } while (i_1 != 0);
0002e91d }
0002e925 int32_t r8_4 = 1;
0002e935 if (rcx_13 != 0)
0002e923 {
0002e935 r8_4 = rcx_13;
0002e935 }
0002e940 void* const rbx_1;
0002e940 if (i_4 >= 0x1000000000000000)
0002e93d {
0002e942 rbx_1 = &data_1d750;
0002e942 }
0002e94b else
0002e94b {
0002e94b int32_t rax_27 = 0;
0002e950 uint64_t i_2 = i_4;
0002e953 if (i_4 != 0)
0002e94d {
0002e95c do
0002e95c {
0002e955 rax_27 = (rax_27 + 1);
0002e958 i_2 = (i_2 >> 4);
0002e958 } while (i_2 != 0);
0002e958 }
0002e960 uint64_t rcx_14 = 1;
0002e965 rbx_1 = &data_1d750;
0002e96c if (rax_27 != 0)
0002e95e {
0002e96c rcx_14 = ((uint64_t)rax_27);
0002e96c }
0002e987 if ((i_4 >> ((int8_t)((rcx_14 << 2) + -fffffffffffffffc))) == 0xf)
0002e983 {
0002e987 rbx_1 = &data_1d760;
0002e987 }
0002e983 }
0002e9a4 uint64_t i_6 = (((1 << ((int8_t)((r8_4 + 1) << 2))) - 1) & i_4);
0002e9ab if ((r8_4 + 1) >= 0x10)
0002e9a7 {
0002e9ab i_6 = i_4;
0002e9ab }
0002e9af sub_15ecc("c:\temp\tr_src\tr\drvwdm\totrec7…");
0002e9b4 uint64_t i_7 = i_6;
0002e9d1 var_80 = rbx_1;
0002e9de sub_15e18("!!! Err %X%s in %s %u, %s%IX", 0xc000009a);
0002e9e3 int64_t* rdx_9 = arg_8;
0002e9ee if (rdx_9 != 0)
0002e9eb {
0002e9f3 *(uint8_t*)(*(uint64_t*)rdx_9 + 0x18) = 0x2d;
0002e9f7 rdx_9[-1] = (rdx_9[-1] - 1);
0002e9fc void* rcx_19 = rdx_9[-2];
0002ea00 *(uint32_t*)((char*)rcx_19 + 0xc) = (*(uint32_t*)((char*)rcx_19 + 0xc) - 1);
0002ea00 }
0002ea05 rax_31 = 0xc000009a;
0002ea05 }
0002e491 else
0002e491 {
0002e491 if (rax_1 == 0x22242c)
0002e485 {
0002e614 if (rdi > 0x3fe)
0002e60e {
0002e614 goto label_2ea42;
0002e614 }
0002e61d if (r8 != 0)
0002e61a {
0002e61d goto label_2ea42;
0002e61d }
0002e61d goto label_2e6bf;
0002e61d }
0002e49c if (rax_1 != 0x222407)
0002e497 {
0002e4a5 if (rax_1 == 0x222417)
0002e4a2 {
0002e596 if (rdi != 0)
0002e594 {
0002e596 goto label_2ea42;
0002e596 }
0002e59f if (r8 != 0)
0002e59c {
0002e59f goto label_2ea42;
0002e59f }
0002e5a5 data_264ed = 1;
0002e5ac goto label_2e6bf;
0002e5ac }
0002e4ae if (rax_1 == 0x22241b)
0002e4ab {
0002e579 if (rdi != 0)
0002e577 {
0002e579 goto label_2ea42;
0002e579 }
0002e582 if (r8 != 0)
0002e57f {
0002e582 goto label_2ea42;
0002e582 }
0002e588 data_264ed = 0;
0002e58f goto label_2e6bf;
0002e58f }
0002e4b7 if (rax_1 == 0x22241f)
0002e4b4 {
0002e533 if (rdi < 0x80000)
0002e52d {
0002e533 goto label_2ea42;
0002e533 }
0002e53f if ((rdi & 0x1fff) != 0)
0002e539 {
0002e53f goto label_2ea42;
0002e53f }
0002e548 if (r9 == 0)
0002e545 {
0002e548 goto label_2ea42;
0002e548 }
0002e555 if ((r9 & 0xfff) != 0)
0002e54e {
0002e555 goto label_2ea42;
0002e555 }
0002e55e if (r8 != 0)
0002e55b {
0002e55e goto label_2ea42;
0002e55e }
0002e56d rax_8 = sub_17c8c(r12, r9, rdi);
0002e572 goto label_2ea40;
0002e572 }
0002e4bc if (rax_1 == 0x222423)
0002e4b9 {
0002e511 if (rdi != 0)
0002e50f {
0002e511 goto label_2ea42;
0002e511 }
0002e51a if (r8 != 0)
0002e517 {
0002e51a goto label_2ea42;
0002e51a }
0002e523 sub_17fc0(r12);
0002e528 goto label_2e6bf;
0002e528 }
0002e4c1 if (rax_1 == 0x222424)
0002e4be {
0002e4ed if (r8 != 0)
0002e4ea {
0002e4ed goto label_2ea42;
0002e4ed }
0002e4f9 if (rdi != 0x55c)
0002e4f3 {
0002e4f9 goto label_2ea42;
0002e4f9 }
0002e505 rax_8 = sub_174c0(r12, rsi);
0002ea40 label_2ea40:
0002ea40 rbx = rax_8;
0002ea40 goto label_2ea42;
0002ea40 }
0002e4c6 if (rax_1 != 0x22242b)
0002e4c3 {
0002e4c6 goto label_2ea42;
0002e4c6 }
0002e4ce if (rdi != 0)
0002e4cc {
0002e4ce goto label_2ea42;
0002e4ce }
0002e4d7 if (r8 != 0)
0002e4d4 {
0002e4d7 goto label_2ea42;
0002e4d7 }
0002e4e0 sub_17b88(r12);
0002e4e5 goto label_2e6bf;
0002e4e5 }
0002e5b3 if (rdi != 0)
0002e5b1 {
0002e5b3 goto label_2ea42;
0002e5b3 }
0002e5bc if (r8 != 0)
0002e5b9 {
0002e5bc goto label_2ea42;
0002e5bc }
0002e5cb KeSetEvent(&data_251b8, 0);
0002e5dd arg_10 = -0x2710;
0002e5e9 KeDelayExecutionThread(0, 0, &arg_10);
0002e5ef data_251e4 = (data_251e4 + 1);
0002e603 KeSetEvent(&data_251b8, 0, 0);
0002e6bf label_2e6bf:
0002e6bf rbx = 0;
0002ea42 label_2ea42:
0002ea42 void* rdi_4 = ((char*)r12 + 0x38);
0002eac5 int64_t i_3;
0002eac5 do
0002eac5 {
0002ea4b if (*(uint32_t*)((char*)rdi_4 + 0x14) != 0)
0002ea47 {
0002ea63 int64_t* var_48;
0002ea63 sub_11014(&var_48, " …", 0x63, 0x1b);
0002ea7d KeWaitForSingleObject(&data_263b8, 0, 0, 0, 0, var_80, var_78, var_70, var_68, var_60, var_58);
0002ea83 *(uint32_t*)((char*)rdi_4 + 0x14) = 0;
0002ea8a sub_1716c(rdi_4);
0002ea98 KeReleaseMutex(&data_263b8, 0);
0002ea9e int64_t* rdx_10 = var_48;
0002eaa6 if (rdx_10 != 0)
0002eaa3 {
0002eaab *(uint8_t*)(*(uint64_t*)rdx_10 + 0x18) = 0x2d;
0002eaaf rdx_10[-1] = (rdx_10[-1] - 1);
0002eab4 void* rax_34 = rdx_10[-2];
0002eab8 *(uint32_t*)((char*)rax_34 + 0xc) = (*(uint32_t*)((char*)rax_34 + 0xc) - 1);
0002eab8 }
0002eaa3 }
0002eabd rdi_4 = ((char*)rdi_4 + 0x28);
0002eac1 i_3 = i_5;
0002eac1 i_5 = (i_5 - 1);
0002eac1 } while (i_3 != 1);
0002eac9 *(uint64_t*)((char*)arg1 + 0x38) = ((uint64_t)rbp);
0002eacd int64_t* rax_36 = arg_8;
0002ead8 if (rax_36 != 0)
0002ead5 {
0002eadd *(uint8_t*)(*(uint64_t*)rax_36 + 0x18) = 0x2d;
0002eae1 rax_36[-1] = (rax_36[-1] - 1);
0002eae6 void* rcx_25 = rax_36[-2];
0002eaea *(uint32_t*)((char*)rcx_25 + 0xc) = (*(uint32_t*)((char*)rcx_25 + 0xc) - 1);
0002eaea }
0002eaef rax_31 = ((uint64_t)rbx);
0002eaef }
0002eaff return rax_31;
0002eaff}
代码比较长,宏观上来说就是前面是注册码的判断,后面是驱动 drvwdm\totrec7的读取。。
按前面的方法返回1之后发现系统没有声音了(声音驱动不被加载了)
应该和驱动没有被签名打开有关。。。目前没有花钱的签名。。。所以无法进行下去了。
估计得用Windbg+VMWare虚拟机双机调试了,但是我的虚拟机里该软件录音有问题。。
还待有缘人继续分析。。。
目前该软件8.xx以上的破解补丁全是骗人的。
注册码注册成功也是白瞎。
所以破解补丁如狗屎,爆破和猜迷的过程才更有乐趣和魅力。 dork 发表于 2023-12-26 16:28
方法返回1之后猜测不可能这么简单混过去,另外,没有免费的签名,可不可以克隆一个别家的现有的呢?
找论坛猪大佬签过。就算是调试模式也通不过。驱动依然不会加载。而且就算驱动你修改了一个字节,也一样不被加载的效果。 冥界3大法王 发表于 2023-12-26 17:36
@gailium 工具在哪? 提供下在玩下
不会说的是bcdedittestsigning on。。。那个吧?
没效 ...
https://github.com/gailium119/cishim
编译替换ci.dll,修改winload.exe,bootmgr中ImgpValidateImageHash函数返回0 看来我不是那位有缘人!{:1_907:} 都搞双机联调驱动了,水平高啊,回头仔细学习下。 都搞双机联调驱动了,水平高啊,回头仔细学习下。 大佬到哪都是流弊的 这个软件并不是不可替代,不过插噪音的操作……也就是说有注册码也会被插噪音? 楼主很强{:1_921:} 方法返回1之后猜测不可能这么简单混过去,另外,没有免费的签名,可不可以克隆一个别家的现有的呢? LoveCracking 发表于 2023-12-26 16:13
这个软件并不是不可替代,不过插噪音的操作……也就是说有注册码也会被插噪音?
是的,找遍了。
全试过了。
就算你有注册码,注册成功一样会插入噪音。
只是做技术讨论。提供一个学习案例而已。