• 标 题:暴力破解windows Commander 4.52 (5千字)
  • 作 者:mjing
  • 时 间:2001-2-19 16:28:20
  • 链 接:http://bbs.pediy.com

破解 Windows Commander 4.52

看了精华论坛II(感谢看雪及各位大侠的精彩文章)中
JOHNSON(C-Pen)大侠破解wincmd4.5的文章,手有些发痒,
于是就下载了WinCmd4.52版练习练习。

所用工具:Trw2000 1.22(注册版),UltraEdit 8.0

一、脱壳

    用FileInfo 2.43检测是用ASPACK2.1加的壳,但
用UnAsPack1.0.9.1自动脱壳无效,(Why???,I don't know.),
按照JOHNSON大侠的方法,用Trw2K载入WinCMD32.exe下命令

pnewsec<Enter>

耐心地等一会儿,等trw2K跳出后,下命令

makepe<Enter>

这样,就在WinCmd的目录下生成了一个newpe.exe文件,它
就是脱壳后的文件。

二、去除CRC检验

    程序发现自身被修改后,会提示有病毒,然后退出。
用MessageBoxa断点拦截后,找不到跳转点,这是和4.5版
不同之处,和4.0版倒是一样(不知作者是出于什么心理)。
估计一下,从程序启动完成到弹出有病毒提示大约为5秒钟,
因此,重新载入,下断点

bpx settimer<Enter>

运行程序,拦下后,用pmodule命令返回,可以看到以下代码,
如果没有看到,可以继续运行,重复上面动作,一定能找到:

015F:004EF70C  MOV      EBX,EAX
015F:004EF70E  CMP      BYTE [EBX+051F],00
015F:004EF715  JNZ      004EF737    ;关键的跳转,改成JMP就没问题了
015F:004EF717  MOV      BYTE [EBX+051F],01
015F:004EF71E  PUSH    BYTE +00
015F:004EF720  PUSH    DWORD 1388    ;1388即十进制的5000,即5000毫秒
015F:004EF725  PUSH    DWORD 0541
015F:004EF72A  MOV      EAX,EBX
015F:004EF72C  CALL    00421AB8
015F:004EF731  PUSH    EAX
015F:004EF732  CALL    `USER32!SetTimer`

如此改了之后,程序还会不定时的自动退出。还有陷井,问题是它没有提示,
如何找到它呢,猜想不是使用的时钟,大概是在执行具体功能时检测的,
试一下,删除一个文件,结果自动退出,OK,有办法了,载入后,下断点

bpx messageboxa

全速运行,找一个没有的文件删除,被拦下后,用pmodule(这个命令太COOL了)
返回,F10步步跟踪,看到了如下代码:
015F:004F3BA0  JMP      NEAR [ECX+00545298]
015F:004F3BA6  SUB      EAX,23B9
015F:004F3BAB  JZ      004F3BB7  ;关键的跳转,改成JMP就OK     
015F:004F3BAD  MOV      EAX,01
015F:004F3BB2  CALL    004044FC  ;此CALL将退出程序
015F:004F3BB7  CALL    0044CD54 
015F:004F3BBC  XOR      EAX,EAX
015F:004F3BBE  POP      EDX
015F:004F3BBF  POP      ECX
015F:004F3BC0  POP      ECX

三、去除NAG,反复看了johnson大侠的文章XX遍,还好找到了,
可让我省了很多很多的力气要先假造wincmd.key文件
用createfilea断点拦截,拦下后,d eax 看一下内存中的数据,
有Wincmd.key字眼就找到了,
015F:004D944B  LEA      EDX,[EBP+FFFFFE60]
015F:004D9451  MOV      ECX,10
015F:004D9456  CALL    00402A24     
015F:004D945B  JZ      004D945F      ;此处此处可改成JMP,

其实不跳也行,跳了会显示乱码,

015F:004D945D  XOR      EBX,EBX      ;EBX为注册标志,盯住它,没错
015F:004D945F  MOV      EAX,[EBP+FFFFFEFC]
015F:004D9465  CALL    00402CBC
015F:004D946A  MOV      EAX,[EBP+FFFFFEF8]
015F:004D9470  CALL    00402CBC
015F:004D9475  MOV      EAX,[EBP+FFFFFEF4]
015F:004D947B  CALL    00402CBC
015F:004D9480  MOV      [0054F6CC],BL
015F:004D9486  MOV      EAX,[0054F6C8]
015F:004D948B  NEG      EAX
015F:004D948D  IMUL    EAX,EAX,BYTE +25
015F:004D9490  MOV      [0054F6C8],EAX

将注册标志存入内存处为:

015F:004D9451  MOV      ECX,10
015F:004D9456  CALL    00402A24  ;再次比较KEY文件
015F:004D945B  JZ      004D945F
015F:004D945D  XOR      EBX,EBX    ;EBX被清则表示未注册
015F:004D945F  MOV      EAX,[EBP+FFFFFEFC]
015F:004D9465  CALL    00402CBC
015F:004D946A  MOV      EAX,[EBP+FFFFFEF8]
015F:004D9470  CALL    00402CBC
015F:004D9475  MOV      EAX,[EBP+FFFFFEF4]
015F:004D947B  CALL    00402CBC
015F:004D9480  MOV      [0054F6CC],BL    ;存入注册标志此处不管有无KEY文件都会走到
015F:004D9486  MOV      EAX,[0054F6C8]
015F:004D948B  NEG      EAX
015F:004D948D  IMUL    EAX,EAX,BYTE +25

因此,我们不必假造KEY文件,只要让上面的BL值为1不就行了么?
我找了下处

015F:004D8DBD  JNZ      004D8DE0
015F:004D8DBF  LEA      EAX,[EBP+FFFFFEE2]
015F:004D8DC5  PUSH    EAX
015F:004D8DC6  LEA      EDX,[EBP+FFFFFA70]
015F:004D8DCC  MOV      CX,0400
015F:004D8DD0  MOV      EAX,ESI
015F:004D8DD2  CALL    0043CF10
015F:004D8DD7  MOV      EAX,ESI
015F:004D8DD9  CALL    0043CEA0
015F:004D8DDE  JMP      SHORT 004D8DEB
015F:004D8DE0  XOR      EBX,EBX
015F:004D8DE2  MOV      WORD [EBP+FFFFFEE2],00
015F:004D8DEB  CMP      WORD [EBP+FFFFFEE2],80
015F:004D8DF4  SETZ    [0054F6CD]
015F:004D8DFB  MOV      BYTE [EBP+FFFFFEE1],01
015F:004D8E02  TEST    BL,BL        ;在此行上动手脚 改成 mov bl,01
015F:004D8E04  JZ      NEAR 004D90F4  ;在此行上动手脚 改成 jmp 004d90f4,再补一个NOP
015F:004D8E0A  LEA      EAX,[EBP+FFFFF608]
015F:004D8E10  PUSH    EAX
015F:004D8E11  CALL    `KERNEL32!GetTimeZoneInformation`
015F:004D8E16  INC      EAX
015F:004D8E17  JZ      004D8E35

另外再把015F:004D945D处改成2个NOP
当然具体改法很多,自己决定吧!

这样,运行程序没有NAG了,但标题栏显示为Not Registered ,不管它了,
当然也可改掉,不过我很懒啦,反正已经达到目的了,至此为止!
通过分析,可以知道,第一次比较KEY文件为判断是否注册,
第二次比较KEY文件为判断是否要出NAG。

这篇破文总算是写完了,花了我很长时间,虽然没有什么新意,但也很累。
看了网上那么多大侠的文章,我也把自己的一点体会写出来,算占一点回报吧。

如有遗漏可来E-mail联系,没有时间作全面充分的测试(现在的软件陷井多多)

再见吧!各位好运!!!!!

written by mjing  E-mail:mjing@wx88.net  2001-2-19