Zhiwei.Li
Gather sweet flowers while you may, And not the twig as flowers withered!
标签 Tag : SlickEdit

SlickEdit 2010

逆向工程 49 条评论

某人告诉我 SlickEdit 2010 (SlickEdit 15.0.0.5)发布了

Linux版本
080784CD                 mov     eax, esi   改成  xor eax, eax
也就是 文件 slickedit/bin/vs 的偏移 0×304CD 处 的 89 F0 改成  33 C0

windows版本
0040F750                 mov     eax, ebp  改成  xor eax,eax
也就是 文件 SlickEditV15.0.0\win\vs.exe 的偏移0xEB50 处 的 8B C5 改成  33 C0

跟SlickEdit 2009类似,   都是通过查找      |== NOT FOR RESALE ==|     这个字符串找到 适当的函数

2010-5-23 SlickEdit 15.0.0.6

SlickEdit 15.0.0.6 跟 SlickEdit 15.0.0.5 的可执行文件没有变化,  修改方法也一样

Build Date: May 07, 2010

SlickEdit v15.0.0.6 contains a few bug fixes for problems discovered in v15.0.0.5. Ifyou are currently running SlickEdit v15.0.0.5 with hotfix_se1500_3_cumulative.zip installed (or any later cumulative hotfix), you do NOT need to install this new version of SlickEdit.

2010-8-24 SlickEdit 15.0.1.3

Windows版本
0040F890 mov eax, ebp 改成 xor eax, eax
也就是 将文件 SlickEditV15.0.1\win\vs.exe偏移0xEC90 处 8B 5C 改成 33 C0

Linux 版本
08078E5D mov eax, esi 改成 xor eax, eax
也就是 slickedit/bin/vs 文件偏移 0×30E5D 处的 89 F0 改成 33 C0

pingf介绍的修改方法, 完全可行, 太强大了;)

Mac OS X版本
00017BC4 mov eax, [ebp+var_58] 改成 xor eax, eax
也就是 SlickEditV1501.app/Contents/MacOS/vs 文件偏移的 0×154ABC4处的 8B 45 A8 改成 33 C0 90

试用版本的slickedit如何载入hotfix

Linux 发表评论

试用版本的License,Help菜单是 没有产品升级这一项的,slickedit.com 介绍
Help > Product Updates > Load Hot Fix
可以用来载入hotfix

实际上,只需要点击最下面状态栏的左边, 就会出现一个命令输入框, 输入load, 就会弹出load-fix命令让你选择, 执行后就弹出 文件选择对话框

从硬盘选择你要载入的hotfix

SlickEdit 14.0.2 最简单的补丁

逆向工程 23 条评论

vsLicenseTypeSet设置license的类型

如果得到类型为 1, 就是Trial 的类型, 会调用vsTrialSet来设置 试用标志
5或者6 就是那些可以利用SLickedit Core来开发自己的IDE 的用户,会调用 vsSubscriptionSet
2 普通用户,不可再卖了, 会调用vsNotForResaleSet , vsSetDefaultOptionZ


最后这些所有的用户类型,都会调用vsSerialNumberSet来设置 序列号, vsLicenseExpirationInDaySet, vsLicenseExpirationSet

vsLicenseFileSet, vsLicenseToInfoSet

最后在这个函数,必须返回 0, 返回别的值 就说明 没有有效的license

所以, 最简单的破解补丁只需要修改3个字节

1)对于SlickEdit 2009(14.0.2), Windows版本,只需要将

40CDB6 处的 mov eax, [ebp+var_38] 改为 xor eax, eax 就可以了

也就是
0xC1B6 处 8B 45 C8 修改为 33 C0 90

2)对于 SlickEdit 14.0.2 Linux 版本 , 只需要将
807497F 处的 mov eax, [ebp+var_54] 改为 xor eax, eax
也就是0×2C97F处的 8B 45 AC 改为 33 C0 90

也可以搜索这个串 8B 45 AC EB D1 89 04 24 E8

SlickEdit跨平台调试

Linux 发表评论

1 在目标机器上启动 gdbserver, 具体过程看前面的文章, 跨平台调试

2.  必须配置好Cross GDB的路径

在emdebian中有现成的包可用
1)从SlickEdit的菜单中选择 Debug > Debugger Options

2)切换到Debugging->Configurations…页面,

3) 点击Add… 找到 Cross GDB的位置, 点击OK,然后为它取个名字,比如 GDB 6.8 for Arm, 点击OK确定即可

2 在SlickEdit中使用gdb连接到远程进程
菜单 > Debug > Attach Debugger > Attach to remote process using gdb

3 开始调试,停在main函数的第1个断点

4. 在主机段也要配置好源代码的路径

SlickEdit 2009发布了

逆向工程 21 条评论

刘雪介绍说 SlickEdit 2009出来了
看了一下介绍,确实加了一些不错的功能
1)3P(不要想歪了,是Perl, Ptyhon,PHP这3P,不,好像是4P)的调试器
2)增加对D语言的支持
3)增加对Verilog语言的系统支持(言下之意,难道D语言是以插件的形式支持的?)

文件打开增强
输出和输入选项
符号彩色高亮
可重定位的书签和断点

看了一下,类似于slickedit 2008

8074CB3     call sub_8074190
8074CB8     test eax,eax
8074CBA    mov edi, eax
8074CBC    jnz short loc_8074CC8    跳转了,不应该跳转
8074CBE     mov eax, 1
8074CC3     mov  ds:dword_90D78C0, eax

8074CC8:              xor ebx, ebx
ca            call sub_8112EF0
cf           test eax,eax
d1          jnz loc_8074E78  不跳
———2009.3.30上面这段分析有问题,不要看了———-

0807 4CD7    test edi,edi
0807 4CD9    jnz short loc_8074CEC  这里不能跳
0807 4CDB    call sub_8112ED0        这里应该就是所谓的vsTrial
0807 4CE0     test eax, eax
0807 4CE2     jnz short loc_8074CEC  这里不能跳转
0807 4CE4     test ebx,ebx
0807 4CE6     jz loc_8074FF4   这里必须跳

loc_8074CEC
mov [esp+1078h+var_1078], offset a_user_times   ;’_use_timers’
8074CF3     mov eax,4

…..

8074 FF4               test edi,edi
8074 FF6               jnz short loc_807505A    这里应该也不能跳转,必须往下走
8074 FF8               mov eax, 1
8074 FFD         mov ds:dword_90D78C0,  eax

gdb>break *

==========
2009.3.30

先公布Windows版本的修改方法

1)找到vsTrial函数

或者 导出int _fnpIsLicenseValid()函数的地方,下面不远处,就是调用vsTrial的地方

或者 寻找 “”.lic”字符串,就是查找license文件的地方

然后就是 调用 vsLicenseTypeSet这个函数

2)将licencse类型改为 试用

原来的代码

.text:0040C642                 cmp     [ebp+lic_type], 0
.text:0040C649                 jnz     short loc_40C661      ;不能跳转,必须往下走
.text:0040C64B                 call    vsTrial
.text:0040C650                 test    eax, eax
.text:0040C652                 jnz     short loc_40C661     ;  也不能跳转
.text:0040C654                 cmp     [ebp+var_81C], 0
.text:0040C65B                 jz      loc_40C8C4     ;必须跳转

….

.text:0040C8C4                 cmp     [ebp+lic_type], 0
.text:0040C8CB                 jz      short loc_40C943

修改后,可以正常运行,  反汇编的代码如下

.text:0040C642                 cmp     [ebp+var_C20], 0   ;license_type
.text:0040C649                 nop
.text:0040C64A                 nop
.text:0040C64B                 call    vsTrial
.text:0040C650                 test    eax, eax
.text:0040C652                 nop
.text:0040C653                 nop
.text:0040C654                 cmp     [ebp+var_81C], 0  ;  renew_subscribe_flag
.text:0040C65B                 jmp     loc_40C8C4

.text:0040C8C4                 cmp     [ebp+var_C20], 0
.text:0040C8CB                 jmp     short loc_40C943

这样修改

FF FF 83 BD E0 F3 FF FF  00 75 16(90 90) E8 46 4C 01 00
85 C0 75 0D (90 90) 83 BD E4 F7  FF FF 00 0F 84(90 E9) 63 02 00
….

============
Linux下修改方法 2009.03.30

除了vsTrial没办法利用到外,其他方式跟windows类似,另外可以通过
查找这两个字符串  “def_prompt_renew_sub”   “_use_timers” 这两个字符串定位代码

08074CD7                 test    edi, edi        ; lic_type
08074CD9                 jnz     short loc_8074CEC  ;不能跳转
08074CDB                call    vsTrial
08074CE0                 test    eax, eax
08074CE2                 jnz     short loc_8074CEC    ;不能跳转
08074CE4                 test    ebx, ebx
08074CE6                 jz      loc_8074FF4  ;必须跳转


08074FF4                 test    edi, edi
08074FF6                 jnz     short loc_807505A  ;不能跳转

修改方法

C0 0F 85 A1 01 00 00 85 FF 75 11(90 90) E8 F0 E1 09 00
85 C0 75 08(90 90) 85 DB 0F 84(90 E9) 08 03 00 00 C7 04 24 B1

修改方法看不懂的,可以问 刘雪 8)

顺便说两句
1)SlickEdit 2009新的颜色方案,inactive 代码块(类似于source insight的功能)浏览代码时比较有用。14.0.0.7 确实一个值得更新尝试的版本,如果你还再用slickedit 2008的话

2)不要私下给我mail,我不保证会回复。 有问题留言就好了,我在力所能及的范围内一定会解答

3)不希望有人从这里拿了补丁去卖钱卖分…..

SlickEdit技巧

Linux, Windows 发表评论

Ctl+E,Ctrl+],Ctrl+Shift+]  定位代码的起始位置

显示改动过的行标记:
Tools->Options->File Extension Setup
Advanced-Color coding-Modified lines

自动在保存的时候清除修改标记:
Tools->Options->File Options
Save-Reset line modify
Expand tabs to spaces,保存时把Tab变成空格

修改该死的自动语法模板:
Tools->Options->File Extension Options
Indent-Syntax expansion-Minmum expandable keyword length:
建议设置为3,如果为默认的1的话,你根本不能用i做变量。因为只要i起头后面一个空格就是一个if () {}
对当前文件类型都显示行号:
Tools->Options->File Extension Setup
General-Display line numbers
修改行号颜色:
Tools->Options->Color
不是Line Number,而是Line Prefix Area
改GCC的设置:
必须在建立了GNU C/C++项目后才能在Build里面找到GNU C Options
设置项目的Build之类的菜单命令:
Project->Project Properties->Tools
选中一个Configuration以后就能配置编译器和调试器
另外,在下面的Build窗口可以直接敲命令。比如make,dir什么的,很方便
隐藏某个大括号内的内容
将光标放到所需隐藏的大括号内的任意位置,然后选择菜单View-> Hide Code Block即可。
隐藏所有注释的方法
选择菜单View-> Hide All Comment
函数头显示
如何轻松快速的在文件里面找到所需要的函数呢,当然是把所有的函数头列在那里让你挑啦
View-> Function Heading
有选择的显示
View-> Selective Display
Preproessor directives
只显示编译器能看到的部分,如果#define没有打开,就不显示
用这个看那种预定义功能超多的操作系统代码,或者多模块的复杂代码实在是太方便了

Slickedit中文显示与输入

Linux 1 条评论

以前slickedit 2007在john wall(长沙)大侠的指导下,使用fcitx能正确输入中文,并正常显示

但slickedit 2008( v13.0.2) 出来这么久,并成功破解后,还是没能正确显示汉字,更谈不是输入。

原来,必须做一些设置,才能支持中文

首先,安装scim-pinyin, 安装后 im-switch 会自动判断 scim-pinyin 比 fcitx优先级高,只启动 scim

然后,启动slickedit, Tools->Options->Keyboard->Refeine Common Keys 里面将 Use Ctrl+Space for input method editor 这个开关 改为 True (原来默认为False)

Tools->Option->File Options->Load 里面 将Encoding 改为 UTF-8 (如果你用UTF-8作为Locale, 你的一般的文件都应该是 utf-8编码,否则,请改成你常用的编码).  默认的 Auto Unicode 似乎不怎么autoo, 根本没有gedit那种本领,能自动识别编码

最后,还要设置两个环境变量来支持scim
VSLICK_XIM 要设置为 scim
XMODIFIERS 要设置为 @scim

但研究发现, 可以将这两个配置
VSLICK_XIM=scim
XMODIFIER=@im=scim
放到
安装目录的 bin/vslick.ini 中

源码浏览工具

Linux 发表评论

对于Linux Kernel和Firefox这样大的工程,没有一个好的源码浏览工具会很痛苦。

早些时候,试过vim+ctags,  cscope,  source navigator

cscope有一个GUI前端,叫做Cbrowser, 还有一个Qt的前端,叫KScope

都不怎么好用,所以就破解了slickedit

现在发现source navigator 项目又重新启动了,很期待

编辑器有Scite了,源码阅读有source navigator,那我机器上的最后一个non-free的slickedit也要remove了

slickedit 命令行

Linux 发表评论

按/就可以进入命令模式

在下面状态栏的地方出现一个输入框,可以输入slickedit的命令,比如load-hotfix 来安装hotfix

并且输入命令的时候,有很多提示,可以供选择,如果你不太记得命令的话

弹出文件选择对话框

Applying hot fix: /home/gavin/tmp/hotfix_se1302_cumulative.zip
Copying module to: /home/gavin/.slickedit/13.0.2/hotfixes/stdcmds.e
Copying module to: /home/gavin/.slickedit/13.0.2/hotfixes/ftpclien.e
Copying module to: /home/gavin/.slickedit/13.0.2/hotfixes/ftpopen.e
Modules copied.
Loading module: /home/gavin/.slickedit/13.0.2/hotfixes/stdcmds.e
Loading module: /home/gavin/.slickedit/13.0.2/hotfixes/ftpclien.e
Loading module: /home/gavin/.slickedit/13.0.2/hotfixes/ftpopen.e
Done.

Code Quick, Think Slick

Linux, 逆向工程 41 条评论

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发布的破解,就是这么改的。有人抱怨  每次跳出那个什么 窗口,可能是没有把那个每次启动都显示的选项去掉。我认为不是破解的问题。