水晶排课 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编译。但总体来看,作者对解密了解不多。想要提高加密, 还要从了解解密入手。 不错,分析的头头是道.是MD5的加密运用. 解说得很透彻啊,呵呵 破解工具: LoadPE IR DiE 野猪
哪位知道,以上这个是几个破解软件呀 . 解说得透彻,分析的头头是道.辛苦了. 貌似分析的很透彻,菜鸟我羡慕死了~~ 水晶排课 3.80 在网上绝种了。。。不知道那位朋友有的话可以共享一下子三。/:014 郁闷了。头一次调试看到上边的东西了。。。。第二次开始后,一调试程序就结束了。。。不知道怎么回事。。 开始学习算法了,希望从此走向新生 讲解的很明白,学习一下:)
页:
[1]
2