吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3297|回复: 20
收起左侧

[原创] 某录。。逆向分析

  [复制链接]
冥界3大法王 发表于 2023-12-26 13:55
本帖最后由 冥界3大法王 于 2023-12-26 16:36 编辑

image.png
进入注册界面。 粘个垃圾注册码
Name:冥界3大法王
Key: TRD6.EZ6L.5CBF.2GKW.H3EW.78EM.4TQM.9J4L.WMJ9.3M5G.EABE.2F7A.MAFG.ULSY.U2SA
从中我们得知:注册码TRD6开头
image.png
字串参考搜索过滤下
左顶1处只有1条,右下处双击后只有4条
先看到第4条
image.png
我们在这里!
有经验的论坛先生一眼就知道这是获得不同的用户授权,其中还有TR50(旧版注册码,具体看下面的伪代码)
因为一共有4种: 普通版、专业版、视频专业版、开发者版
我们下载到的就是最高版本了。

[Asm] 纯文本查看 复制代码
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处
image.png
代码不长
F5转成汇编指令
image.png
似乎只要返回1 ,就是注册版啦~~

image.png
那我们就改次试下呗

image.png
image.png

点OK
image.png
image.png
image.png
似乎看起来很美好!
但是!你录制一个在线的音频就会发现只要到达1分03秒就会插入一段噪音。即便你使用的是老外的破解补丁(修改公钥的)
或者是8.2注册码注册成功的,一样一样的,到点它就插,噪音依旧在,它肯放过谁?不要迷信老外有多牛,其实水货骗子也不少。

为什么会这样呢? 因为修改的重点没有找到地方!
因为安装了虚拟的声卡,所以驱动才是工作的核心!So。。。
接下来,继续猜,继续看:
你就会发现要修改的是驱动文件,和上面的步奏一样,定位过去:
image.png
[Asm] 纯文本查看 复制代码
🛑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                          {
&#8943;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以上的破解补丁全是骗人的。
注册码注册成功也是白瞎。
所以破解补丁如狗屎,爆破和猜迷的过程才更有乐趣和魅力。

免费评分

参与人数 6吾爱币 +7 热心值 +6 收起 理由
笙若 + 1 + 1 谢谢@Thanks!
hnulyt + 1 + 1 热心回复!
theStyx + 2 + 1 谢谢@Thanks!
脱下小可爱 + 1 + 1 我很赞同!
janken + 1 + 1 热心回复!
Arcticlyc + 1 + 1 看来我也不是有缘人

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 冥界3大法王 发表于 2023-12-26 16:40
dork 发表于 2023-12-26 16:28
方法返回1之后猜测不可能这么简单混过去,另外,没有免费的签名,可不可以克隆一个别家的现有的呢?

找论坛猪大佬签过。就算是调试模式也通不过。驱动依然不会加载。而且就算驱动你修改了一个字节,也一样不被加载的效果。
gailium 发表于 2023-12-27 10:43
冥界3大法王 发表于 2023-12-26 17:36
@gailium 工具在哪? 提供下在玩下
不会说的是bcdedit  testsigning on。。。那个吧?
没效 ...

https://github.com/gailium119/cishim
编译替换ci.dll,修改winload.exe,bootmgr中ImgpValidateImageHash函数返回0

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
冥界3大法王 + 1 + 1 好我试下。

查看全部评分

koy4134 发表于 2023-12-26 14:28
mengxz2023 发表于 2023-12-26 15:11
都搞双机联调驱动了,水平高啊,回头仔细学习下。
ysbwss 发表于 2023-12-26 15:23
都搞双机联调驱动了,水平高啊,回头仔细学习下。

免费评分

参与人数 1吾爱币 -2 收起 理由
fortytwo -2 请勿灌水,提高回帖质量是每位会员应尽的义务!

查看全部评分

blueslu 发表于 2023-12-26 15:55
大佬到哪都是流弊的
LoveCracking 发表于 2023-12-26 16:13
这个软件并不是不可替代,不过插噪音的操作……也就是说有注册码也会被插噪音?
SweerHard 发表于 2023-12-26 16:23
楼主很强
dork 发表于 2023-12-26 16:28
方法返回1之后猜测不可能这么简单混过去,另外,没有免费的签名,可不可以克隆一个别家的现有的呢?
 楼主| 冥界3大法王 发表于 2023-12-26 16:38
LoveCracking 发表于 2023-12-26 16:13
这个软件并不是不可替代,不过插噪音的操作……也就是说有注册码也会被插噪音?

是的,找遍了。
全试过了。
就算你有注册码,注册成功一样会插入噪音。
只是做技术讨论。提供一个学习案例而已。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-23 02:15

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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