• 标 题:Gifline破解实录 (4千字)
  • 作 者:D-X-C
  • 时 间:2001-8-5 8:42:38
  • 链 接:http://bbs.pediy.com

Gifline破解实录

从华军软件园里拽下来一个将文本转成GIF的软件,写一下如何破解它的。

工具:TRW2000 1.22  W32DASM 8.93    REGMON95
适用对象:入门级
破解者:D-X-C  E-MAIL:ZHIDA8721@SINA.COM
下载地址:http://www.newhua.com.cn/down/gifline.zip

开始干活了,先用W32DASM调入GIFLINE,查找字符串“is incorrect”,如下:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0045C51D(C)
|
:0045C558 0FAF7DF0                imul edi, dword ptr [ebp-10]
:0045C55C 8D55E4                  lea edx, dword ptr [ebp-1C]
:0045C55F 8BC7                    mov eax, edi
:0045C561 E852A7FAFF              call 00406CB8
:0045C566 8B4DE4                  mov ecx, dword ptr [ebp-1C]
:0045C569 8D45E8                  lea eax, dword ptr [ebp-18]

* Possible StringData Ref from Code Obj ->"dpd-"  *后来发现这原来是注册码的前4位固定值
                                  |
:0045C56C BACCC64500              mov edx, 0045C6CC
:0045C571 E8EA75FAFF              call 00403B60
:0045C576 8B55E8                  mov edx, dword ptr [ebp-18]
:0045C579 8B45F8                  mov eax, dword ptr [ebp-08]
:0045C57C E8A376FAFF              call 00403C24 *要害CALL,判断注册码
:0045C581 0F8580000000            jne 0045C607  *关键跳转,改成je就OK了
。。。。。。
。。。。。。                            *省略的这部分后来总结出是注册成功后向注册表里建两个键值
。。。。。。
* Possible StringData Ref from Code Obj ->"Sorry, This Registration Code "  /跳到这就没戏了
->"is incorrect. Please try again " /往前看,看哪可以跳过此处
                            ->"by copying the code from your "
                            ->"License documentation. If problems "
                            ->"persist please contact us via: "
                            ->"dinther@geocities.com"
                                  |
:0045C607 B8FCC64500              mov eax, 0045C6FC
:0045C60C E847B1FDFF              call 00437758

还是不过瘾,再破破注册码。用TRW2000载入,点REGISTER后,要求填入E-MAIL和REGISTRATION CODE,填:enjoy@haha (只要有个“@”就可以) 和 1234567890 (真正注册码的长度由你的E-MAIL算出,长度不固定)
下命令 bpx 0167:0045c57c (我的机器是这句,不知道你的,要不是,就自己追追)就是那句 call 00403c24
找到后按F8 追入
:00403C24 53                      push ebx
:00403C25 56                      push esi
:00403C26 57                      push edi
:00403C27 89C6                    mov esi, eax
:00403C29 89D7                    mov edi, edx
:00403C2B 39D0                    cmp eax, edx
:00403C2D 0F848F000000            je 00403CC2
:00403C33 85F6                    test esi, esi
:00403C35 7468                    je 00403C9F
:00403C37 85FF                    test edi, edi
:00403C39 746B                    je 00403CA6
:00403C3B 8B46FC              mov eax, dword ptr [esi-04] *送入假注册码的长度 看到EAX=0000000A
:00403C3E 8B57FC              mov edx, dword ptr [edi-04] *送入真注册码的长度 看到EDX=0000000B
:00403C41 29D0                    sub eax, edx          你可以回过头来将假注册码改成11位,那个问,你咋知道是送注册码的长度?试的呗
。。。。。。
。。。。。。
。。。。。。
以下这一段就是判断注册码的,咋知道?这可是关键地方啦,因为执行完00403C4D这句,看到ECX=34333231,什么意思?就是1234的ASCII码的倒序!你怎么想到的?因为我先前用88888888当注册码,发现ECX=38383838,太显眼了!为什么又要用1234567890当注册码?不这样咋发现它是倒序存放的。
:00403C4D 8B0E                  mov ecx, dword ptr [esi] *假注册码的前4位,ECX=34333231
:00403C4F 8B1F                  mov ebx, dword ptr [edi] *真注册码的前4位,EBX=2D647064
即dpd- 的ASCII码的倒序
:00403C51 39D9                  cmp ecx, ebx          *第一次比较
:00403C53 7558                  jnz 00403CAD      *不能让它跳转,下指令 r fl z=1 改变零标志
:00403C55 4A                  dec edx
:00403C56 7415                  je 00403C6D        *判断是否检查完毕
:00403C58 8B4E04              mov ecx, dword ptr [esi+04] *假注册码接下来的4位,ECX=38373635
:00403C5B 8B5F04              mov ebx, dword ptr [edi+04] *真注册码接下来的4位,EBX=31343036
:00403C5E 39D9                cmp ecx, ebx              *第二次比较
:00403C60 754B                jnz 00403CAD    *不能让它跳转,下指令 r fl z=1 改变零标志
:00403C62 83C608                  add esi, 00000008
:00403C65 83C708                  add edi, 00000008
:00403C68 4A                      dec edx
:00403C69 75E2                    jne 00403C4D  *由于真注册码的长度是11位,所以要跳回00403C4D那句再判断,我就不写了,应该能懂了吧。最后的注册码:dpd-6041164
:00403C6B EB06                  jmp 00403C73

整理一下:E-MAIL:enjoy@haha  CODE: dpd-6041164
该完了吧?还罗嗦什么?再说一句。前面不是说过注册成功后要往注册表里写东东吗?就是下面:
[HKEY_CURRENT_USER\Software\setenil]
"date"=hex:00,00,00,80,40,92,46,41
"name"= enjoy@haha
这个你用REGMON95可以监测到,其实就是date那句最重要,无论是什么样的注册码最终都得到这句。
好了,是不是说的很详细?给出了三种注册方式。初学者可以好好看看了。