首页 > 其他分享 >Araxis Merge 2023.5848分析

Araxis Merge 2023.5848分析

时间:2023-04-17 10:13:00浏览次数:39  
标签:__ text v14 QWORD Merge int64 2023.5848 m128i Araxis

这个app使用MFC制作,未加密。所以直接使用x64dbg或者idapro都可以直接调试。在idapro中可以直接在CDialog::DoModal中下断点,当未注册版本启动时,第一个界面就是注册对话框。因此这是最佳切入点。

在调用堆栈中可以轻松找到检查注册状态的代码:

__int64 __fastcall sub_1401D3AD0(int *a1)
{
  int v2; // ebx
  __int64 v3; // rax
  unsigned __int8 v4; // si
  unsigned __int64 v5; // rdx
  __int64 v6; // rcx
  unsigned __int64 v7; // rdx
  __int64 v8; // rcx
  unsigned __int64 v9; // rdx
  __int64 v10; // rcx
  __int64 v11; // rbx
  int v13; // [rsp+30h] [rbp-29h] BYREF
  __int128 v14; // [rsp+38h] [rbp-21h] BYREF
  __int128 v15; // [rsp+48h] [rbp-11h] BYREF
  __m128i v16; // [rsp+58h] [rbp-1h]
  __int128 v17; // [rsp+68h] [rbp+Fh] BYREF
  __m128i v18; // [rsp+78h] [rbp+1Fh]
  __int128 v19; // [rsp+88h] [rbp+2Fh] BYREF
  __m128i si128; // [rsp+98h] [rbp+3Fh]

  v14 = 0i64;
  v13 = 0;
  v19 = 0i64;
  si128 = _mm_load_si128((const __m128i *)&xmmword_14079DBA0);
  LOWORD(v19) = 0;
  v17 = 0i64;
  v18 = si128;
  LOWORD(v17) = 0;
  v15 = 0i64;
  v16 = si128;
  LOWORD(v15) = 0;
  sub_1401D3540(&v14, &v13, &v19, &v17, &v15);   // v13保存的就是注册状态,调试这个函数就可以得到你想要的东西
  v2 = v13;
  switch ( v13 )
  {
    case 2:
    case 3:
      goto LABEL_3;
    case 4:
      v3 = (*(__int64 (__fastcall **)(_QWORD))(*(_QWORD *)v14 + 24i64))(v14);
      sub_1401D3120(&qword_1408B3E80, v3);
LABEL_3:
      *a1 = v2;
      v4 = 1;
      break;
    default:
      v4 = sub_1401D6B20((__int64)a1);
      break;
  }
  if ( v16.m128i_i64[1] >= 8ui64 )
  {
    v5 = 2 * v16.m128i_i64[1] + 2;
    v6 = v15;
    if ( v5 >= 0x1000 )
    {
      v5 = 2 * v16.m128i_i64[1] + 41;
      v6 = *(_QWORD *)(v15 - 8);
      if ( (unsigned __int64)(v15 - v6 - 8) > 0x1F )
        invalid_parameter_noinfo_noreturn(v6, v5);
    }
    j_j_free(v6, v5);
  }
  if ( v18.m128i_i64[1] >= 8ui64 )
  {
    v7 = 2 * v18.m128i_i64[1] + 2;
    v8 = v17;
    if ( v7 >= 0x1000 )
    {
      v7 = 2 * v18.m128i_i64[1] + 41;
      v8 = *(_QWORD *)(v17 - 8);
      if ( (unsigned __int64)(v17 - v8 - 8) > 0x1F )
        invalid_parameter_noinfo_noreturn(v8, v7);
    }
    j_j_free(v8, v7);
  }
  if ( si128.m128i_i64[1] >= 8ui64 )
  {
    v9 = 2 * si128.m128i_i64[1] + 2;
    v10 = v19;
    if ( v9 >= 0x1000 )
    {
      v9 = 2 * si128.m128i_i64[1] + 41;
      v10 = *(_QWORD *)(v19 - 8);
      if ( (unsigned __int64)(v19 - v10 - 8) > 0x1F )
        invalid_parameter_noinfo_noreturn(v10, v9);
    }
    j_j_free(v10, v9);
  }
  if ( *((_QWORD *)&v14 + 1) )
  {
    if ( _InterlockedExchangeAdd((volatile signed __int32 *)(*((_QWORD *)&v14 + 1) + 8i64), 0xFFFFFFFF) == 1 )
    {
      v11 = *((_QWORD *)&v14 + 1);
      (***((void (__fastcall ****)(_QWORD))&v14 + 1))(*((_QWORD *)&v14 + 1));
      if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v11 + 12), 0xFFFFFFFF) == 1 )
        (*(void (__fastcall **)(_QWORD))(**((_QWORD **)&v14 + 1) + 8i64))(*((_QWORD *)&v14 + 1));
    }
  }
  return v4;
}

 

.text:00000001401D384D                               loc_1401D384D:                          ; CODE XREF: sub_1401D3540+308↑j
.text:00000001401D384D 48 8D 7B 10                   lea     rdi, [rbx+10h]
.text:00000001401D3851 48 89 7C 24 40                mov     [rsp+180h+var_140], rdi
.text:00000001401D3856 48 89 5C 24 48                mov     [rsp+180h+var_138], rbx
.text:00000001401D385B 48 8B 07                      mov     rax, [rdi]
.text:00000001401D385E 48 8B CF                      mov     rcx, rdi
.text:00000001401D3861                               ;   try {
.text:00000001401D3861 FF 50 08                      call    qword ptr [rax+8]   // 跟进去,就是那个代码
.text:00000001401D3861
.text:00000001401D3864 48 63 C8                      movsxd  rcx, eax
.text:00000001401D3867 48 8D 15 32 47 59 00          lea     rdx, dword_140767FA0
.text:00000001401D386E 8B 14 8A                      mov     edx, [rdx+rcx*4]
.text:00000001401D3871 3B 54 24 20                   cmp     edx, [rsp+180h+var_160]
.text:00000001401D3875 0F 8E C5 00 00 00             jle     loc_1401D3940

找到目标函数后,直接将其始终返回2或3即可。

>merge.exe
0000000000274400:48->B8
0000000000274401:89->03
0000000000274402:5C->00
0000000000274403:24->00
0000000000274404:10->00
0000000000274405:48->C3
0000000000274406:89->90
0000000000274407:6C->90
0000000000274408:24->90
0000000000274409:18->90

接下来就可以使用现有的序列号注册了,本身序列号还有自己校验算法,且到期时间也打包在序列号中,搞定这个就可以自己算序列号了,当然也可以用现存的,比如:

llllllDB:llINllll:llBOBOOl:lllBOlll:llBOBOOl:lllBDlll

 最后,app的注册信息存放在注册表中,所以如果你想搞一个patcher,那么需要做两件事:

1. 通过标志代码找到目标函数并直接patch二进制文件

2.将注册信息写入到注册表中:

                
         // hive is RegistryHive.LocalMachine and RegistryHive.CurrentUser
          var root = RegistryKey.OpenBaseKey(hive, RegistryView.Registry64); var key = root.OpenSubKey("Software\\Araxis\\Merge\\7.1", true); if(key == null) { key = root.CreateSubKey("Software\\Araxis\\Merge\\7.1", true); } key.SetValue("LicensedUser", Environment.UserName); key.SetValue("SerialNumber", licenseKey); key.SetValue("CompanyName", "your info...");

 

标签:__,text,v14,QWORD,Merge,int64,2023.5848,m128i,Araxis
From: https://www.cnblogs.com/bodong/p/17324906.html

相关文章

  • git中 commit 和 pull 的先后顺序问题会产生多余的merge记录
    commit和pull的先后顺序问题最近提交代码,发现一个问题。自己很清楚的记得本次的提交是没有进行合并的。奇怪的死gitlab中的history历史中显示了我对本次进行了Merge合并操作。并且Merge合并操作中显示了很多不是本次对代码的修改。这就很明显了,git自动生成的merge操......
  • pandas-多个DataFrame同时进行merge合并
    https://blog.csdn.net/Elvis__c/article/details/126411204#假设有表df1-df2-df3-df4四张表res=[df1,df2,df3,df4]importpandasaspdfromfunctoolsimportreduceres_merge=reduce(lambdaleft,right:pd.merge(left,right,on=['name'],how='left'),re......
  • git 更新代码错误 Your local changes to the following files would be overwritten
    当gitpull时提示 Yourlocalchangestothefollowingfileswouldbeoverwrittenbymerge idea中撤销当前本地本次提交 ......
  • git pull时,提示Your local changes to the following files would be overwritten by
    问题描述:本地修改了代码后,执行“gitpull”命令时,无法更新代码,并报错提示:“Yourlocalchangestothefollowingfileswouldbeoverwrittenbymerge” 问题原因:是因为本地修改的代码与git服务器的代码冲突导致。如果不冲突,会自动更新合并代码。 gitpull冲突的解决办......
  • git merge 和 git rebase 的区别
    Git版本控制中,gitrebase和gitmerge这两个命令都可以用来集成从一个分支和另一个分支的更改。它们是两种不同的合并方法,本文将介绍它们的差异。gitrebase和gitmerge主要差异是什么?最近ChatGPT大火,请它来回答一下:Gitmerge将两个分支中的所有提交都合并到一起,并创建一......
  • Your local changes to the following files would be overwritten by merge问题的解
    问题描述在终端页面输入gitpull,会出现这样一个报错:Yourlocalchangestothefollowingfileswouldbeoverwrittenbymerge;然后一开始没有注意到这个错误跟之前的错误不太一样,就还是按照之前的套路来的,没有解决问题解决发现这样就可以解决啦:gitstashgitpull这样就......
  • git pull遇到错误:error: Your local changes to the following files would be overwr
    error:Yourlocalchangestothefollowingfileswouldbeoverwrittenbymerge:意思是我台式机上新修改的代码的文件,将会被git服务器上的代码覆盖;我当然不想刚刚写的代码被覆盖掉,看了git的手册,发现可以这样解决:方法1:如果你想保留刚才本地修改的代码,并把git服务器上的代码pu......
  • git pull 报错提示 fatal: refusing to merge unrelated histories
    从远程拉到本地的时候提示错误 造成原因:1.远程仓库和本地仓库内容不相关,合并不兼容。2.目录有问题,.git可能意外被删除。如果克隆或清理项目时可能会发生这种情况。3.从远程仓库拉取或推送数据时,分支位于不同的HEAD位置,并且由于缺乏共性而不发匹配。 我出......
  • Git问题篇:Merge冲突解决办法以及版本回溯
    在做软构实验lab1,使用git进行版本管理的时候遇到的问题。因为我使用两个设备进行学习,因此在这当中涉及到两方本地版本库的更新问题,出现问题的原因:我在使用p1设备的时候在未gitpull更新本地版本库的前提下进行了Code,因此在完成修改进行gitpush的时候出现了mergeconflict......
  • The following untracked working tree files would be overwritten by merge错误的
    问题描述只要云端代码更新,我的本地那里没有跟上云端的更新速度,就会出现这个错误:问题解决在Git终端里面,输入gitclean-d-f"出现错误的那个文件路径(就是错误显示的那一串)"然后Enter,会显示Removing了那个文件,然后再输入gitpull,显示这个:然后就等待它更新完成就行了。然后......