参考了52pojie上的文章
https://www.52pojie.cn/thread-595351-1-1.html,该文注重分析WinEdt的注册算法,而我下面要写的是修改关键跳转点的爆破方法。
(当然,还是要把思杰马克丁这种流氓公司拉出来批判一番:
https://bbs.kafan.cn/thread-2091302-1-1.html
https://bbs.kafan.cn/thread-2095728-1-1.html )
先以32位版为例,用IDA打开安装路径下的WinEdt.exe,未注册版的WinEdt会在标题栏中显示(Unregistered Copy),在IDA中按Alt+T搜不出“Unregistered Copy”,只能用Unregistered来搜,结果如下
最上面的那个分支就是一个关键分支(662E60 jnz short loc_662EC7),再经过几次分叉后一共有5种情形: Expired Copy, Unregistered Copy: Expired Trial Period, Unregistered Copy: Extended Trial, Unregistered Copy以及“已注册”,很明显,把662E60处的jnz short loc_662EC7改为jmp short loc_662EC7即可,十六进制的75 65变成EB 65.
可以看到一共有9处call MessageBeep,前面7个call MessageBeep的前一条指令都是push 0,第8个call MessageBeep的前一条指令是push 30h,第9个call MessageBeep的前一条指令是push esi. 我对这9个call MessageBeep都下了断点之后,发现第8个call MessageBeep是关键的,push 30h中30h的含义是MB_ICONEXCLAMATION.
在7D0D90处,我们希望跳转到loc_7D0E4D,而不希望执行call sub_7B1AB0. 所以,将从7D0D90开始的6个字节0F 85 B7 00 00 00改为E9 B8 00 00 00 90(有两个字节没有改变),指令由jnz loc_7D0E4D变成jmp loc_7D0E4D。
自然不希望执行“Trial Exit”部分的代码,把885F87处的jnz short loc_885FCE改成jmp short loc_885FCE,十六进制的75 45变成EB 45.
原始的WinEdt.exe的MD5值是7757CBD992210738CCAFC250A8E776C7,修改后的WinEdt.exe的MD5值是9EC33B10555B62CEF37E10E457C02F44。
破解文件下载地址(包含32位和64位): https://pan.baidu.com/s/1Z5nFS-DaARMmx5VSlWqdAQ 提取密码: 7v4r.
如果破解文件有问题,请在评论区告诉我。
(当然,还是要把思杰马克丁这种流氓公司拉出来批判一番:
https://bbs.kafan.cn/thread-2091302-1-1.html
https://bbs.kafan.cn/thread-2095728-1-1.html )
先以32位版为例,用IDA打开安装路径下的WinEdt.exe,未注册版的WinEdt会在标题栏中显示(Unregistered Copy),在IDA中按Alt+T搜不出“Unregistered Copy”,只能用Unregistered来搜,结果如下
双击(前三个结果中的任意一个)进入sub_ 662E38,在IDA中可以看到如下结构,
最上面的那个分支就是一个关键分支(662E60 jnz short loc_662EC7),再经过几次分叉后一共有5种情形: Expired Copy, Unregistered Copy: Expired Trial Period, Unregistered Copy: Extended Trial, Unregistered Copy以及“已注册”,很明显,把662E60处的jnz short loc_662EC7改为jmp short loc_662EC7即可,十六进制的75 65变成EB 65.
31天的试用期结束后,在启动时会出现如下弹窗,而且,很重要的一个细节是,弹窗的同时也会有一个提示音,若不是当时我的电脑没处于静音模式,我肯定难以发现这条关键线索。
这个提示音是user32中的MessageBeep函数发出的,
可以看到一共有9处call MessageBeep,前面7个call MessageBeep的前一条指令都是push 0,第8个call MessageBeep的前一条指令是push 30h,第9个call MessageBeep的前一条指令是push esi. 我对这9个call MessageBeep都下了断点之后,发现第8个call MessageBeep是关键的,push 30h中30h的含义是MB_ICONEXCLAMATION.
有两处调用了push 30h所在的函数sub_7B1AB0,先看第一个7D0AB0+32B=7D0DDB,
在7D0D90处,我们希望跳转到loc_7D0E4D,而不希望执行call sub_7B1AB0. 所以,将从7D0D90开始的6个字节0F 85 B7 00 00 00改为E9 B8 00 00 00 90(有两个字节没有改变),指令由jnz loc_7D0E4D变成jmp loc_7D0E4D。
再看start(885EE4)+C1=885FA5,
自然不希望执行“Trial Exit”部分的代码,把885F87处的jnz short loc_885FCE改成jmp short loc_885FCE,十六进制的75 45变成EB 45.
下图是修改位置的汇总
64位的WinEdt的分析方法差不多,下面直接给结果
原始的WinEdt.exe的MD5值是7757CBD992210738CCAFC250A8E776C7,修改后的WinEdt.exe的MD5值是9EC33B10555B62CEF37E10E457C02F44。
破解文件下载地址(包含32位和64位): https://pan.baidu.com/s/1Z5nFS-DaARMmx5VSlWqdAQ 提取密码: 7v4r.
如果破解文件有问题,请在评论区告诉我。