• 标 题:股票账户管理软件 1.12(破解手记) (9千字)
  • 作 者:Maxnut
  • 时 间:2002-2-16 10:23:46
  • 链 接:http://bbs.pediy.com

软件名称:股票账户管理软件 1.12

下载地址:http://www.008008.com 或 http://whsoft.126.com

简    介:“除基本的资金存取、股票买卖、除权功能外,还提供精确的买卖费用设置,可精确指定各种股票、基金的交易税、佣金等。”,据说是个很不错的管理软件,我不炒股的,对股票一窍不通,所以没法儿鉴别它的好坏……

破解日期:2002年2月9号

破解目的:解掉它的时间限制(不注册只能用到2001年12月31日),其功能限制暂且不提,其实是我的水平实在是……知道了吧?拜托就别说出来了。

所需工具:SoftICE4.05(loader32.exe)、PDump321.62 、Blast Wave 2000、UltraEdit9.00a and PW32Dasm8.93。

说    明:本灌水只供技术交流用!本人乃一只超级菜鸟,文中若有不当之处还请“大虾米”们多多指教,谢谢!

Let's Go!!!

运行程序StkAct.exe,弹出一画面——“试用期已过。继续……”。若把时间调到2001年12月31日以前,程序可以正常运行,不会出现需要注册的画面。用loader32加载它,出现一条错误信息并询问是否继续,单击“YES”后,程序没有中断就自动运行了,用PDump32的PE-Editor打开它,将UPX0的Characteristics的值由E0000080改为E0000020。然后再用loader32加载它,这次它将激活SoftIce,继续往下走一段你会看到:
                                  .
                                  .
                                  .
:00402C1C 68857B3101              push 01317B85
:00402C21 E856E60000              call 0041127C
:00402C26 59                      pop ecx
:00402C27 DD9D74FFFFFF            fstp qword ptr [ebp+FFFFFF74]
:00402C2D DD4508                  fld qword ptr [ebp+08]
:00402C30 DC9D74FFFFFF            fcomp qword ptr [ebp+FFFFFF74]
:00402C36 DFE0                    fstsw ax
:00402C38 9E                      sahf
:00402C39 0F97C2                  seta dl
:00402C3C 83E201                  and edx, 00000001
:00402C3F 84D2                    test dl, dl
:00402C41 7459                    je 00402C9C----------------------->>>NOJUMP(继续让
                                                          它走就会出现注册画面了。)
:00402C43 8B0E                    mov ecx, dword ptr [esi]
:00402C45 8B81E0020000            mov eax, dword ptr [ecx+000002E0]
:00402C4B 33D2                    xor edx, edx
:00402C4D 8B08                    mov ecx, dword ptr [eax]
:00402C4F FF515C                  call [ecx+5C]
                                    .
                                    .
                                    .
我们把00402C41处的代码改为:JMP 00402C9C  (记下它的机器码)这下看看,按F5让程序继续运行,哈哈……没有出现注册的画面,操作一切正常,随即就用R'PP做了一个PATCH,果然OK,正在高兴时,突然又弹出了刚才的注册画面。天哪!(这个画面我不知设什么断点来拦,连Hmemcpy都不行,知道的告诉我一声哦,也由此引出了“脱壳篇”。)怎么办?想了许久,也没想出个办法,哎!还是先把它脱了壳再说吧。(接着请看——脱壳篇)

让我拿TYP看看它,哦?是用UPX0.9加的壳,…………<<<----一段儿痛苦的经历,发现它检测PDump32和TRW,发现它们存在后拒不运行!真是的!太不给我面子了!抄起BW2000(好东西,省了我不少事,感谢D.Boy),运行StkAct.exe找到了入口地址00401012(经验证无误),再次用loader32加
载它,下指令

g 00401012  程序会在下面停下来:
                                  .
                                  .
                                  .
:00401000 EBFE                    jmp 00401012    --->>>      (跳到程序的入口地点)
:00401002 66623A                  bound di, word ptr [edx]
:00401005 43                      inc ebx
:00401006 2B2B                    sub ebp, dword ptr [ebx]
:00401008 48                      dec eax
:00401009 4F                      dec edi
:0040100A 4F                      dec edi
:0040100B 4B                      dec ebx
:0040100C 90                      nop
:0040100D E970744C00              jmp 008C8482
:00401012 A163744C00              mov eax, dword ptr [004C7463]--->>>(Stop Here程序的
                                                                    入口地点)
:00401017 C1E002                  shl eax, 02
:0040101A A367744C00              mov dword ptr [004C7467], eax
:0040101F 52                      push edx
:00401020 6A00                    push 00000000
:00401022 E8E5490C00              call 004C5A0C
:00401027 8BD0                    mov edx, eax
                                  .
                                  .
                                  .
现在,我们在00401000处设断点,重新加载后让其在此处中断,并键入以下指令:

a eip    (回车)
jump eip  (回车)        让程序在00401000处暂停嘛。

按F5让程序运行回到Windows……

打开PDump32,在Task中选中StkAct.exe,右键单击执行"Dump (Full)",起个名字存盘,然后再右键单击StkAct.exe,选择"Kill Task"。脱壳结束!接下来该修改脱壳后程序的入口地址了:

我们已经知道原程序的入口地址是:00401012,再次用PDump32中的PE-Editor,打开脱壳后的文件,我们会看到其Entry Point(入口地址)是:00128F20,正确的应是:
原程序的入口地址-基址(Image Base),即:
00401012-00400000=1012,修改后单击“OK”退出程序,运行看看,怎么样?可以正常运行了吧?

还记得我们刚才修改的代码使程序跳过时间限制的地方吗?就是:00402C41 7459  je 00402C9C,
我把它附近的机器码记了下来,用Ultra Edit打开脱壳后的文件,寻找我记下的代码,一共找到了两处,开始我以为是我记录的太少了,随后我又增加了许多,可还是找到了两处。仔细想想,的确,当时我只在内存中修改了一处的代码,不到两分钟就又出现了那个另人讨厌的注册画面,对,准是有地方又检查了一次,用PW32Dasm打开脱壳后的文件,终于找到了这个地方:
很面熟吧?和00402C41处的代码一样!
                                  .
                                  .
                                  .
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00402D9D(C), :00402DAC(C), :00402DC1(C), :00402DE2(C)
|
:00402F18 68857B3101              push 01317B85
:00402F1D E85AE30000              call 0041127C
:00402F22 59                      pop ecx
:00402F23 DD9D74FFFFFF            fstp qword ptr [ebp+FFFFFF74]
:00402F29 DD4508                  fld qword ptr [ebp+08]
:00402F2C DC9D74FFFFFF            fcomp qword ptr [ebp+FFFFFF74]
:00402F32 DFE0                    fstsw ax
:00402F34 9E                      sahf
:00402F35 0F97C2                  seta dl
:00402F38 83E201                  and edx, 00000001
:00402F3B 84D2                    test dl, dl
:00402F3D 7459                    je 00402F98----------------------->>>NOJUMP(继续让
                                                          它走就会出现注册画面了。)
:00402F3F 8B0E                    mov ecx, dword ptr [esi]
:00402F41 8B81E0020000            mov eax, dword ptr [ecx+000002E0]
:00402F47 33D2                    xor edx, edx
:00402F49 8B08                    mov ecx, dword ptr [eax]
:00402F4B FF515C                  call [ecx+5C]
                                  .
                                  .
                                  .
这段程序是由00402D9D(C), :00402DAC(C), :00402DC1(C), :00402DE2(C)跳过来的,估计是程序运行后的记时代码:差不多两分钟检测一遍运行条件,脱壳之前并没有发现,所以程序一开始通过了检测,但一会儿就又出现了注册画面,这部分记时程序我没看懂,原本惦着把时间调成一年检查一次的,可我不会,见笑了。还有,怎样做才能使它跨平台运行呢?谁教教我?

破解总结:将00402C41和00402F3D的代码“je 00402F98”改为:“jmp 00402F98”,即:
          搜索--->>>  84D274598B0E
          改为--->>>  ~~~~EB~~~~~~    (共两处)

BTW:要不是成功的把它脱了壳,恐怕我是不会把它的时间限制搞定的。这篇灌水花了我将近3个半小时,由此我想到所有把自己的破解手记POST出来的人,是他们的辛勤劳动才使得我初涉了Crack的技术,感谢看学老师整理的《论坛精华》系列,其中众Cracker的文章使我受益非浅。今天是2002年2月12日(初一),在此,给大家拜个年——新年快乐!万事如意!马到成功!


                                                                                                    Written by Maxnut

                                    2002年2月12日晚23:30


续:第二种脱壳方法(★推荐★):

(前天(13号)又发现它检测Filemon,真不知它到底想怎样!)

首先要加载Sice和其相对应的Icedump(要放到Sice的目录里执行),然后运行PDump32,单击执行“Bhrama Server”,现在你就可以继续用loader32加载StkAct.exe,还记得程序的入口地址吗?是:00401012。下指令:g 00401012(回车),这时Sice会在程序的入口处停下来,即:
                                  .
                                  .
                                  .
:00401012 A163744C00              mov eax, dword ptr [004C7463]--->>>(程序的入口地点)
:00401017 C1E002                  shl eax, 02
:0040101A A367744C00              mov dword ptr [004C7467], eax
                                  .
                                  .
                                  .
这时你可以下指令进行脱壳了,我Icedump的版本是6.023,用以下的指令:

/BHRAMA ProcDump32 - Dumper Server(回车) (别忘了前面的“/”符号)

随后你便会回到Windows下,PDump32会提示你给脱壳后的文件起名存盘,存盘后你可以用PDump32的PE-Editor对它进行查看,你可以看到这时的Entry Point(入口地址)是00001012,不用再修改了,这点是不同于第一种脱壳方法的(原来的脱壳方法还需要手动修改EP)!好了,让我们重新启动计算机,不加载Sice(还有其他的卸载方法吗?)。

运行脱壳操作生成的程序,这时的程序你可以看到是无法运行的,会出现“非法操作”。现在该让PEditor(注意:不是PDump32中的PE-Editor)出场了!我用的是1.7版。用“browse”选择该程序,用它的“rebuilder”功能进行重建,在选项中四个钩全选上,其中:“realign file”选
“normal”;“rebuild Import Table”选“rebuild ImportTable”,然后就可以“DO”了,完成后退出程序,再运行这个程序看看,怎么样?可以运行了吧?!

脱壳总结:用PDump32中的PE-Editor查看修复后的程序,这次脱壳后的文件比原来的在“Sections Iformations”中多了一个“.idata”,原来脱壳后的程序在我朋友的计算机(WIN98)上是运行不了的,而用这种方法脱壳就没有出现问题(我的系统是WIN97)。我想这正是Icedump的功劳吧?不过得需要“rebuilder”。你会选择哪种方法脱壳呢?


                                                                                                      Written by Maxnut

                                      2002年2月15日晚21:35


                                                                笑对人生……