手头有个旧版的sublimetext,上一次用还是一年前了。用od分析了下里面的注册过程。
值得吐槽的是:注册时弹出来的提示活像crackme习题的提示。。
在菜单中输入序列号并注册后,关键判断是下面这段:
00FCAA9D . E8 DFF1FFFF CALL sublime_.00FC9C81
00FCAAA2 . 83C4 10 ADD ESP,10
00FCAAA5 . 85C0 TEST EAX,EAX
00FCAAA7 . 0F9405 24442A0>SETE BYTE PTR DS:[12A4424]
00FCAAAE . 85C0 TEST EAX,EAX
00FCAAB0 0F85 E4000000 JNZ sublime_.00FCAB9A
上面的代码:第一行是一个判断函数,返回值被保存,并根据其值条件转移,形成注册成功的结果。
来到这个函数内部,可以看到一段挺长但是没啥特别技巧的验证过程,不过我还没仔细看 - - 。
值得吐槽的是,这个函数里有大量的cmp , 据我了解是开发者禁止了被公开的序列号的ID,估计是这个过程吧。
最后返回值的地方:
00FCA3CF |> 8D4D C8 LEA ECX,DWORD PTR SS:[EBP-38]
00FCA3D2 |. E8 AC80F3FF CALL sublime_.00F02483
00FCA3D7 |. 8D4D B0 LEA ECX,DWORD PTR SS:[EBP-50]
00FCA3DA |. E8 A480F3FF CALL sublime_.00F02483
00FCA3DF |. 8D4D 80 LEA ECX,DWORD PTR SS:[EBP-80]
00FCA3E2 |. E8 9C80F3FF CALL sublime_.00F02483
00FCA3E7 |. 8D4D 98 LEA ECX,DWORD PTR SS:[EBP-68]
00FCA3EA |. E8 9480F3FF CALL sublime_.00F02483
00FCA3EF 8BC7 MOV EAX,EDI
00FCA3F1 |. E8 716B0300 CALL sublime_.01000F67
00FCA3F6 \. C3 RETN
上面的代码:倒数第三行就是关键,根据之前的观察,要注册成功必须eax为0,所以把0x8bC7 改称成0x33C0 ,直接把eax清零。
这样即可注册成功。
遗留问题:
license文件仍然有问题,注册完关掉再开就没用了。
(据观察,软件打开时
sublime_.00FC9C81
这个判断函数也会被调用。)