TTFtoDXF v43算法分析及算法注册机--纪念版
破文标题】TTFtoDXF v43算法分析及算法注册机--纪念版【破文作者】zaas
【破解工具】OllyICE,PEiD v0.94
【破解平台】WinXP
【软件名称】TTFtoDXF v43
【更新时间】2010-2-21
【软件类别】英文软件/矢量化
【软件语言】英文
【应用平台】WinXP/2000/2003/Vista
【软件性质】共享(收费)软件
【软件大小】511KB
【原版下载】http://home.roadrunner.com/~gcodemcode/ttftodxf.htm
【保护方式】注册码
【软件简介】该软件可将TTF字体转换为DXF文件格式。
你可以编辑单个的字符、句子或整个段落。
你可更改字符的字体及文字高度。
你可更改字符间的间隔。
你可指定行距。
你可以将文本复制到该程序的对话框中进行转换,也可以自己输入文字。
该软件只支持英文字体,不支持中文字体。
共享版本可试用30天。有时间限制(30天,不过可调系统时间)、使用次数限制(30次)。到期 File和Edit菜单会灰掉。
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
【写在前面】年过完了。年后又忙碌起来,不能像过年期间那么多时间调试软件了。
昨天整理了一下自己的东西,发现自己第一次破解的软件TTFtoDXF,距离现在整整7个月了。
当时写下了自己的第一篇破文:TTFtoDXF v42追码 【我的第一次Crack,极度初级】
名曰追码,实际上没有在追码,只是爆破而已。现在把追码补上,也算是一篇年后总结,兼纪念自己的第一次。
--------------------------------------------------------------
【破解内容】
--------------------------------------------------------------
**************************************************************
用PEiD查壳,Borland Delphi 4.0 - 5.0
**************************************************************
输入错误的注册码,软件无提示,要求重启验证。
观察到假码写入了reg.ini,so,下GetPrivateProfileStringA断点
来到:
0047BB2C/$55 push ebp
0047BB2D|.8BEC mov ebp, esp
0047BB2F|.B9 2E000000 mov ecx, 2E
0047BB34|>6A 00 /push 0
0047BB36|.6A 00 |push 0
0047BB38|.49 |dec ecx
0047BB39|.^ 75 F9 \jnz short 0047BB34
0047BB3B|.53 push ebx
0047BB3C|.56 push esi
0047BB3D|.57 push edi
0047BB3E|.8BD8 mov ebx, eax
0047BB40|.33C0 xor eax, eax
0047BB42|.55 push ebp
0047BB43|.68 8BBF4700 push 0047BF8B
0047BB48|.64:FF30 push dword ptr fs:
0047BB4B|.64:8920 mov dword ptr fs:, esp
0047BB4E|.C685 00FFFFFF>mov byte ptr , 0
0047BB55|.8D95 F8FEFFFF lea edx, dword ptr
0047BB5B|.33C0 xor eax, eax
0047BB5D|.E8 DA6DF8FF call 0040293C
0047BB62|.8B85 F8FEFFFF mov eax, dword ptr
0047BB68|.8D95 FCFEFFFF lea edx, dword ptr
0047BB6E|.E8 65D0F8FF call 00408BD8
0047BB73|.8D85 FCFEFFFF lea eax, dword ptr
0047BB79|.BA A4BF4700 mov edx, 0047BFA4 ;ASCII "Reg.ini"
0047BB7E|.E8 4982F8FF call 00403DCC
以上代码取出假码。shift F9返回:
0047B38C/.55 push ebp
0047B38D|.8BEC mov ebp, esp
0047B38F|.B9 0B000000 mov ecx, 0B
0047B394|>6A 00 /push 0
0047B396|.6A 00 |push 0
0047B398|.49 |dec ecx
0047B399|.^ 75 F9 \jnz short 0047B394
0047B39B|.53 push ebx
0047B39C|.56 push esi
0047B39D|.57 push edi
0047B39E|.8BD8 mov ebx, eax
0047B3A0|.33C0 xor eax, eax
0047B3A2|.55 push ebp
0047B3A3|.68 BDB64700 push 0047B6BD
0047B3A8|.64:FF30 push dword ptr fs:
0047B3AB|.64:8920 mov dword ptr fs:, esp
0047B3AE|.8BC3 mov eax, ebx
0047B3B0|.E8 77070000 call 0047BB2C ;读取reg.ini
0047B3B5|.33C0 xor eax, eax
0047B3B7|.E8 74D9F8FF call 00408D30
0047B3BC|.8945 F0 mov dword ptr , eax
0047B3BF|.8955 F4 mov dword ptr , edx
0047B3C2|.6A 00 push 0
0047B3C4|.68 CC100000 push 10CC
0047B3C9|.8B45 F0 mov eax, dword ptr
0047B3CC|.8B55 F4 mov edx, dword ptr
0047B3CF|.E8 5AB1F8FF call 0040652E ;机器码
0047B3D4|.85D2 test edx, edx
0047B3D6|.7D 07 jge short 0047B3DF
0047B3D8|.F7D8 neg eax
0047B3DA|.83D2 00 adc edx, 0
0047B3DD|.F7DA neg edx
0047B3DF|>8945 F0 mov dword ptr , eax
。。。。。。
0047B506|.E8 5D88F8FF call 00403D68
0047B50B|.8B45 C4 mov eax, dword ptr ;假码
0047B50E|.8D55 FC lea edx, dword ptr
0047B511|.E8 4676F8FF call 00402B5C ;假码转换为数字Sn1
0047B516|.8BF0 mov esi, eax
0047B518|.68 D4B64700 push 0047B6D4 ;ASCII "ID NUMBER = "
0047B51D|.FF75 F4 push dword ptr
0047B520|.FF75 F0 push dword ptr
0047B523|.8D45 BC lea eax, dword ptr
0047B526|.E8 5DD4F8FF call 00408988 ;ID number
0047B52B|.FF75 BC push dword ptr
0047B52E|.68 ECB64700 push 0047B6EC ;ASCII "017151."
0047B533|.8D55 B8 lea edx, dword ptr
0047B536|.B8 CC100000 mov eax, 10CC ;10cc=4300
0047B53B|.E8 18D4F8FF call 00408958
0047B540|.FF75 B8 push dword ptr
0047B543|.68 FCB64700 push 0047B6FC ;ASCII "ttz"
0047B548|.8D45 C0 lea eax, dword ptr
0047B54B|.BA 05000000 mov edx, 5
0047B550|.E8 2F89F8FF call 00403E84 ;合并ID number
0047B555|.8B55 C0 mov edx, dword ptr
0047B558|.8B83 EC020000 mov eax, dword ptr
0047B55E|.E8 B934FBFF call 0042EA1C
0047B563|.D1FE sar esi, 1 ;Sn1除以2
0047B565|.79 03 jns short 0047B56A
0047B567|.83D6 00 adc esi, 0
0047B56A|>56 push esi
0047B56B|.68 CC100000 push 10CC ;4300
0047B570|.E8 A3FDFFFF call <jmp.&GCDL.Registered>
0047B575|.84C0 test al, al
0047B577|.0F84 97000000 je 0047B614
0047B57D|.A1 A41C4800 mov eax, dword ptr
0047B582|.C600 01 mov byte ptr , 1 ;写入全局变量
0047B585|.BA 08B74700 mov edx, 0047B708 ;ASCII "Registered Thank you"
0047B58A|.8BC3 mov eax, ebx
0047B58C|.E8 8B34FBFF call 0042EA1C
0047B591|.BA 28B74700 mov edx, 0047B728 ;ASCII " Reg Ok "
0047B596|.8B83 EC020000 mov eax, dword ptr ;invalidate license info!
由此可知,0047B570|.E8 A3FDFFFF call <jmp.&GCDL.Registered>为关键call。跟进关键call,发现注册码的验证不是在exe而是在GCDL.dll。
0003993C4 >/$55 push ebp
003993C5|.8BEC mov ebp, esp
003993C7|.83C4 E8 add esp, -18
003993CA|.53 push ebx
003993CB|.33DB xor ebx, ebx
003993CD|.33C0 xor eax, eax
003993CF|.E8 F0CEFFFF call 003962C4 ;GetDiskFreeSpaceEXa
003993D4|.8945 F8 mov dword ptr , eax ;C盘容量低位
003993D7|.8955 FC mov dword ptr , edx ;C盘容量高位
003993DA|.8B45 08 mov eax, dword ptr ;ID的部分
003993DD|.99 cdq
003993DE|.52 push edx
003993DF|.50 push eax
003993E0|.8B45 F8 mov eax, dword ptr
003993E3|.8B55 FC mov edx, dword ptr
003993E6|.E8 2BB8FFFF call 00394C16 ;C盘容量除以4300,取整
003993EB|.85D2 test edx, edx
003993ED|.7D 07 jge short 003993F6
003993EF|.F7D8 neg eax
003993F1|.83D2 00 adc edx, 0
003993F4|.F7DA neg edx
003993F6|>8945 F8 mov dword ptr , eax ;=机器码部分
003993F9|.8955 FC mov dword ptr , edx
003993FC|.DF6D F8 fild qword ptr ;浮点加载
003993FF|.DB7D E8 fstp tbyte ptr
00399402|.9B wait
00399403|.DB6D E8 fld tbyte ptr
00399406|.D9E1 fabs ;绝对值
00399408|.D9FA fsqrt ;平方根
0039940A|.DB7D E8 fstp tbyte ptr
0039940D|.9B wait
0039940E|.8B45 0C mov eax, dword ptr
00399411|.99 cdq
00399412|.52 push edx
00399413|.50 push eax
00399414|.DB6D E8 fld tbyte ptr
00399417|.DB2D 54943900 fld tbyte ptr ;3.141
0039941D|.DEC9 fmulp st(1), st ;相乘
0039941F|.E8 4093FFFF call 00392764 ;浮点保存整数出栈-》Sn2
00399424|.290424 sub dword ptr , eax ;(Sn1)/2-Sn2
00399427|.195424 04 sbb dword ptr , edx
0039942B|.58 pop eax ;取出
0039942C|.5A pop edx
0039942D|.85D2 test edx, edx
0039942F|.7D 07 jge short 00399438
00399431|.F7D8 neg eax
00399433|.83D2 00 adc edx, 0
00399436|.F7DA neg edx
00399438|>83FA 00 cmp edx, 0
0039943B|.75 07 jnz short 00399444
0039943D|.83F8 64 cmp eax, 64 ;eax<=64注册成功
00399440|.73 06 jnb short 00399448
00399442|.EB 02 jmp short 00399446
00399444|>7D 02 jge short 00399448
00399446|>B3 01 mov bl, 1 ;标志位
00399448|>8BC3 mov eax, ebx
0039944A|.5B pop ebx
0039944B|.8BE5 mov esp, ebp
0039944D|.5D pop ebp
0039944E\.C2 0800 retn 8
其中需要说明的是64除法的分析:
003993E6|.E8 2BB8FFFF call 00394C16 ;C盘容量除以4300,取整
感谢前辈们的辛勤工作,实在看不懂的同学参考下:http://www.pediy.com/bbshtml/bbs7/pediy7-180.htm
00394C16/$55 push ebp
00394C17|.53 push ebx
00394C18|.56 push esi
00394C19|.57 push edi
00394C1A|.33FF xor edi, edi
00394C1C|.8B5C24 14 mov ebx, dword ptr ;机器码部分
00394C20|.8B4C24 18 mov ecx, dword ptr
00394C24|.0BC9 or ecx, ecx
00394C26|.75 08 jnz short 00394C30
00394C28|.0BD2 or edx, edx ;容量小的时候
00394C2A|.74 5C je short 00394C88
00394C2C|.0BDB or ebx, ebx
00394C2E|.74 58 je short 00394C88
00394C30|>0BD2 or edx, edx
00394C32|.79 0A jns short 00394C3E ;非负跳转
00394C34|.F7DA neg edx
00394C36|.F7D8 neg eax
00394C38|.83DA 00 sbb edx, 0
00394C3B|.83CF 01 or edi, 1
00394C3E|>0BC9 or ecx, ecx
00394C40|.79 0A jns short 00394C4C
00394C42|.F7D9 neg ecx
00394C44|.F7DB neg ebx
00394C46|.83D9 00 sbb ecx, 0
00394C49|.83F7 01 xor edi, 1
00394C4C|>8BE9 mov ebp, ecx
00394C4E|.B9 40000000 mov ecx, 40 ;ecx=40
00394C53|.57 push edi
00394C54|.33FF xor edi, edi
00394C56|.33F6 xor esi, esi
00394C58|>D1E0 /shl eax, 1 ;eax*2
00394C5A|.D1D2 |rcl edx, 1 ;edx*2
00394C5C|.D1D6 |rcl esi, 1
00394C5E|.D1D7 |rcl edi, 1
00394C60|.3BFD |cmp edi, ebp
00394C62|.72 0B |jb short 00394C6F
00394C64|.77 04 |ja short 00394C6A
00394C66|.3BF3 |cmp esi, ebx
00394C68|.72 05 |jb short 00394C6F
00394C6A|>2BF3 |sub esi, ebx
00394C6C|.1BFD |sbb edi, ebp
00394C6E|.40 |inc eax
00394C6F|>^ E2 E7 \loopd short 00394C58 ;循环40H次
00394C71|.5B pop ebx
00394C72|.F7C3 01000000 test ebx, 1
00394C78|.74 07 je short 00394C81
00394C7A|.F7DA neg edx
00394C7C|.F7D8 neg eax
00394C7E|.83DA 00 sbb edx, 0
00394C81|>5F pop edi
00394C82|.5E pop esi
00394C83|.5B pop ebx
00394C84|.5D pop ebp
00394C85|.C2 0800 retn 8
00394C88|>F7F3 div ebx
00394C8A|.33D2 xor edx, edx
00394C8C\.^ EB F3 jmp short 00394C81
00394C8E .56 push esi
00394C8F .8B7424 0C mov esi, dword ptr
00394C93 .237424 08 and esi, dword ptr
00394C97 .83FE FF cmp esi, -1
00394C9A .75 11 jnz short 00394CAD
00394C9C .8BF0 mov esi, eax
00394C9E .0BF2 or esi, edx
00394CA0 .81FE 00000080 cmp esi, 80000000
00394CA6 .75 05 jnz short 00394CAD
00394CA8 .8BC6 mov eax, esi
00394CAA .5E pop esi
00394CAB .48 dec eax
00394CAC .C3 retn
【算法总结】
1.取得C:的容量,除以4300得到机器码unique ID
2.机器码开放后乘以3.141得到K
2.k减去注册码的一半,如果结果小于等于100,注册成功,否则失败
【破解总结】
爆破极度简单,属于秒杀型。
【算法注册机】
VB取硬盘容量稍显麻烦,既然有unique ID显示,不妨采用一个偷懒的方法
Private Sub Command1_Click()
Dim MachineCode As String
Dim Serial As Single
MachineCode = Trim(Text1.Text)
If InStr(MachineCode, "017151.4300ttz") > 0 Then
MachineCode = Replace(MachineCode, "017151.4300ttz", "")
MachineCode = Replace(MachineCode, "ID NUMBER = ", "")
Serial = Int(Sqr(Val(Trim(MachineCode))) * 3.141) * 2 + 100
Text2.Text = Serial
Else
Text1.Text = "Please Check Your Unique ID"
End If
End Sub
【版权声明】破文是学习的手记,兴趣是成功的源泉;本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢! 楼主的第一次啊!呵呵,支持原创作品 感谢楼主分享,饮水思源谢谢啦:handshake 这个收藏了 不错 支持!收藏了
页:
[1]