FOXPRO程序的OD分析---国富达服装鞋帽管理系统去除时间限制
【破解作者】 jsliyangsj
【作者邮箱】 sjcrack@yahoo.com.cn
【使用工具】 peid OllyDbg1.10
【破解平台】 Winxp
【软件名称】 国富达服装鞋帽管理系统
【下载地址】 http://www.goft.net/
【编写语言】 FOXPRO
由于不懂FOXPRO,只好用OD慢慢跟,也没有办法,自己也要用这个软件,也向国富达公司要的最新版本,
公司开发者说只是时间上60天的限制,功能上没有任何限制,他说他们只是做更好的服务,软件要都这样多好:)
,要是连时间限制也没有就更好了!!,呵呵,
时间限制用断点GetLocalTime
……………………………………………………………………………………………………………………
0C006591 /$ 55 push ebp
0C006592 |. 8BEC mov ebp,esp
0C006594 |. 83EC 10 sub esp,10
0C006597 |. 56 push esi
0C006598 |. 8D45 F0 lea eax,dword ptr ss:[ebp-10]
0C00659B |. 57 push edi
0C00659C |. 8BF2 mov esi,edx
0C00659E |. 8BF9 mov edi,ecx
0C0065A0 |. 50 push eax ; /pLocaltime
0C0065A1 |. FF15 E4D12E0C call dword ptr ds:[<&KERNEL32.GetLocal>; \GetLocalTime 断在这里
0C0065A7 |. 0FB745 F0 movzx eax,word ptr ss:[ebp-10]
0C0065AB |. 8B4D 08 mov ecx,dword ptr ss:[ebp+8]
0C0065AE |. 8907 mov dword ptr ds:[edi],eax
0C0065B0 |. 0FB745 F2 movzx eax,word ptr ss:[ebp-E]
0C0065B4 |. 8906 mov dword ptr ds:[esi],eax
0C0065B6 |. 5F pop edi
0C0065B7 |. 0FB745 F6 movzx eax,word ptr ss:[ebp-A]
0C0065BB |. 8901 mov dword ptr ds:[ecx],eax
0C0065BD |. 5E pop esi
0C0065BE |. C9 leave
0C0065BF \. C2 0400 retn 4
………………………………………………………………………………………………………………
一共要中断6次到第6次停下来慢慢跟
………………………………………………………………………………………………………………
0C096049 . 8D4C24 08 lea ecx,dword ptr ss:[esp+8] ; |
0C09604D . E8 3F05F7FF call VFP6R.0C006591 ; \得到当前系统时间
0C096052 > C606 44 mov byte ptr ds:[esi],44
0C096055 . 8B4C24 04 mov ecx,dword ptr ss:[esp+4] ; 得到现在的年份
0C096059 . 8B5424 08 mov edx,dword ptr ss:[esp+8] ; 得到现在的日子
0C09605D . 51 push ecx
0C09605E . 8B4C24 10 mov ecx,dword ptr ss:[esp+10] ; 得到现在的月份
0C096062 . E8 040D0000 call VFP6R.0C096D6B ; 用现在的年、月、日计算出一个数据,用于后面比较
0C096067 . DD5E 10 fstp qword ptr ds:[esi+10] ; 把计算好的数据储存在0C2FE230
0C09606A . 5E pop esi
0C09606B . 83C4 0C add esp,0C
0C09606E . C3 retn
………………………………………………………………………………………………………………
进入0C096062 . E8 040D0000 call VFP6R.0C096D6B 把时间转化成某数据的计算的过程
………………………………………………………………………………………………………………
0C096D6B $ 55 push ebp
0C096D6C . 8BEC mov ebp,esp
0C096D6E . 83EC 18 sub esp,18
0C096D71 . 53 push ebx
0C096D72 . 56 push esi
0C096D73 . 8B75 08 mov esi,dword ptr ss:[ebp+8] ; 压入当前年份
0C096D76 . 8BDA mov ebx,edx ; 日子
0C096D78 . 83FB 01 cmp ebx,1
0C096D7B . 57 push edi
0C096D7C . 894D FC mov dword ptr ss:[ebp-4],ecx ; 当前月份
0C096D7F . 8975 F8 mov dword ptr ss:[ebp-8],esi ; 当前年份
0C096D82 . 0F8C C4000000 jl VFP6R.0C096E4C
0C096D88 . 83F9 02 cmp ecx,2
0C096D8B . 7E 6C jle short VFP6R.0C096DF9
0C096D8D . 83E9 03 sub ecx,3
0C096D90 > 8BC6 mov eax,esi
0C096D92 . 6A 64 push 64
0C096D94 . 99 cdq
0C096D95 . 5F pop edi
0C096D96 . F7FF idiv edi ; 年份除以100余数在EDX中
0C096D98 . 6A 05 push 5
0C096D9A . 8BF8 mov edi,eax ; 除法得到的商
0C096D9C . 6BC0 64 imul eax,eax,64 ; 商再乘以100得到2000年
0C096D9F . 2BF0 sub esi,eax ; 与2000年相减得到与2000相差的数
0C096DA1 . 69FF B13A0200 imul edi,edi,23AB1 ; 除法得到的商年份前2未与146097相乘
0C096DA7 . 8BC1 mov eax,ecx
0C096DA9 . 69F6 B5050000 imul esi,esi,5B5 ; 年份与2000的差与1461相乘
0C096DAF . 69C0 99000000 imul eax,eax,99 ; 年份与2000的差与1461相乘的结果SAR2
0C096DB5 . C1FF 02 sar edi,2 ; 年份前2未与146097相乘的结果SAR2
0C096DB8 . C1FE 02 sar esi,2
0C096DBB . 03FB add edi,ebx ; 在EDI中加上日子数据
0C096DBD . 40 inc eax
0C096DBE . 40 inc eax
0C096DBF . 59 pop ecx
0C096DC0 . 99 cdq
0C096DC1 . F7F9 idiv ecx
0C096DC3 . 03FE add edi,esi ; 再相加
0C096DC5 . 8D8438 1F431A00 lea eax,dword ptr ds:[eax+edi+1A431F] ; 把得到数据再加上1A431F(16进制)最后结果
0C096DCC . 3D 1F431A00 cmp eax,1A431F
0C096DD1 . 8945 08 mov dword ptr ss:[ebp+8],eax
0C096DD4 . 7C 76 jl short VFP6R.0C096E4C
0C096DD6 . 3D 2CFE5100 cmp eax,51FE2C
0C096DDB . 7F 6F jg short VFP6R.0C096E4C
0C096DDD . 8B75 FC mov esi,dword ptr ss:[ebp-4]
0C096DE0 . DB45 08 fild dword ptr ss:[ebp+8] ; 装入整数到ST0
0C096DE3 . 8D46 FF lea eax,dword ptr ds:[esi-1] ; Switch (cases 1..C)
0C096DE6 . 83F8 0B cmp eax,0B
0C096DE9 . DD55 E8 fst qword ptr ss:[ebp-18] ; 把数据储存在EBP-18
0C096DEC . 0F87 3F8F0600 ja VFP6R.0C0FFD31
0C096DF2 . FF2485 546E090C jmp dword ptr ds:[eax*4+C096E54]
0C096DF9 > 83C1 09 add ecx,9
0C096DFC . 4E dec esi
0C096DFD .^ EB 91 jmp short VFP6R.0C096D90
0C096DFF > 83FB 1D cmp ebx,1D ; Case 2 of switch 0C096DE3
0C096E02 . 7C 41 jl short VFP6R.0C096E45
0C096E04 . 8D45 F0 lea eax,dword ptr ss:[ebp-10]
0C096E07 . 8D4D 08 lea ecx,dword ptr ss:[ebp+8]
0C096E0A . 50 push eax
0C096E0B . 8D45 F4 lea eax,dword ptr ss:[ebp-C]
0C096E0E . 50 push eax
0C096E0F . 51 push ecx
0C096E10 . D9C0 fld st
0C096E12 . 51 push ecx
0C096E13 . 8D55 FC lea edx,dword ptr ss:[ebp-4]
0C096E16 . DD1C24 fstp qword ptr ss:[esp]
0C096E19 . DDD8 fstp st
0C096E1B . E8 3E73F7FF call VFP6R.0C00E15E
0C096E20 . 3B75 08 cmp esi,dword ptr ss:[ebp+8]
0C096E23 . 75 27 jnz short VFP6R.0C096E4C
0C096E25 . 3B5D FC cmp ebx,dword ptr ss:[ebp-4]
0C096E28 . 75 22 jnz short VFP6R.0C096E4C
0C096E2A . 8B45 F8 mov eax,dword ptr ss:[ebp-8]
0C096E2D . 3B45 F4 cmp eax,dword ptr ss:[ebp-C]
0C096E30 . 75 1A jnz short VFP6R.0C096E4C
0C096E32 . DD45 E8 fld qword ptr ss:[ebp-18]
0C096E35 . EB 0E jmp short VFP6R.0C096E45
0C096E37 > 83FB 1E cmp ebx,1E ; Cases 4,6,9,B of switch 0C096DE3
0C096E3A . EB 03 jmp short VFP6R.0C096E3F
0C096E3C > 83FB 1F cmp ebx,1F ; Cases 1,3,5,7,8,A,C of switch 0C096DE3
0C096E3F > 0F8F EC8E0600 jg VFP6R.0C0FFD31
0C096E45 > 5F pop edi
0C096E46 . 5E pop esi
0C096E47 . 5B pop ebx
0C096E48 . C9 leave
0C096E49 . C2 0400 retn 4
……………………………………………………………………………………………………………………
来到这里 这里要循环好几次每次取执行的地址是不一样的。其中第3、5、6次是最重要的,
第3次得到软件的安装时间并用安装时间也计算出一个数据,第5次把计算好的数据加上60,
第6次,把安装时间加60的数据与用当前时间计算出来的数据比较,这里最关键
……………………………………………………………………………………………………………………
0C001429 > /3D 00010000 cmp eax,100
0C00142E . |0F87 4F9F0D00 ja VFP6R.0C0DB383
0C001434 . |FF1485 E0DA2E0C call dword ptr ds:[eax*4+C2EDAE0] ; 得到的数据(从01101464)乘以4加上C2EDAE0取值要F7
0C00143B > |8B0D 0CE02F0C mov ecx,dword ptr ds:[C2FE00C]
0C001441 . |33C0 xor eax,eax
0C001443 . |8A01 mov al,byte ptr ds:[ecx] ; 01101464开始取数据
0C001445 . |41 inc ecx ; 指向下一个
0C001446 . |3D FD000000 cmp eax,0FD ; 与FD比较
0C00144B . |890D 0CE02F0C mov dword ptr ds:[C2FE00C],ecx
0C001451 .^\75 D6 jnz short VFP6R.0C001429
……………………………………………………………………………………………………………………
第3次
……………………………………………………………………………………………………………………
0C040FE6 . 81EC 04010000 sub esp,104
0C040FEC . 56 push esi
0C040FED . E8 743CFCFF call VFP6R.0C004C66
0C040FF2 . 8BF0 mov esi,eax
0C040FF4 . 803E 30 cmp byte ptr ds:[esi],30
0C040FF7 . 0F84 14860900 je VFP6R.0C0D9611
0C040FFD . 8BCE mov ecx,esi
0C040FFF . E8 8B320600 call VFP6R.0C0A428F
0C041004 . 8BD6 mov edx,esi
0C041006 . 8D4C24 08 lea ecx,dword ptr ss:[esp+8]
0C04100A . E8 F56E0500 call VFP6R.0C097F04 ; 得到了安装时间
0C04100F . 8D4424 04 lea eax,dword ptr ss:[esp+4]
0C041013 . 8D4C24 08 lea ecx,dword ptr ss:[esp+8] ; 得到安装时间
0C041017 . 50 push eax
0C041018 . A1 10E02F0C mov eax,dword ptr ds:[C2FE010]
0C04101D . 51 push ecx
0C04101E . 8D56 10 lea edx,dword ptr ds:[esi+10]
0C041021 . 8B08 mov ecx,dword ptr ds:[eax]
0C041023 . 81C1 FC000000 add ecx,0FC
0C041029 . E8 0B000000 call VFP6R.0C041039 ; 关键进入,用得到安装时间计算出数据
…………………………………………………………………………………………………………………………
0C041029 . E8 0B000000 call VFP6R.0C041039 ; 关键进入,用得到安装时间计算出数据
经分析安装时间放在E:\WINDOWS\system32\win32.bin中
…………………………………………………………………………………………………………………………
0C041039 $ 55 push ebp
0C04103A . 8BEC mov ebp,esp
0C04103C . 51 push ecx
0C04103D . 51 push ecx
0C04103E . 53 push ebx
0C04103F . 8B5D 0C mov ebx,dword ptr ss:[ebp+C]
0C041042 . 56 push esi
0C041043 . 8B75 08 mov esi,dword ptr ss:[ebp+8]
0C041046 . 57 push edi
0C041047 . 8BFA mov edi,edx
0C041049 . D9EE fldz
0C04104B . 53 push ebx
0C04104C . 56 push esi
0C04104D . DD1F fstp qword ptr ds:[edi]
0C04104F . 8D55 F8 lea edx,dword ptr ss:[ebp-8]
0C041052 . E8 2B000000 call VFP6R.0C041082 ; 计算安装软件的日期转换的结果存入0012F848
0C041057 . 03F0 add esi,eax
0C041059 > 803E 20 cmp byte ptr ds:[esi],20
0C04105C . 0F84 C7E90B00 je VFP6R.0C0FFA29
0C041062 . 803E 00 cmp byte ptr ds:[esi],0
0C041065 . 0F85 C4E90B00 jnz VFP6R.0C0FFA2F
0C04106B . 85C0 test eax,eax
0C04106D . 0F84 CBE90B00 je VFP6R.0C0FFA3E
0C041073 . DD45 F8 fld qword ptr ss:[ebp-8] ; 装入安装时间计算的数据到STO(上面的结果)
0C041076 . 6A 01 push 1
0C041078 . DD1F fstp qword ptr ds:[edi] ; 保存结果到0C2FE25C
0C04107A . 58 pop eax
0C04107B > 5F pop edi
0C04107C . 5E pop esi
0C04107D . 5B pop ebx
0C04107E . C9 leave
0C04107F . C2 0800 retn 8
……………………………………………………………………………………………………
0C041082 $ 55 push ebp
0C041083 . 8BEC mov ebp,esp
0C041085 . 83EC 3C sub esp,3C
0C041088 . 8B45 08 mov eax,dword ptr ss:[ebp+8]
0C04108B . 53 push ebx
0C04108C . 56 push esi
0C04108D . 8BF1 mov esi,ecx
0C04108F . D9EE fldz
0C041091 . 33DB xor ebx,ebx
0C041093 . 57 push edi
0C041094 . DD1A fstp qword ptr ds:[edx]
0C041096 . 8955 C8 mov dword ptr ss:[ebp-38],edx
0C041099 . 8975 F0 mov dword ptr ss:[ebp-10],esi
0C04109C . 8945 C4 mov dword ptr ss:[ebp-3C],eax
0C04109F . 895D F8 mov dword ptr ss:[ebp-8],ebx
0C0410A2 > 8038 20 cmp byte ptr ds:[eax],20
0C0410A5 . 0F84 9AE90B00 je VFP6R.0C0FFA45
0C0410AB . 33C9 xor ecx,ecx
0C0410AD . 8038 5E cmp byte ptr ds:[eax],5E
0C0410B0 . 0F94C1 sete cl
0C0410B3 . 3BCB cmp ecx,ebx
0C0410B5 . 894D F4 mov dword ptr ss:[ebp-C],ecx
0C0410B8 . 0F85 90E90B00 jnz VFP6R.0C0FFA4E
0C0410BE > 8D45 D0 lea eax,dword ptr ss:[ebp-30]
0C0410C1 . 8D55 DC lea edx,dword ptr ss:[ebp-24]
0C0410C4 . 50 push eax
0C0410C5 . 8D4D 08 lea ecx,dword ptr ss:[ebp+8]
0C0410C8 . 895D E0 mov dword ptr ss:[ebp-20],ebx
0C0410CB . 895D D4 mov dword ptr ss:[ebp-2C],ebx
0C0410CE . 895D D8 mov dword ptr ss:[ebp-28],ebx
0C0410D1 . 895D DC mov dword ptr ss:[ebp-24],ebx
0C0410D4 . 895D E4 mov dword ptr ss:[ebp-1C],ebx
0C0410D7 . 895D CC mov dword ptr ss:[ebp-34],ebx
0C0410DA . 895D D0 mov dword ptr ss:[ebp-30],ebx
0C0410DD . E8 17010000 call VFP6R.0C0411F9 ; 计算年份的16进制数
0C0410E2 . 8945 EC mov dword ptr ss:[ebp-14],eax ; 放入EAX中
0C0410E5 . 8B45 08 mov eax,dword ptr ss:[ebp+8]
0C0410E8 . 8A00 mov al,byte ptr ds:[eax]
0C0410EA . 3C 2F cmp al,2F
0C0410EC . 0F85 65E90B00 jnz VFP6R.0C0FFA57
0C0410F2 > FF45 08 inc dword ptr ss:[ebp+8]
0C0410F5 > 8D45 CC lea eax,dword ptr ss:[ebp-34]
0C0410F8 . 8D55 D8 lea edx,dword ptr ss:[ebp-28]
0C0410FB . 50 push eax
0C0410FC . 8D4D 08 lea ecx,dword ptr ss:[ebp+8]
0C0410FF . E8 F5000000 call VFP6R.0C0411F9 ; 这里准备计算月份
0C041104 . 8945 E8 mov dword ptr ss:[ebp-18],eax
0C041107 . 8B45 08 mov eax,dword ptr ss:[ebp+8]
0C04110A . 8A00 mov al,byte ptr ds:[eax]
0C04110C . 3C 2F cmp al,2F
0C04110E . 0F85 7EE90B00 jnz VFP6R.0C0FFA92
0C041114 > FF45 08 inc dword ptr ss:[ebp+8]
0C041117 > 8D45 E4 lea eax,dword ptr ss:[ebp-1C]
0C04111A . 8D55 D4 lea edx,dword ptr ss:[ebp-2C]
0C04111D . 50 push eax
0C04111E . 8D4D 08 lea ecx,dword ptr ss:[ebp+8]
0C041121 . E8 D3000000 call VFP6R.0C0411F9 ; 计算日期的16进制
0C041126 . 8B75 DC mov esi,dword ptr ss:[ebp-24]
0C041129 . 8B7D D8 mov edi,dword ptr ss:[ebp-28]
0C04112C . 8B55 D4 mov edx,dword ptr ss:[ebp-2C]
0C04112F . 3BF3 cmp esi,ebx
0C041131 . 8945 E0 mov dword ptr ss:[ebp-20],eax ; 储存
0C041134 . 0F84 90E90B00 je VFP6R.0C0FFACA
0C04113A > 395D F4 cmp dword ptr ss:[ebp-C],ebx
0C04113D . 0F85 A4E90B00 jnz VFP6R.0C0FFAE7
0C041143 . 8B4D F0 mov ecx,dword ptr ss:[ebp-10]
0C041146 . 8A49 14 mov cl,byte ptr ds:[ecx+14]
0C041149 > 0FB6C9 movzx ecx,cl
0C04114C . 2BCB sub ecx,ebx
0C04114E . 0F85 9AE90B00 jnz VFP6R.0C0FFAEE
0C041154 . 3BF3 cmp esi,ebx
0C041156 . 0F84 8AEA0B00 je VFP6R.0C0FFBE6
0C04115C . 3BFB cmp edi,ebx
0C04115E . 0F84 82EA0B00 je VFP6R.0C0FFBE6
0C041164 . 8B7D EC mov edi,dword ptr ss:[ebp-14]
0C041167 . 8B5D E8 mov ebx,dword ptr ss:[ebp-18]
0C04116A > 85D2 test edx,edx
0C04116C . 0F84 CAE90B00 je VFP6R.0C0FFB3C
0C041172 . 8945 FC mov dword ptr ss:[ebp-4],eax
0C041175 > 8B4D E4 mov ecx,dword ptr ss:[ebp-1C]
0C041178 > 837D F4 00 cmp dword ptr ss:[ebp-C],0
0C04117C . 0F85 D1E90B00 jnz VFP6R.0C0FFB53
0C041182 > C745 F8 0100000>mov dword ptr ss:[ebp-8],1
0C041189 > 837D FC FF cmp dword ptr ss:[ebp-4],-1
0C04118D . 6A 03 push 3
0C04118F . 5E pop esi
0C041190 . 0F84 CBE90B00 je VFP6R.0C0FFB61
0C041196 . 837D F4 00 cmp dword ptr ss:[ebp-C],0
0C04119A . 8B45 F0 mov eax,dword ptr ss:[ebp-10]
0C04119D . 75 09 jnz short VFP6R.0C0411A8
0C04119F . 8338 07 cmp dword ptr ds:[eax],7
0C0411A2 . 0F84 D4E90B00 je VFP6R.0C0FFB7C
0C0411A8 > 837D FC 64 cmp dword ptr ss:[ebp-4],64
0C0411AC . 0F8C EAE90B00 jl VFP6R.0C0FFB9C
0C0411B2 > 837D FC 00 cmp dword ptr ss:[ebp-4],0
0C0411B6 . 0F84 09EA0B00 je VFP6R.0C0FFBC5
0C0411BC > FF75 FC push dword ptr ss:[ebp-4] ; 压入年份的16进制
0C0411BF . 8BD3 mov edx,ebx ; 日期
0C0411C1 . 8BCF mov ecx,edi ; 月份
0C0411C3 . E8 A35B0500 call VFP6R.0C096D6B ; 把软件安装时的年、月、日重新以某种方式相加组合
0C0411C8 . 8B45 C8 mov eax,dword ptr ss:[ebp-38]
0C0411CB . D9C0 fld st
0C0411CD . DD18 fstp qword ptr ds:[eax] ; 储存入0012F848
0C0411CF . DC1D 10E12E0C fcomp qword ptr ds:[C2EE110]
0C0411D5 . DFE0 fstsw ax
………………………………………………………………………………………………………………
第5次
………………………………………………………………………………
0C0D913D . DD46 10 fld qword ptr ds:[esi+10] ; 得到安装日期计算后的值; Case 4449 of switch 0C09C66F
0C0D9140 . DC1D 78142F0C fcomp qword ptr ds:[C2F1478] ; 与0比较
0C0D9146 . DFE0 fstsw ax
0C0D9148 . F6C4 40 test ah,40
0C0D914B .^ 0F85 BD35FCFF jnz VFP6R.0C09C70E
0C0D9151 . DB47 0C fild dword ptr ds:[edi+C] ; 装入60
0C0D9154 . DC46 10 fadd qword ptr ds:[esi+10] ; 安装日期计算后的值+60(就是不能超过60天使用)
0C0D9157 . DD5E 10 fstp qword ptr ds:[esi+10] ; 存入原来地方
0C0D915A .^ E9 AF35FCFF jmp VFP6R.0C09C70E
……………………………………………………………………………………………………………………
第6次
…………………………………………………………………………………………………………-……
0C096EE6 . 51 push ecx
0C096EE7 . 56 push esi
0C096EE8 . 8B35 00E22F0C mov esi,dword ptr ds:[C2FE200] ; VFP6R.0C2FE220
0C096EEE . 83EE 2C sub esi,2C
0C096EF1 . 8D4424 04 lea eax,dword ptr ss:[esp+4]
0C096EF5 . 50 push eax
0C096EF6 . 8BCE mov ecx,esi
0C096EF8 . 8D56 2C lea edx,dword ptr ds:[esi+2C]
0C096EFB . 8935 00E22F0C mov dword ptr ds:[C2FE200],esi
0C096F01 . C74424 08 00000>mov dword ptr ss:[esp+8],0
0C096F09 . E8 44960100 call VFP6R.0C0B0552
0C096F0E . 83F8 FF cmp eax,-1 关键点!
0C096F11 74 16 je short VFP6R.0C096F29
0C096F13 . 8B4424 04 mov eax,dword ptr ss:[esp+4]
0C096F17 . 85C0 test eax,eax
0C096F19 . 0F85 2E160400 jnz VFP6R.0C0D854D
0C096F1F . 8BCE mov ecx,esi
………………………………………………………………………………………………
0C0B0639 . /0F8C 58010000 jl VFP6R.0C0B0797
0C0B063F > |DD47 10 fld qword ptr ds:[edi+10] ; 装入了这个可是我运行时的日期计算出来的值啊
0C0B0642 . |DC23 fsub qword ptr ds:[ebx] ; 减去安装软件日期计算出来并加上60的值
0C0B0644 . |8B7F 08 mov edi,dword ptr ds:[edi+8]
0C0B0647 . |8B76 08 mov esi,dword ptr ds:[esi+8]
0C0B064A . |3BFE cmp edi,esi
0C0B064C . |8BD7 mov edx,edi
0C0B064E . |DD5C24 10 fstp qword ptr ss:[esp+10] ; 储存在0012F948中
0C0B0652 . |77 02 ja short VFP6R.0C0B0656 ; 不跳
0C0B0654 . |8BD6 mov edx,esi
0C0B0656 > |8D4C24 10 lea ecx,dword ptr ss:[esp+10]
0C0B065A . |E8 EB61FEFF call VFP6R.0C09684A
0C0B065F . |85C0 test eax,eax
0C0B0661 . |0F85 3F010000 jnz VFP6R.0C0B07A6 ; 不跳
0C0B0667 . |8D4C24 10 lea ecx,dword ptr ss:[esp+10]
0C0B066B . |E8 C161FEFF call VFP6R.0C096831
…………………………………………………………………………………………………………
0C096831 /$ 66:8B41 06 mov ax,word ptr ds:[ecx+6]
0C096835 |. 66:85C0 test ax,ax
0C096838 |. 74 0D je short VFP6R.0C096847
0C09683A |. 66:25 0080 and ax,8000
0C09683E |. 66:F7D8 neg ax
0C096841 |. 1BC0 sbb eax,eax
0C096843 |. 24 FE and al,0FE
0C096845 |. 40 inc eax
0C096846 |. C3 retn
…………………………………………………………………………………………………………………………………………
用相减的天数,进行上面的计算,结果必须为FFFFFFFF。
…………………………………………………………………………………………………………………………………………
返回到关键点
……………………………………………………………………………………………………………………
0C096F0E . 83F8 FF cmp eax,-1 此时EAX必须为FFFFFFFF,如果不是说明已经超过了期限
0C096F11 74 16 je short VFP6R.0C096F29 所以此处必须跳!!改为JMP即可
0C096F13 . 8B4424 04 mov eax,dword ptr ss:[esp+4]
0C096F17 . 85C0 test eax,eax
0C096F19 . 0F85 2E160400 jnz VFP6R.0C0D854D
0C096F1F . 8BCE mov ecx,esi
……………………………………………………………………………………………………………………………………………………………………
修改:
将0C096F11 74 16 改为EB16 完美爆破版
保存在VFP6R.DLL
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)