• 标 题:大地非典预防系统 V1.0笔记,希望大家注意身体! 
  • 作 者:鸡鸡
  • 时 间:2003/05/14 01:12am 
  • 链 接:http://bbs.pediy.com

这一份笔记是一个非常不完整的笔记,但我把它发出来的原因是:

我本人刚刚从医院回家(非典刚好),我知道非典是多么可怕,在我39度高烧不退的时候什么药都没办法,当时我以为自己死定了......

后来医生说我抵抗力强,身体好!高烧才能退下去的!

所以现在才能在论坛和大家灌水!((我在这里呼吁大家平时有时间就多运动,如打打篮球什么的,我就常常打篮球的......过去的事,不多说了!)

我把这文章贴出来的原因事希望大家把它下载回家认真读读,应该会对你有帮助的!

【下载页面】:http://ltyj.51.net/show.php?id=39&t=soft

【软件大小】:1872 KB

【软件简介】: 一款设计精美,操作方便,关系到世界人民身体健康的"非典"预防软件,她提供了整套的有关"非典"的途径、状况、防治、药疗、法律、预防、热线、医院及在线收看最新动态等综合信息,使能得到及时预防,让生命永远属于您和您的家人。

【软件限制】:只能试用十次,不输入注册码的话就不能再用了!

【作者声明】:只是个人兴趣,读者看后所做出的一切事情与我无关,我也不负责,希望读者能三思再后行!

【破解工具】:w32Dasm   TRW2K   PEid   AspackDie

—————————————————————————————————
【过    程】:用PEid发现在主程序FRun.Exe是用ASPack 2.x加的壳,那么我就用AspackDie脱壳(0.99M->3.25M)
然后用w32Dasm反汇编,结果我哭....(什么也没有,全是看不懂的东东...)!
那么只好拿出"家伙"TRW2K来了...
运行程序FRun.Exe然后选择注册,填入78787878  ctrl+n呼出TRW2K   下断点bpx hmemcpy  F5出来后按确定马上拦下!
按16次F12到但出错误的对话框!那么再来一次,这当然是按15次F12了!来到了下面!按了N次F10后来到下面!


:004C3F5E

:0040485E

:0058BA25 8BD8                    mov ebx, eax
:0058BA27 33C0                    xor eax, eax
:0058BA29 55                      push ebp
:0058BA2A 68C5BA5800              push 0058BAC5
:0058BA2F 64FF30                  push dword ptr fs:[eax]
:0058BA32 648920                  mov dword ptr fs:[eax], esp
:0058BA35 8D55F8                  lea edx, dword ptr [ebp-08]
:0058BA38 A19CEA6B00              mov eax, dword ptr [006BEA9C]
:0058BA3D 8B00                    mov eax, dword ptr [eax]
:0058BA3F E84085F3FF              call 004C3F84               \\??算法CALL(不知道也不明白)  F8进去!
:0058BA44 8D55FC                  lea edx, dword ptr [ebp-04]
:0058BA47 A19CEA6B00              mov eax, dword ptr [006BEA9C]
:0058BA4C 8B00                    mov eax, dword ptr [eax]
:0058BA4E E83185F3FF              call 004C3F84               \\??算法CALL(不知道也不明白)  F8进去!
:0058BA53 8B55F8                  mov edx, dword ptr [ebp-08] \\这里是错误的注册码!
:0058BA56 8B45FC                  mov eax, dword ptr [ebp-04] \\这里是正确的注册码!
:0058BA59 E8A2D9E7FF              call 00409400               \\!!关键CALL!F8追进去!
:0058BA5E 8BF0                    mov esi, eax                \\EAX=ESI
:0058BA60 85F6                    test esi, esi               \\比较是否为零
:0058BA62 7511                    jne 0058BA75                \\不是零的话就跳到下面死掉!爆破!
:0058BA64 66837B5200              cmp word ptr [ebx+52], 0000
:0058BA69 743F                    je 0058BAAA
:0058BA6B 8BD3                    mov edx, ebx
:0058BA6D 8B4354                  mov eax, dword ptr [ebx+54]
:0058BA70 FF5350                  call [ebx+50]               \\这里是弹出注册成功的对话框的!
:0058BA73 EB35                    jmp 0058BAAA

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0058BA62(C)
|
:0058BA75 66837B5A00              cmp word ptr [ebx+5A], 0000
:0058BA7A 7408                    je 0058BA84
:0058BA7C 8BD3                    mov edx, ebx
:0058BA7E 8B435C                  mov eax, dword ptr [ebx+5C]
:0058BA81 FF5358                  call [ebx+58]               \\这里是弹出注册失败的对话框!

-------------------------------------------------------------------------------

:0058BA3F E84085F3FF              call 004C3F84
F8来到这里:


:004C3F84 53                      push ebx
:004C3F85 56                      push esi
:004C3F86 8BF2                    mov esi, edx
:004C3F88 8BD8                    mov ebx, eax
:004C3F8A 837B0800                cmp dword ptr [ebx+08], 00000000
:004C3F8E 750D                    jne 004C3F9D

* Possible StringData Ref from Code Obj ->"错误:参数区为空,无参数可取"
                                 |
:004C3F90 B8BC3F4C00              mov eax, 004C3FBC
:004C3F95 E84AABFEFF              call 004AEAE4
:004C3F9A 5E                      pop esi
:004C3F9B 5B                      pop ebx
:004C3F9C C3                      ret

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004C3F8E(C)
|
:004C3F9D 8BC6                    mov eax, esi
:004C3F9F 8B530C                  mov edx, dword ptr [ebx+0C]
:004C3FA2 8B4B08                  mov ecx, dword ptr [ebx+08]
:004C3FA5 8B148A                  mov edx, dword ptr [edx+4*ecx]   \\这里D EDX可以看到密匙123456
:004C3FA8 E86F08F4FF              call 0040481C
:004C3FAD FF4B08                  dec [ebx+08]
:004C3FB0 5E                      pop esi
:004C3FB1 5B                      pop ebx
:004C3FB2 C3                      ret                              \\返回到0058BA44!

-------------------------------------------------------------------------------
:0058BA4E E83185F3FF              call 004C3F84
F8来到这里:
:004C3F84 53                      push ebx
:004C3F85 56                      push esi
:004C3F86 8BF2                    mov esi, edx
:004C3F88 8BD8                    mov ebx, eax
:004C3F8A 837B0800                cmp dword ptr [ebx+08], 00000000
:004C3F8E 750D                    jne 004C3F9D

* Possible StringData Ref from Code Obj ->"错误:参数区为空,无参数可取"
                                 |
:004C3F90 B8BC3F4C00              mov eax, 004C3FBC
:004C3F95 E84AABFEFF              call 004AEAE4
:004C3F9A 5E                      pop esi
:004C3F9B 5B                      pop ebx
:004C3F9C C3                      ret

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004C3F8E(C)
|
:004C3F9D 8BC6                    mov eax, esi
:004C3F9F 8B530C                  mov edx, dword ptr [ebx+0C]
:004C3FA2 8B4B08                  mov ecx, dword ptr [ebx+08]
:004C3FA5 8B148A                  mov edx, dword ptr [edx+4*ecx]   \\这里D EDX可以看见真的注册码!
:004C3FA8 E86F08F4FF              call 0040481C
:004C3FAD FF4B08                  dec [ebx+08]
:004C3FB0 5E                      pop esi
:004C3FB1 5B                      pop ebx
:004C3FB2 C3                      ret                               \\返回0058BA53!


-------------------------------------------------------------------------------
:0058BA59 E8A2D9E7FF              call 00409400
F8来到这里:
* Referenced by a CALL at Addresses:
|:0041897A   , :00481071   , :005567B0   , :00557AF8   , :0058BA59  
|:00654E77   , :006B735F  
|
:00409400 56                      push esi
:00409401 57                      push edi
:00409402 89C6                    mov esi, eax                \\EAX=ESI=正确的注册码!
:00409404 89D7                    mov edi, edx                \\EDX=EDI=我输入错误的注册码!
:00409406 09C0                    or eax, eax                 \\??或运算,用处不知道,请大哥哥指点!
:00409408 7403                    je 0040940D
:0040940A 8B40FC                  mov eax, dword ptr [eax-04] \\取得正确注册的位数!

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00409408(C)
|
:0040940D 09D2                    or edx, edx                 \\??或运算,用处不知道,请大哥哥指点!
:0040940F 7403                    je 00409414
:00409411 8B52FC                  mov edx, dword ptr [edx-04] \\取得我输入注册码的位数!

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040940F(C)
|
:00409414 89C1                    mov ecx, eax                \\EAX=ECX
:00409416 39D1                    cmp ecx, edx                \\比较是否相等!
:00409418 7602                    jbe 0040941C                \\不等于就跳到下面!
:0040941A 89D1                    mov ecx, edx                \\EDX=ECX等于我输入注册码的位数!

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00409418(C)
|
:0040941C 39C9                    cmp ecx, ecx                \\比较,不知道有什么用,请指点!
:0040941E F3                      repz                        \\经过这里有后真假注册码都移动了,不知道有什么用,请指点!
:0040941F A6                      cmpsb                       \\???不知道有什么用,请指点!
:00409420 7408                    je 0040942A
:00409422 0FB646FF                movzx eax, byte ptr [esi-01]\\取得正确注册码第X位的ASCII码放入EAX
:00409426 0FB657FF                movzx edx, byte ptr [edi-01]\\取得我输入注册码第X位的ASCII码放入EDX

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00409420(C)
|
:0040942A 29D0                    sub eax, edx                 \\相减,结果保存EAX
:0040942C 5F                      pop edi
:0040942D 5E                      pop esi
:0040942E C3                      ret

------------------------------------------------------------------------
总结:(程序是怎么运算出注册码的,我到现在都还没有搞懂!请大哥哥指点!)

注册信息保存在注册表的:HKEY_CLASSES_ROOT\Ddfd的字符串值test里面,test的值大于100就表示注册版本,小于否之!

这个程序是把机器码乘以密匙123456的积和我输入的注册码比较的,也就是说注册码就是机器码乘以密匙123456的积!
我们假定注册码是X机器码是Y那么:(X=Y*123456)

可惜我不会编程,所以做不了注册机!(但我感觉这个程序的注册机很容易做,会的大哥哥不要笑我...)

这个程序可以爆破!但就是不完美,因为把
:0058BA62 7511
改成:
:0058BA62 9090
之后程序每次运行机器码都不同了!程序就永远变成了未注册版本,没次运行都是第一次用!(我呆了...)

内存注册机做不了,因为这个程序在开始运行的时候就会运行经过0058BA59这个地方,所以我想问问大家怎么办好!

看来我加入组织的机会渺茫了好多啊!没办法!只好用另外一个方法了!

----------------------------------------------------------------------------

就是搬出我个人认为最好用的工具---->REGMON 4.32中文版!

运行REGMON,在运行FRun.Exe,你会发现程序获取了注册表[HKEY_CLASSES_ROOT\Ddfd]的值,在那里面有两个字符串值test和test1,其中test1是程序随机产生的机器码,test是否注册的标志!(大于101的是注册版)那么你懂了吧,把它改一改就可以了!呵呵...

或者自己动手做一个注册文件!新建一个 本文文档 内容如下:

REGEDIT4

[HKEY_CLASSES_ROOT\Ddfd]
"test"="101"


再把本文文档的扩展名由txt改成reg

双击运行这个reg文件就变成注册版本了!!简单吧!

在这里我要谢谢您愿意花时间看我这篇文章!谢谢...


                                                          2003.05.12 下午于清远