本帖最后由 kangdiwu 于 2023-12-31 15:15 编辑
进入注册界面。 粘个垃圾注册码 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[8]) != 0) 0050f4a1 SetFocus(hWnd: GetDlgItem(hDlg: arg1[8], 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 似乎看起来很美好! 但是!你录制一个在线的音频就会发现只要到达1分03秒就会插入一段噪音。即便你使用的是老外的破解补丁(修改公钥的) 或者是8.2注册码注册成功的,一样一样的,到点它就插,噪音依旧在,它肯放过谁?不要迷信老外有多牛,其实水货骗子也不少。
为什么会这样呢? 因为修改的重点没有找到地方! 因为安装了虚拟的声卡,所以驱动才是工作的核心!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[1]; 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[1]; 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以上的破解补丁全是骗人的。 注册码注册成功也是白瞎。 所以破解补丁如狗屎,爆破和猜迷的过程才更有乐趣和魅力。
注:若转载请注明大神论坛来源(本贴地址)与作者信息。
|