《赢证股市分析软件》V2.01 高级版的破解
软件名称:《赢证股市分析软件》V2.01
发布日期: 2001.3.5
软件来源:《软件》杂志第4期配套光盘。
软件简介:
《赢证股市分析软件》主要面向广大中小投资者,特别是上班族股民,为他们提供一种功能强大,价廉物美的炒股工具。
软件分为共享版,标准版和高级版三个版本,用户可以完全免费地,无期限地试用共享版软件,充分体会软件强大的功能。如果用户感到软件的功能能够满足自己的需要,就可以注册成为标准版或高级版,以获取更多更全面的功能和厂家提供的更多服务内容。
高级版是《赢证股市分析软件》系列产品中最优秀的版本。与标准版的唯一区别就是增加了“赢证红绿灯”信号。该信号是一种全新的选股方式,是由计算机通过对大量的历史数据进行智能分析总结出来的具有普遍规律性的选股法。经过实际验证,该信号能够获得非常准确清晰的买卖结果,以红绿灯的方式直接表现在K线图中。
【声明】
我写这篇文章是以技术交流为主,希望大家在转载时能保持文章的完整性。
作 者:佳洁士
解密日前:2001年4月26日
解密工具:1、Trw2000 1.22
2、W32Dasm 8.93 超级中文版
从软件帮助文件的介绍上可以得知,软件的使用权限越高,功能越强大,而使用权限是同过注册码来确定的,小弟的功力太菜。追不到它的注册码。不得已用爆破手段来搞定它。
找到我们的神兵利器W32Dasm 8.93 超级中文版反汇编《赢证股市分析软件》的主程序StockNT.exe。静态分析看看能够有什么收获。皇天不负有心人。让我找到了共享版、标准版、高级版等关键字符串。并记下了他们的内存地址(memory
offset)。
共享版: 0042AE28 MOV EAX,005135E0
标准版: 0042AE35 PUSH DWORD 005135D0
高级版: 0042AE41 PUSH DWORD 005135C0
我们可以利用在W32Dasm 8.93 超级中文版找到的内存地址(memory offset),在Trw2000中下中断点。
在TRW2000运行窗口用Browse选中StockNT.exe,然后用Loaf按钮装载。装载文件后,将中断在这文件的主函数(即程序的入口处)。
将中断点下在共享版上:bpx 0042AE28
..............
0167:0042ADE9 LEA ECX,[EDI+EDI*4]
0167:0042ADEC PUSH BYTE +00
0167:0042ADEE LEA ECX,[ECX+ECX*4]
0167:0042ADF1 LEA ECX,[EBX+ECX*4]
0167:0042ADF4 LEA ECX,[ECX+ECX*4]
0167:0042ADF7 LEA EDX,[ECX+ECX*4]
0167:0042ADFA LEA ECX,[EBP+EDX*4+00]
0167:0042ADFE MOV EDX,[EAX+1C]
0167:0042AE01 PUSH ECX
0167:0042AE02 PUSH DWORD 05C2
//将05C2压入堆栈. 关键哦!
0167:0042AE07 PUSH EDX
0167:0042AE08 CALL `USER32!SendMessageA` ==>重点!!! 按F8进入此CALL.
0167:0042AE0E TEST EAX,EAX
试着下 EAX=1(这是以EAX为旗帜)
0167:0042AE10 JNZ 0042AE30
可以看见变成标准版。随便移动鼠标,
0167:0042AE12 CALL 004CFC96
又变回共享版了。
0167:0042AE17 MOV ECX,[EAX+04]
0167:0042AE1A CALL 00499610
0167:0042AE1F TEST EAX,EAX
0167:0042AE21 MOV EAX,005135F0
0167:0042AE26 JNZ 0042AE2D
0167:0042AE28 MOV EAX,005135E0 <<=共享版
0167:0042AE2D PUSH EAX
0167:0042AE2E JMP SHORT 0042AE46
0167:0042AE30 CMP EAX,BYTE +01
//比较EAX是不是等于1
0167:0042AE33 JNZ 0042AE3C
//不相等就跳,
0167:0042AE35 PUSH DWORD 005135D0 <<=标准版
0167:0042AE3A JMP SHORT 0042AE46
0167:0042AE3C CMP EAX,BYTE +02
//比较EAX是不是等于2
0167:0042AE3F JNZ 0042AE4F
//不相等就跳,
0167:0042AE41 PUSH DWORD 005135C0 <<=高级版
0167:0042AE46 LEA ECX,[ESP+14]
0167:0042AE4A CALL 004B7D9F
0167:0042AE4F MOV EAX,[ESP+10]
0167:0042AE53 MOV EDX,[ESI]
0167:0042AE55 MOV ECX,[EAX-08]
.....................
看到共享版、标准版、高级版的区别了吗! 他们都是以EAX的值作为判断共享版、标准版、高级版的!
也就是说:当EAX=0 为共享版
当EAX=1 为标准版
当EAX=2 为高级版
向上看看,看何处使EAX可为1、2 。可以找到这里:
0167:0042AE08 CALL `USER32!SendMessageA`
0167:0042AE0E TEST EAX,EAX <<-强制使EAX=1,软件将变成标准版。
0167:0042AE10 JNZ 0042AE30
强制使Eax=2,软件会变成高级版。
如果在上述部位强制使EAX=1。虽然在使用权限中会变成了标准版、高级版,但是还是有很多的功能不能正常使用。比如红绿灯功能就不能使用,也就是说软件表面上变成是标准版、高级斑,但同实际上还是共享版。只是文字改变了。可以肯定程序在某处有全局变量注册旗帜。
现在要做的事情就是找到这个注册旗帜!!!
按F8进入0167:0042AE08 CALL `USER32!SendMessageA`
这时将来到系统文件USER32.dll的邻空。
按F10慢慢走,看看程序要把我们带到什么地方?
....................
0167:BFF559E6 CALL BFF55000
0167:BFF559EB PUSH DWORD [ESP+04]
0167:BFF559EF CALL BFF5506B
0167:BFF559F4 TEST EAX,EAX
0167:BFF559F6 JZ BFF55A5E
0167:BFF559F8 TEST BYTE [EAX+2F],02
0167:BFF559FC JZ BFF55A5E
0167:BFF559FE MOV CX,[FS:28]
0167:BFF55A06 CMP [EAX+20],CX
0167:BFF55A0A JNZ BFF55A5E
0167:BFF55A0C MOV EDX,[BFF5D5D2]
0167:BFF55A12 ADD EDX,1112
0167:BFF55A18 CMP WORD [EDX+0A],BYTE +00
0167:BFF55A1D JNZ BFF55A5E
0167:BFF55A1F CMP WORD [EDX+1A],BYTE +00
0167:BFF55A24 JNZ BFF55A5E
0167:BFF55A26 PUSH EAX
0167:BFF55A27 PUSH CX
0167:BFF55A29 PUSH WORD 00
0167:BFF55A2D CALL `KERNEL32!MapSL`
0167:BFF55A32 MOV ECX,EAX
0167:BFF55A34 POP EAX
0167:BFF55A35 ADD ECX,BYTE +5E
0167:BFF55A38 CMP WORD [ECX+0A],BYTE +00
0167:BFF55A3D JNZ BFF55A5E
0167:BFF55A3F CMP WORD [ECX+1A],BYTE +00
0167:BFF55A44 JNZ BFF55A5E
0167:BFF55A46 MOV CX,[EAX+2A]
0167:BFF55A4A MOV ES,CX
0167:BFF55A4D MOVZX EAX,WORD [EAX+28]
0167:BFF55A51 MOV EAX,[ES:EAX+02]
0167:BFF55A55 PUSH DS
0167:BFF55A56 POP ES
0167:BFF55A57 CALL BFF5500C
0167:BFF55A5C JMP EAX
<<==回到StockNT.exe
......................
经过上面不长不短的代码。突然从系统文件USER32.dll的领空返回到了StockNT.exe的领空。
这可是软件的关键的部位,好好的分析一下。
......................
EAX=004B440A EBX=00000005 ECX=C174DC30 EDX=000194C4
ESI=0079F7DC
EDI=000007D1 EBP=00000008 ESP=0079F730 EIP=004B440A
o d I s Z a P c
CS=0167 DS=016F SS=016F ES=016F FS=0FAF GS=0000
SS:0079FA04=000005C2 看这儿! ==================================================byte==============PROT========
0030:00000000 9E 0F C9 D8 65 04 70 00-16 00 E9 CD 65 04 70 00 ....e.p.....e.p.
0030:00000010 65 04 70 00 54 FF 00 F0-08 80 00 F0 6F EF 00 F0 e.p.T.......o...
0030:00000020 00 00 EF 08 8C 19 CA CE-6F EF 00 F0 6F EF 00 F0 ........o...o...
0030:00000030 6F EF 00 F0 6F EF 00 F0-9A 00 E9 CD 65 04 70 00 o...o.......e.p.
==========================================================================ROT32
0167:004B4409 RET
0167:004B440A PUSH EBP
0167:004B440B MOV EBP,ESP
0167:004B440D CMP DWORD PTR [EBP+0C],00000360
0167:004B4414 JNZ 004B441B
0167:004B4416 PUSH 01
0167:004B4418 POP EAX
0167:004B4419 JMP 004B4435
0167:004B441B PUSH DWORD PTR [EBP+08]
0167:004B441E CALL 004B4385
0167:004B4423 PUSH DWORD PTR [EBP+14]
0167:004B4426 PUSH DWORD PTR [EBP+10]
0167:004B4429 PUSH DWORD PTR [EBP+0C]
0167:004B442C PUSH DWORD PTR [EBP+08]
0167:004B442F PUSH EAX
0167:004B4430 CALL 004B419D
0167:004B4435 POP EBP
0167:004B4436 RET 0010
0167:004B4439 MOV EAX,004B440A
0167:004B443E RET
0167:004B443F MOV EAX,004E24A0
0167:004B4444 CALL 004A3488
0167:004B4449 SUB ESP,40
0167:004B444C PUSH EBX
0167:004B444D PUSH ESI
====================================STOCKNT!.text+000B3409======================
Break due to BPX #0167:0042AE02 (ET=2.31 seconds)
:pagein n 23.txt
.................
0167:004B440A PUSH EBP
0167:004B440B MOV EBP,ESP
0167:004B440D CMP DWORD PTR [EBP+0C],00000360
取堆栈的值与0360作比较
0167:004B4414 JNZ 004B441B
0167:004B4416 PUSH 01
//将01压入堆栈 <<=注册旗帜哦
0167:004B4418 POP EAX
//从堆栈取出01到EAX
0167:004B4419 JMP 004B4435
[EBP+0C]=05C2,05C2是不是很眼熟,在什么地方见过。找一找?
把0167:004B440D CMP DWORD PTR [EBP+0C],00000360 改成0167:004B440D
CMP DWORD PTR [EBP+0C],000005C2。来改变软件的跳转方向。
按F5回到程序,这时可以发现软件在使用权限上已经变成了标准版。试一试各种功能。都可以正常使用(除红绿灯功能外)。从前面的分析我们知道!高级版与标准版的区别!只是EAX值的不同,EAX=2就是高级版。
0167:004B440D CMP DWORD PTR [EBP+0C],000005C2
0167:004B4414 JNZ 004B441B
0167:004B4416 PUSH 01
改为:PUSH 02
0167:004B4418 POP EAX
0167:004B4419 JMP 004B4435
这样一来,不就使EAX=2了嘛。看使用权限中是不是就变成了高级版。 试一下高级版中的红绿灯功能。可以正常使用了。
最后整理一下:
高级版的修改方法:
找到:817D0C6003000075056A01
改成:------C205----------02 注:“ - ” 表示不用改!
佳洁士
2001.04.26
后记:在写《赢证股市分析软件》破解记录时,发现一个有趣的现象。我写破解录时喜欢把软件的名称作为文件名称,比如说:"赢证股市分析软件.txt".此时再运行赢证,赢证会提示软件已经在运行之中。不知这算不算软件的Bug。
广告: 我们的目标,没有加密! -----佳洁士
- 标 题:《赢证股市分析软件》V2.01 高级版的破解 (10千字)
- 作 者:佳洁士
- 时 间:2001-5-8 17:04:17
- 链 接:http://bbs.pediy.com