Nisy 发表于 2007-8-12 02:05:30

水晶排课 3.80 简单分析

水晶排课 3.80
软件大小:7704KB
软件类别:国产软件/教育管理
下载次数:8853
软件授权:免费版 (这里的免费指的是免费下载)
软件语言:简体中文
运行环境:Win9x/Me/NT/2000/XP/2003
更新时间:2007-7-2 9:56:42
华军下载:http://www.onlinedown.net/soft/48706.htm

破解工具: LoadPE IR DiE 野猪
破解声明: 只是感兴趣,无他.


———————————————————————————————
———————————————————————————————
0059B082 >60            PUSHAD
0059B083    E8 00000000   CALL 水晶排课.0059B088                     ; 这里ESP定律
———————————————————————————————
———————————————————————————————
0059B36B    61            POPAD
0059B36C- FFE0            JMP EAX                                    ; 来到这里 我们F8单步一次
———————————————————————————————
———————————————————————————————
005926E0    60            PUSHAD                                       ; 又看到PUSHAD
005926E1    BE 00504F00   MOV ESI,水晶排课.004F5000                  ; 这里继续ESP定律
005926E6    8DBE 00C0F0FF   LEA EDI,DWORD PTR DS:
005926EC    57            PUSH EDI
005926ED    83CD FF         OR EBP,FFFFFFFF
005926F0    EB 10         JMP SHORT 水晶排课.00592702
———————————————————————————————
———————————————————————————————
00592850    61            POPAD
00592851- E9 9AE9E6FF   JMP 水晶排课.004011F0                        ; 第二次ESP定律后来到这里F8单步一次
———————————————————————————————
———————————————————————————————
004011F0    68 BC724000   PUSH 水晶排课.004072BC                     ; 来到OEP 原来是VB程序
004011F5    E8 F0FFFFFF   CALL 水晶排课.004011EA                     ; JMP 到 MSVBVM60.ThunRTMain
———————————————————————————————
———————————————————————————————


LoadPE Dump, IR修复。 修复后,DiE查看一下,P-CODE编译的,对P-CODE不了解,先注册看看,实在不行在Vbdebug搞它。




运行修复文件,可以运行,那就省去修复了。软件重启动验证,我们随意输入KEY重启看看。VB呢,有个比较函数,如果软件使用了这个函数来比较真假注册码,即便是P-CODE,也是徒劳。因为VB对比数据的时候大多在堆栈中进行,导致了明码比较存在的这个致命伤。

一般OD还不行,那我们就野猪对付。下_vbsStrComp (我初下断点的时候还下了个_vbsStrCmp,但是这个没什么用)。


通过调试,我们发现软件是如何检测被调试的:

0012E8B4   6601B0C3返回到 msvbvm60.6601B0C3 来自 msvbvm60.__vbaStrComp
0012E8B8   00000000
0012E8BC   0042AA10UNICODE "explorer.exe"
0012E8C0   00151964UNICODE "avp.exe"
0012E8C4   660FD4B0返回到 msvbvm60.660FD4B0 来自 msvbvm60.6601B0A9
0012E8C8   00000000
0012E8CC   0042AA10UNICODE "explorer.exe"
0012E8D0   00151964UNICODE "avp.exe"

他会对比我们系统中运行的每一个进程,来判断是否被调试。

我们一路F9,直到在堆栈中看到我们的机器码:

0012E8B4   6601B0C3返回到 msvbvm60.6601B0C3 来自 msvbvm60.__vbaStrComp
0012E8B8   00000000
0012E8BC   0042093Cunpack_.0042093C
0012E8C0   00150EB4UNICODE "L420VACG"
0012E8C4   660FD4B0返回到 msvbvm60.660FD4B0 来自 msvbvm60.6601B0A9
0012E8C8   00000000
0012E8CC   0042093Cunpack_.0042093C
0012E8D0   00150EB4UNICODE "L420VACG"

这个时候F9的速度就要放慢了,大概四五次之后,我们在堆栈中看到连续的两处存放机器码:

0012E8B4   6601B0C3返回到 msvbvm60.6601B0C3 来自 msvbvm60.__vbaStrComp
0012E8B8   00000000
0012E8BC   00151AC4UNICODE "L420VACG"
0012E8C0   00151B5CUNICODE "L420VACG"
0012E8C4   660FD4B0返回到 msvbvm60.660FD4B0 来自 msvbvm60.6601B0A9
0012E8C8   00000000
0012E8CC   00151AC4UNICODE "L420VACG"
0012E8D0   00151B5CUNICODE "L420VACG"

这个时候我们F9一次,就可以在堆栈中找到真码了:

0012E8B4   6601B0C3返回到 msvbvm60.6601B0C3 来自 msvbvm60.__vbaStrComp
0012E8B8   00000000
0012E8BC   00151F04UNICODE "F195F0C76DF012EEB1F828D209CC2CE6"
0012E8C0   00151E84UNICODE "F195F0C76DF012EEB1F828D209CC2CE6"
0012E8C4   660FD4B0返回到 msvbvm60.660FD4B0 来自 msvbvm60.6601B0A9
0012E8C8   00000000
0012E8CC   00151F04UNICODE "F195F0C76DF012EEB1F828D209CC2CE6"
0012E8D0   00151E84UNICODE "F195F0C76DF012EEB1F828D209CC2CE6"
0012E8D4   00000000
0012E8D8   004F0000unpack_.004F0000
0012E8DC   0014E750
0012E8E0   00151AC4UNICODE "519DC0E27C"
0012E8E4   0012FAEC
0012E8E8   00000000
0012E8EC   00000000
0012E8F0   00151B04UNICODE "519DC0E27C"
0012E8F4   00000000
0012E8F8   00530008unpack_.00530008
0012E8FC   00000008
0012E900   00151964UNICODE "0E27C"
0012E904   00151A84UNICODE "519DC"
0012E908   00000008
0012E90C   00000000
0012E910   00151E1CUNICODE "519DCEBFACA3B79E937C67D72CD0E27C"
0012E914   00000000
0012E918   00000000
0012E91C   00000000
0012E920   00000000
0012E924   00000000
0012E928   00000000
0012E92C   00000000
0012E930   00000000
0012E934   00151F04UNICODE "F195F0C76DF012EEB1F828D209CC2CE6"
0012E938   00140000
0012E93C   004FD140unpack_.004FD140
0012E940   00151A5CUNICODE "L420VACG"
0012E944   00000000
0012E948   00151E84UNICODE "F195F0C76DF012EEB1F828D209CC2CE6"
0012E94C   00151AC4UNICODE "519DC0E27C"
0012E950   00151B04UNICODE "519DC0E27C"
0012E954   00151A5CUNICODE "L420VACG"

我们看这里:“519DC0E27C”就是真码:

而真码是如何进行计算呢?我们看一下这里就可以明白:

0012E900   00151964UNICODE "0E27C"
0012E904   00151A84UNICODE "519DC"
0012E908   00000008
0012E90C   00000000
0012E910   00151E1CUNICODE "519DCEBFACA3B79E937C67D72CD0E27C"

计算某个数值的MD5,取该数值MD5的前5位和后5位,连接后即是真码,也是就说真码是10位。

我们来检测一下机器码的MD5:
JQM:L420VACG
MD5: A4077FF2497477C6CDCF01F769B97BFC

看来这里用的不是常规的MD5,从32位这个数值来看,可以大致来推出是MD的运算,我们用KANAL查看一下,确实是MD5。

那就有两种可能,一是把四个常数替换了,还有一个就是先对机器码做了一个运算,然后MD5。第二种可能性更大些。明码比较,由于本人P-CODE不熟悉,所以分析就到此为止了,有兴趣的朋友自己跟一下吧。


总结下:

软件作者有了一定的加密意识,双壳+反调试+P-CODE编译。但总体来看,作者对解密了解不多。想要提高加密, 还要从了解解密入手。

xuhw 发表于 2007-8-12 09:25:53

不错,分析的头头是道.是MD5的加密运用.

dyszcgl 发表于 2007-8-12 11:02:56

解说得很透彻啊,呵呵

yys5161 发表于 2007-8-13 09:06:28

破解工具: LoadPE IR DiE 野猪
哪位知道,以上这个是几个破解软件呀 .

tbs1956 发表于 2007-8-13 13:43:30

解说得透彻,分析的头头是道.辛苦了.

飘渺峰 发表于 2007-8-13 21:06:41

貌似分析的很透彻,菜鸟我羡慕死了~~

foxzf 发表于 2007-9-3 17:18:24

水晶排课 3.80 在网上绝种了。。。不知道那位朋友有的话可以共享一下子三。/:014

foxzf 发表于 2007-9-3 20:00:58

郁闷了。头一次调试看到上边的东西了。。。。第二次开始后,一调试程序就结束了。。。不知道怎么回事。。

phoenixkiller 发表于 2007-9-4 22:34:33

开始学习算法了,希望从此走向新生

dreamz 发表于 2007-9-5 06:30:29

讲解的很明白,学习一下:)
页: [1] 2
查看完整版本: 水晶排课 3.80 简单分析