|
![]() | 作者: yongmin [yongmin]
![]() |
登录 |
作者:Nisy (梦醒时分) 水晶排课 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 野猪 破解声明: 只是感兴趣,无他. [Copy to clipboard] [ - ] CODE: ――――――――――――――――――――――――――――――― ――――――――――――――――――――――――――――――― 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:[ESI+FFF0C000] 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,但是这个没什么用)。 QUOTE: 通过调试,我们发现软件是如何检测被调试的: 0012E8B4 6601B0C3 返回到 msvbvm60.6601B0C3 来自 msvbvm60.__vbaStrComp 0012E8B8 00000000 0012E8BC 0042AA10 UNICODE "explorer.exe" 0012E8C0 00151964 UNICODE "avp.exe" 0012E8C4 660FD4B0 返回到 msvbvm60.660FD4B0 来自 msvbvm60.6601B0A9 0012E8C8 00000000 0012E8CC 0042AA10 UNICODE "explorer.exe" 0012E8D0 00151964 UNICODE "avp.exe" 他会对比我们系统中运行的每一个进程,来判断是否被调试。 [Copy to clipboard] [ - ] CODE: 我们一路F9,直到在堆栈中看到我们的机器码: 0012E8B4 6601B0C3 返回到 msvbvm60.6601B0C3 来自 msvbvm60.__vbaStrComp 0012E8B8 00000000 0012E8BC 0042093C unpack_.0042093C 0012E8C0 00150EB4 UNICODE "L420VACG" 0012E8C4 660FD4B0 返回到 msvbvm60.660FD4B0 来自 msvbvm60.6601B0A9 0012E8C8 00000000 0012E8CC 0042093C unpack_.0042093C 0012E8D0 00150EB4 UNICODE "L420VACG" 这个时候F9的速度就要放慢了,大概四五次之后,我们在堆栈中看到连续的两处存放机器码: 0012E8B4 6601B0C3 返回到 msvbvm60.6601B0C3 来自 msvbvm60.__vbaStrComp 0012E8B8 00000000 0012E8BC 00151AC4 UNICODE "L420VACG" 0012E8C0 00151B5C UNICODE "L420VACG" 0012E8C4 660FD4B0 返回到 msvbvm60.660FD4B0 来自 msvbvm60.6601B0A9 0012E8C8 00000000 0012E8CC 00151AC4 UNICODE "L420VACG" 0012E8D0 00151B5C UNICODE "L420VACG" 这个时候我们F9一次,就可以在堆栈中找到真码了: 0012E8B4 6601B0C3 返回到 msvbvm60.6601B0C3 来自 msvbvm60.__vbaStrComp 0012E8B8 00000000 0012E8BC 00151F04 UNICODE "F195F0C76DF012EEB1F828D209CC2CE6" 0012E8C0 00151E84 UNICODE "F195F0C76DF012EEB1F828D209CC2CE6" 0012E8C4 660FD4B0 返回到 msvbvm60.660FD4B0 来自 msvbvm60.6601B0A9 0012E8C8 00000000 0012E8CC 00151F04 UNICODE "F195F0C76DF012EEB1F828D209CC2CE6" 0012E8D0 00151E84 UNICODE "F195F0C76DF012EEB1F828D209CC2CE6" 0012E8D4 00000000 0012E8D8 004F0000 unpack_.004F0000 0012E8DC 0014E750 0012E8E0 00151AC4 UNICODE "519DC0E27C" 0012E8E4 0012FAEC 0012E8E8 00000000 0012E8EC 00000000 0012E8F0 00151B04 UNICODE "519DC0E27C" 0012E8F4 00000000 0012E8F8 00530008 unpack_.00530008 0012E8FC 00000008 0012E900 00151964 UNICODE "0E27C" 0012E904 00151A84 UNICODE "519DC" 0012E908 00000008 0012E90C 00000000 0012E910 00151E1C UNICODE "519DCEBFACA3B79E937C67D72CD0E27C" 0012E914 00000000 0012E918 00000000 0012E91C 00000000 0012E920 00000000 0012E924 00000000 0012E928 00000000 0012E92C 00000000 0012E930 00000000 0012E934 00151F04 UNICODE "F195F0C76DF012EEB1F828D209CC2CE6" 0012E938 00140000 0012E93C 004FD140 unpack_.004FD140 0012E940 00151A5C UNICODE "L420VACG" 0012E944 00000000 0012E948 00151E84 UNICODE "F195F0C76DF012EEB1F828D209CC2CE6" 0012E94C 00151AC4 UNICODE "519DC0E27C" 0012E950 00151B04 UNICODE "519DC0E27C" 0012E954 00151A5C UNICODE "L420VACG" QUOTE: 我们看这里:“519DC0E27C”就是真码: 而真码是如何进行计算呢?我们看一下这里就可以明白: 0012E900 00151964 UNICODE "0E27C" 0012E904 00151A84 UNICODE "519DC" 0012E908 00000008 0012E90C 00000000 0012E910 00151E1C UNICODE "519DCEBFACA3B79E937C67D72CD0E27C" 计算某个数值的MD5,取该数值MD5的前5位和后5位,连接后即是真码,也是就说真码是10位。 我们来检测一下机器码的MD5: JQM:L420VACG MD5: A4077FF2497477C6CDCF01F769B97BFC ![]() 看来这里用的不是常规的MD5,从32位这个数值来看,可以大致来推出是MD的运算,我们用KANAL查看一下,确实是MD5。 ![]() 那就有两种可能,一是把四个常数替换了,还有一个就是先对机器码做了一个运算,然后MD5。第二种可能性更大些。明码比较,由于本人P-CODE不熟悉,所以分析就到此为止了,有兴趣的朋友自己跟一下吧。 总结下: 软件作者有了一定的加密意识,双壳+反调试+P-CODE编译。但总体来看,作者对解密了解不多。想要提高加密, 还要从了解解密入手。 ![]() |
地主 发表时间: 07-07-07 10:14 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号