sunsjw 发表于 2019-10-1 14:37:17

mindManager 2019 32bit 安全分析

目标软件:mindManager 2019 32bit
使用工具:x32dbg
初学入门,只为学习,如有侵权或不正确的地方还忘指教。


找一个假的注册码,mindManager认为是真的注册码
例如:MP78-812-2P94-D1DM-35F3
输入密钥,mindManager会弹出错误,一般这个时候可以在MessageBoxW上下断点
通过调用栈往上找,直到在调用函数里发现如下字样,基本上就到关键点了
FF15 9C7FEE00| CALL DWORD PTR DS:[<&?SendRegistrationAttemptEvent@CmjFeedbackManager@@SA_NABV?$CStringT@_WV?$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@0@Z>]
往下看,看到这几个比较指令,其中只有0x1才是正确的,所以把比较0x1,直接改为jmp指令
00A4C80F       | CALL <mindmanager.sub_A4C640>
00A4C814       | MOV DWORD PTR SS:,EAX
00A4C817       | MOV EDX,DWORD PTR SS:
00A4C81A       | MOV DWORD PTR SS:,EDX
00A4C81D <mind | CMP DWORD PTR SS:,0x0
00A4C821       | JE mindmanager.A4C83C         
00A4C823       | CMP DWORD PTR SS:,0x1
00A4C827       | JE mindmanager.A4C989          <------------------直接改为jmp
00A4C82D       | CMP DWORD PTR SS:,0x2
00A4C831       | JE mindmanager.A4C9F3         
00A4C837       | JMP mindmanager.A4CA55            
以上的步骤完成了注册时的验证,会把注册信息写入注册表。
程序在重启的时候还会进行检测。既然是写入注册表的,那就要在几个读注册表的API上下断点
如:
<kernel32.dll.RegOpenKeyExW>                   已启用       MOV EDI,EDI                                       0   
<kernel32.dll.RegCloseKey>                     已启用       MOV EDI,EDI                                       0   
<kernel32.dll.RegCreateKeyExW>               已启用       MOV EDI,EDI                                       0   
<advapi32.dll.RegQueryValueA>                  已启用       PUSH 0x24                                           0   
<advapi32.dll.RegQueryValueW>                  已启用       PUSH 0x24                                           0   
但是,经过实践,都断不下来。那就要想别的办法了。
按常理,它的注册验证算法在启动时调用的和注册时调用的应该是同一个地方,除非是不按套路出牌,非要验证代码复制一份给启动时调用。虽然说这样做没什么问题,但是软件以后的维护就是个大问题了。所以我们还是进比较指令前面的CALL <mindmanager.sub_A4C640> 里看看有没有什么新发现。看到又调用了CALL <mindmanager.sub_6E4830>,后面还有个TEST EAX,EAX,比较可疑。改下返回值跑一下,OK通过了。接下来修改sub_6E4830,让它永久返回1,代码如下:
| 55                  | PUSH EBP                     
| 8BEC                  | MOV EBP,ESP                  
| 68 60022601         | PUSH mindmanager.1260260      
| 8B45 08               | MOV EAX,DWORD PTR SS:
| 50                  | PUSH EAX                     
| E8 3FF8FFFF         | CALL <mindmanager.sub_6E4080>
| 83C4 08               | ADD ESP,0x8                  
| 5D                  | POP EBP                     
| 40                  | INC EAX         <--------------------EAX本来是0,让它加1            
| C3                  | RET                           
经验证,这里返回1,上面的可以不用改jmp指令。


三十三层天剑主 发表于 2019-10-1 20:00:58

表哥大气,直接上代码!

飞天 发表于 2019-10-2 08:49:43

感谢分享分析的过程,谢谢。

fcguo800 发表于 2019-10-2 19:43:20

感谢大神分享,新手好好学习一下。

gfjykldd 发表于 2019-10-6 08:15:23

不错,顶一下。

085304229 发表于 2019-12-18 22:03:51

刚学破解还在学习中

哥又回来了 发表于 2019-12-19 21:51:33

本帖最后由 哥又回来了 于 2019-12-19 21:54 编辑

cmp eax, 17是定位点;因为注册码 23位

搜索 licensekey断到,ctrl+A,ctrl-断首返回1 也行

还有几种改法也能通过

cicinh 发表于 2021-10-26 14:49:37

感谢发布原创作品,PYG有你更精彩!

cicinh 发表于 2021-10-26 14:58:43

PYG有你更精彩!再接再厉
页: [1]
查看完整版本: mindManager 2019 32bit 安全分析