SlickEdit 是我唯一在Linux下使用的非自由软件(non-free software).因为它的Tag能力太强了,比ctag, taglist好用,况且cscope的GUI前端是qt库的程序kScope,而我更习惯用GNOME桌面。
Slick Edit 2008 (Slickedit V13.0)还是可以Crack的,FlexLM 我现在还没办法对付。不过能够破解就够用了,注册机之类的,呵呵,暂时还做不了…
Linux 版本 的修改方法:
对slickedit/bin/vs文件,将
文件偏移
0×2BE16 处 76A7 改成 EB A7
0×2C1CD 处 750D 改成 90 90
0×2C3FD 处 0F84 改成 90 E9
或者由 0F84 85000000 改成 E9 86000000 90
顺便介绍一下在Windows下如何修改
对vs.exe,将文件偏移
0xB5FE 处 750D 改成 90 90
0xB7D0 处 7476 改成 EB 76
0xCCD5 处 7307 改成 90 90
即可, 相关的反汇编代码
.text:0040C1FE jnz short loc_40C20D 改为 空操作
.text:0040C200 call vsTrial
.text:0040C205 test eax, eax
.text:0040C207 jz loc_40C3C9
……………
.text:0040C3C9 cmp [ebp+var_C20], 0
.text:0040C3D0 jz short loc_40C48 改成 jmp short loc_40C448
……………
.text:0040D8D5 jnb short loc_40D8DE 改成 空操作
.text:0040D8D7 mov eax, 1
.text:0040D8DC jmp short loc_40D924
—————
SE 13.0.1 Linux版本调试方法
1)载入vs
$gdb ~/slickedit/bin/vs
2)在试用的地方设置断点
gdb>break *0×8074C5C
gdb>break *0×8074F31
(注意,一定要加上前面的星号)
通过字符串查找 “void vsflexlm_idel(int,int)” 和 “void vsflexlm_heartbeat()” 可找到附近的地址,代码如下
8074C53 call SetLicense(8074160)
8074C58 test eax, eax
8074C5A mov edi, eax
8074C5C jnz short loc_8074C75 ; 注意,这里不应该跳转
8074C5E mov eax, 1
8074C63 mov ds:dword_8FB50A0, eax
8074C68 call vsTrial(8112570)
8074C6D test eax, eax
8074C6F jz loc_8074F2F ;这里,必然会跳转
……
8074F2F test edi, edi
8074F31 jnz short error(8074F95) ;这里不能跳转,必须往下走
8074F33 mov eax, 1
3)开始运行
gdb>run
4)在第1个地方停下来之后,强制改变跳转
gdb>display/i $pc (显示当前的汇编指令)
gdb>jump *0×8074C5E
或者 用set命令 改变指令
gdb>set {char *} 0×8074c5 = 0×90
gdb>set {char *} 0×8074c6 = 0×90
(注意,一次性写入4个字节,不知道为什么,所以注意保存前后的值。为避免出错,建议使用jump指令)
5)在第2个断点处,强制改变跳转
gdb>jump *0×8074F33
或者
gdb>set $pc = 0×8074F33
都可以改变当前的$eip
6)然后,继续运行
gdb>continue
SlickEdit 就在Linux下正常运行了,哈哈
6)用info file命令可以查看程序的入口点 Entry Point, 可使用b _start将断点设在可执行和链接格式ELF文件的入口点,但有的文件的入口点具有不同的名称,所以还是用info file查看入口点保险,呵呵)
所以在Linux下,可以用GHex对其进行修改
offset=2CC5C:75 17 (90 90) B8 01 00 00 00 A3 A0 50 FB 08 E8 03 D9 09 00
offset=2CF31:75 62 (90 90) B8 01 00 00 00 A3 A0 50 FB 08 8B 85 D8 F3 FF FF 85 C0
也就是搜索75 17 B8 01 00 00 00 A3 A0 50 FB 08 E8 03 D9 09 00这个特征码(应该只有1处),将75 17 改成 90 90
—————
SE 13.0.2 Linux版本调试方法 [Sep,4 2008]
没想到几天 Slickedit已经出了 13.0.2了,几天前才更新到 13.0.1
用idal反汇编 vs
查找”void vsflexlm_idel(int,int)” 和 “void vsflexlm_heartbeat()”
在引用这两个字符串的地方,稍靠后一点地方,可以找到,如下代码
8074C53 call 8074160
8074C58 test eax, eax
8074C5A mov edi, eax
8074C5C jnz 8074C75 ; 注意,这里不应该跳转
8074C5E mov eax, 1
8074C63 mov ds:8FB5900, eax
8074C68 call 8112610 ;就是所谓vsTrial
8074C6D test eax, eax
8074C6F jz 8074F2F ;这里,必然会跳转
8074C75 mov [esp], offset “_user_timers”
8074C7C mov eax, 4
…..
8074F2F test edi, edi
8074F31 jnz short error(8074F95) ;这里不能跳转,必须往下走
8074F33 mov eax, 1
所以,13.0.2的这段代码 跟 13.0.1 是一模一样的,修改方法也类似
offset=2CC5C:75 17 (90 90) B8 01 00 00 00 A3 00 59 FB 08 E8 A3 D9 09 00
offset=2CF31:75 62 (90 90) B8 01 00 00 00 A3 00 59 FB 08 8B 85 D8 F3 FF FF 85 C0
———–
2008-9-22
一直有人说windows下slickedit 13.0.2有问题, 看了一下,跟linux下基本一样啊
用 IDA反汇编后, 在imports 里面找 vsTrial
.text:0040C5EC cmp [ebp+var_C20], 0
.text:0040C5F3 jnz short loc_40C602 ; 改为空操作
.text:0040C5F5 call vsTrial
.text:0040C5FA test eax, eax
.text:0040C5FC jz loc_40C865
…………….
.text:0040C865 cmp [ebp+var_C20], 0
.text:0040C86C jz short loc_40C8E4 ;改成 jmp
.text:0040C86E push offset aSlickedit_2 ; “SlickEdit”
由上面分析可以知道,修改方法为
75 0D (90 90) E8 AC 81 01 00 85 C0
E8 BB 30 02 00 83 BD E0 F3 FF FF 00 74(EB) 76
NULL发布的破解,就是这么改的。有人抱怨 每次跳出那个什么 窗口,可能是没有把那个每次启动都显示的选项去掉。我认为不是破解的问题。