飘云 发表于 2010-4-30 14:52:59

【答坛友问】PDF2TXT v3.2简单算法分析+ASM注册函数

【破文标题】PDF2TXT v3.2简单算法分析+ASM注册函数
【破文作者】飘云/P.Y.G
【官方主页】https://www.chinapyg.com
【作者博客】http://blog.piaoyunsoft.com
【破解平台】WinXp SP3
【破解工具】PEiD0.94、OD
【作者邮箱】[email protected]
【软件名称】PDF2TXT v3.2
【软件大小】1.34M
【原版下载】http://verypdf.com/pdf2txt/pdf2txt.htm

问题由来:https://www.chinapyg.com/viewthread.php?tid=55225&page=1&extra=

OD载入程序运行,下断 BP MessageBoxA
找到到这里:
这里是 verypdf.dll 领空,而不是提问者所说的系统领空100019A2mov   esi, dword ptr
100019A9push    0C8
100019AEmov   ecx, 32
100019B3xor   eax, eax
100019B5mov   edi, 1001A850                  ; 1234567890abcdef
100019BApush    1001A850                         ; 1234567890abcdef
100019BFpush    3FB
100019C4push    esi
100019C5rep   stos dword ptr es:
100019C7call    dword ptr              ; USER32.GetDlgItemTextA
100019CDpush    1001A850                         ; 1234567890abcdef
100019D2call    10001170                         ; 算法CALL

{----------------------算法CALL-------------------------}

10001170sub   esp, 18
10001173push    ebx
10001174push    esi
10001175mov   esi, dword ptr
10001179lea   edx, dword ptr
1000117Dpush    edi
1000117Exor   bl, bl
10001180mov   al, byte ptr              ; KEY
10001183mov   cl, byte ptr              ; KEY
10001186push    edx
10001187mov   byte ptr , al
1000118Bmov   byte ptr , bl
1000118Fmov   byte ptr , cl
10001193mov   byte ptr , bl
10001197call    100027D1                         ; KEY校验
1000119Cmov   edi, eax
1000119Elea   eax, dword ptr
100011A2push    eax
100011A3call    100027D1                         ; KEY校验
100011A8add   edi, eax
100011AAadd   esp, 8
100011ADcmp   edi, 0B                        ; 校验通过后两数相加要=11
100011B0je      short 100011BB
100011B2pop   edi
100011B3pop   esi
100011B4xor   eax, eax
100011B6pop   ebx
100011B7add   esp, 18
100011BAretn
100011BBmov   cl, byte ptr                ; KEY
100011BDmov   dl, byte ptr              ; KEY
100011C0lea   eax, dword ptr
100011C4mov   byte ptr , cl
100011C8push    eax
100011C9mov   byte ptr , bl
100011CDmov   byte ptr , dl
100011D1mov   byte ptr , bl
100011D5call    100027D1
100011DAlea   ecx, dword ptr
100011DEmov   edi, eax
100011E0push    ecx
100011E1call    100027D1
100011E6add   edi, eax
100011E8add   esp, 8
100011EBcmp   edi, 8                           ; 校验通过后两数相加要=8
100011EEje      short 100011F9
100011F0pop   edi
100011F1pop   esi
100011F2xor   eax, eax
100011F4pop   ebx
100011F5add   esp, 18
100011F8retn
100011F9mov   cl, byte ptr              ; KEY
100011FCmov   al, 24                           ; $
100011FEcmp   cl, al                           ; KEY必须为 $
10001200je      short 1000120B
10001202pop   edi
10001203pop   esi
10001204xor   eax, eax
10001206pop   ebx
10001207add   esp, 18
1000120Aretn
1000120Bcmp   byte ptr , al             ; KEY必须为 $
1000120Eje      short 10001219
10001210pop   edi
10001211pop   esi
10001212xor   eax, eax
10001214pop   ebx
10001215add   esp, 18
10001218retn
10001219mov   cl, byte ptr              ; KEY
1000121Cxor   eax, eax
1000121Ecmp   cl, 40                           ; KEY必须为@
10001221pop   edi
10001222pop   esi
10001223pop   ebx
10001224sete    al                               ; 标志位
10001227add   esp, 18
1000122Aretn【算法总结】
1.KEY + KEY = 11
2.KEY + KEY = 8
3.KEY = $(24h)
4.KEY = $(24h)
5.KEY = @(40h)
6.其他位用随机字符填充即可

【注册函数】
.data
szFormat db '%s',0
szConstTable db '0123456789abcdefghijklmnopqrstuvwxyz',0


.code

_Rand proc uses ecx edx First:DWORD,Second:DWORD
rdtsc
;invoke GetTickCount
mov ecx,23
mul ecx
add eax,7
mov ecx,Second
sub ecx,First
inc ecx
xor edx,edx
div ecx
add edx,First
mov eax,edx
ret
_Rand endp


;=================================================
;注册算法:
;1.KEY + KEY = 11
;2.KEY + KEY = 8
;3.KEY = $(24h)
;4 KEY = $(24h)
;5 KEY = @(40h)
;6 其他位用随机字符填充即可
;Code By PiaoYun/P.Y.G
;=================================================
KeyGen proc

LOCAL @szKey:BYTE;多定义一个字节空间~ 否则出问题
LOCAL @szOut:BYTE

invoke RtlZeroMemory,addr @szOut,sizeof @szOut
invoke RtlZeroMemory,addr @szKey,sizeof @szKey

xor eax,eax
xor ecx,ecx
xor edx,edx

;KEY
invoke _Rand,2,9
movzx edx,byte ptr
mov byte ptr[@szKey + 14],dl
;计算KEY
mov   edx,11
sub edx,eax
movzx edx,byte ptr
mov byte ptr[@szKey + 15],dl

;KEY
invoke _Rand,0,8
movzx edx,byte ptr
mov byte ptr[@szKey + 0],dl
;计算KEY
mov   edx,8
sub edx,eax
movzx edx,byte ptr
mov byte ptr[@szKey + 1],dl

mov byte ptr[@szKey + 5],24h
mov byte ptr[@szKey + 6],24h
mov byte ptr[@szKey + 7],40h

;KEY:2、3、4
mov ecx,2
@@:
invoke _Rand,0,35
movzx edx,byte ptr
mov byte ptr[@szKey + ecx],dl
inc ecx
cmp ecx,5
jl @B

;KEY:8,9,10,11,12,13
mov ecx,8
@@:
invoke _Rand,0,35
movzx edx,byte ptr
mov byte ptr[@szKey + ecx],dl
inc ecx
cmp ecx,14
jl @B

invoke lstrcat,addr @szOut,addr @szKey ;连接字符串
lea eax,@szOut
ret

KeyGen endp

【版权声明】 本文纯属技术交流, 原创于PYG官方论坛, 转载请注明作者并保持文章的完整, 谢谢!

月之精灵 发表于 2010-4-30 15:02:21

第一个来学习

GGLHY 发表于 2010-4-30 17:13:41

呵呵,第二个来学习!

nuojiya8 发表于 2010-4-30 18:57:02

谢谢版主了。我是第三个来学习得

老万 发表于 2010-4-30 20:34:36

我早上下载了这个软件,下班回来刚分析完,发现老大的分析与我不睦而和,哈哈,学习了

月之精灵 发表于 2010-4-30 21:43:04

原帖由 老万 于 2010-4-30 20:34 发表 https://www.chinapyg.com/images/common/back.gif
我早上下载了这个软件,下班回来刚分析完,发现老大的分析与我不睦而和,哈哈,学习了
向您学习

wscn 发表于 2010-5-1 11:02:27

学习一下老大的算法
页: [1]
查看完整版本: 【答坛友问】PDF2TXT v3.2简单算法分析+ASM注册函数