冥界3大法王 发表于 2023-12-26 13:55

某录。。逆向分析

本帖最后由 冥界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以上的破解补丁全是骗人的。
注册码注册成功也是白瞎。
所以破解补丁如狗屎,爆破和猜迷的过程才更有乐趣和魅力。

冥界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 工具在哪? 提供下在玩下
不会说的是bcdedittestsigning on。。。那个吧?
没效 ...

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

koy4134 发表于 2023-12-26 14:28

看来我不是那位有缘人!{:1_907:}

mengxz2023 发表于 2023-12-26 15:11

都搞双机联调驱动了,水平高啊,回头仔细学习下。

ysbwss 发表于 2023-12-26 15:23

都搞双机联调驱动了,水平高啊,回头仔细学习下。

blueslu 发表于 2023-12-26 15:55

大佬到哪都是流弊的

LoveCracking 发表于 2023-12-26 16:13

这个软件并不是不可替代,不过插噪音的操作……也就是说有注册码也会被插噪音?

SweerHard 发表于 2023-12-26 16:23

楼主很强{:1_921:}

dork 发表于 2023-12-26 16:28

方法返回1之后猜测不可能这么简单混过去,另外,没有免费的签名,可不可以克隆一个别家的现有的呢?

冥界3大法王 发表于 2023-12-26 16:38

LoveCracking 发表于 2023-12-26 16:13
这个软件并不是不可替代,不过插噪音的操作……也就是说有注册码也会被插噪音?

是的,找遍了。
全试过了。
就算你有注册码,注册成功一样会插入噪音。
只是做技术讨论。提供一个学习案例而已。
页: [1] 2 3
查看完整版本: 某录。。逆向分析