批量文件改名工具 2.0.0算法分析+ASM注册函数
【破文标题】批量文件改名工具 2.0.0算法分析+ASM注册函数【破文作者】飘云/P.Y.G
【官方主页】https://www.chinapyg.com
【作者博客】http://blog.piaoyunsoft.com
【破解平台】WinXp SP3
【破解工具】PEiD0.94、OD
【作者邮箱】[email protected]
【软件名称】批量文件改名工具 2.0.0
【软件大小】499 K
【原版下载】http://www.newhua.com/soft/90436.htm
【破解过程】
PEID 探测-->Borland Delphi 6.0 - 7.0
很好,,无壳~
OD载入~~输入信息:
Email:[email protected]
注册码:123456789
在OD下断来到(如果找不到这个算法位置,说明您目前还不适合看本文):
004AE490push ebp
004AE491mov ebp, esp
004AE493add esp, -10
004AE496xor ecx, ecx
004AE498mov dword ptr [ebp-10], ecx
004AE49Bmov dword ptr [ebp-C], ecx
004AE49Emov dword ptr [ebp-8], edx
004AE4A1mov dword ptr [ebp-4], eax
004AE4A4xor eax, eax
004AE4A6push ebp
004AE4A7push 004AE5B8
004AE4ACpush dword ptr fs:[eax]
004AE4AFmov dword ptr fs:[eax], esp
004AE4B2mov eax, dword ptr [ebp-4]
004AE4B5call 004AE344 ;关键CALLF7进
004AE4BAtest al, al
004AE4BCje 004AE59D ;关键跳
004AE4C2mov byte ptr , 1
004AE4C9mov edx, 004AE5CC ;※注册成功※
004AE4CEmov eax, dword ptr [ebp-4]
.
.
.
.
{----------------------关键CALL:call 004AE344--------------------}
004AE344push ebp
004AE345mov ebp, esp
004AE347add esp, -10
004AE34Axor edx, edx
004AE34Cmov dword ptr [ebp-C], edx
004AE34Fmov dword ptr [ebp-10], edx
004AE352mov dword ptr [ebp-4], eax
004AE355xor eax, eax
004AE357push ebp
004AE358push 004AE3B0
004AE35Dpush dword ptr fs:[eax]
004AE360mov dword ptr fs:[eax], esp
004AE363lea edx, dword ptr [ebp-C]
004AE366mov eax, dword ptr [ebp-4]
004AE369mov eax, dword ptr [eax+30C]
004AE36Fcall 0045DD80
004AE374mov eax, dword ptr [ebp-C]
004AE377push eax
004AE378lea edx, dword ptr [ebp-10]
004AE37Bmov eax, dword ptr [ebp-4]
004AE37Emov eax, dword ptr [eax+308]
004AE384call 0045DD80
004AE389mov eax, dword ptr [ebp-10] ;指向邮箱
004AE38Cpop edx
004AE38Dcall 004AE1A4 ;算法CALL1 -->F7进去
004AE392mov byte ptr [ebp-5], al ;关键赋值
004AE395xor eax, eax
004AE397pop edx
004AE398pop ecx
004AE399pop ecx
004AE39Amov dword ptr fs:[eax], edx
004AE39Dpush 004AE3B7
004AE3A2lea eax, dword ptr [ebp-10]
004AE3A5mov edx, 2
004AE3AAcall 00404834
004AE3AFretn
004AE3B0jmp 00404190
004AE3B5jmp short 004AE3A2
004AE3B7mov al, byte ptr [ebp-5]
004AE3BAmov esp, ebp
004AE3BCpop ebp
004AE3BDretn
{----------------------算法CALL1:call 004AE1A4---------------------}
004AE1A4push ebp
004AE1A5mov ebp, esp
004AE1A7add esp, -14
004AE1AAxor ecx, ecx
004AE1ACmov dword ptr [ebp-10], ecx
004AE1AFmov dword ptr [ebp-8], edx
004AE1B2mov dword ptr [ebp-4], eax
004AE1B5mov eax, dword ptr [ebp-4]
004AE1B8call 00404CC0
004AE1BDmov eax, dword ptr [ebp-8]
004AE1C0call 00404CC0
004AE1C5xor eax, eax
004AE1C7push ebp
004AE1C8push 004AE243
004AE1CDpush dword ptr fs:[eax]
004AE1D0mov dword ptr fs:[eax], esp
004AE1D3mov byte ptr [ebp-B], 0
004AE1D7mov eax, dword ptr [ebp-4] ;指向邮箱
004AE1DAcall 00404AD0 ;邮箱长度
004AE1DFtest al, al
004AE1E1jbe short 004AE201
004AE1E3mov byte ptr [ebp-11], al
004AE1E6mov byte ptr [ebp-A], 1 ;1
004AE1EA/xor eax, eax
004AE1EC|mov al, byte ptr [ebp-A]
004AE1EF|mov edx, dword ptr [ebp-4] ;指向邮箱地址
004AE1F2|mov al, byte ptr [edx+eax-1] ;逐位
004AE1F6|add byte ptr [ebp-B], al ;字节累加
004AE1F9|inc byte ptr [ebp-A]
004AE1FC|dec byte ptr [ebp-11]
004AE1FF\jnz short 004AE1EA
004AE201lea ecx, dword ptr [ebp-10]
004AE204mov dl, byte ptr [ebp-B] ;取出累加结果(单字节哦~~~)
004AE207mov eax, 004AE25C ;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
004AE20Ccall 004A0028 ;算法CALL2
004AE211mov eax, dword ptr [ebp-10] ;真码
004AE214mov edx, dword ptr [ebp-8] ;假码
004AE217call 00404C1C
004AE21Csete byte ptr [ebp-9] ;标志位
004AE220xor eax, eax
004AE222pop edx
004AE223pop ecx
004AE224pop ecx
004AE225mov dword ptr fs:[eax], edx
004AE228push 004AE24A
004AE22Dlea eax, dword ptr [ebp-10]
004AE230call 00404810
004AE235lea eax, dword ptr [ebp-8]
004AE238mov edx, 2
004AE23Dcall 00404834
004AE242retn
004AE243jmp 00404190
004AE248jmp short 004AE22D
004AE24Amov al, byte ptr [ebp-9] ;标志位传到al~~ 作为注册标志
004AE24Dmov esp, ebp
004AE24Fpop ebp
004AE250retn
{----------------------算法CALL2:call 004A0028---------------------}
004A0028push ebp
004A0029mov ebp, esp
004A002Badd esp, -18
004A002Epush ebx
004A002Fxor ebx, ebx
004A0031mov dword ptr [ebp-18], ebx
004A0034mov dword ptr [ebp-C], ecx
004A0037mov byte ptr [ebp-5], dl
004A003Amov dword ptr [ebp-4], eax
004A003Dmov eax, dword ptr [ebp-4]
004A0040call 00404CC0
004A0045xor eax, eax
004A0047push ebp
004A0048push 004A0112
004A004Dpush dword ptr fs:[eax]
004A0050mov dword ptr fs:[eax], esp
004A0053mov eax, dword ptr [ebp-C]
004A0056call 00404810
004A005Bxor eax, eax
004A005Dmov al, byte ptr [ebp-5] ;前面邮箱的累加结果
004A0060xor eax, 12BFD54 ;异或 0x12BFD54
004A0065mov edx, dword ptr ;指向一个全局变量
004A006Bmov dword ptr [edx], eax ;给变量赋初始值
004A006Dxor eax, eax
004A006Fmov dword ptr [ebp-10], eax
004A0072/mov eax, dword ptr [ebp-4] ;指向密码表
004A0075|call 00404AD0
004A007A|call 004030E8 ;★重要CALL-->获取一个数[与上面的全局变量值有关,进去看]
004A007F|inc eax
004A0080|mov edx, dword ptr [ebp-4] ;指向密码表
004A0083|mov al, byte ptr [edx+eax-1] ;根据eax的结果从密码表中查表获取字符传送到al
004A0087|mov byte ptr [ebp-11], al
004A008A|cmp byte ptr [ebp-11], 2D ;-
004A008E|je short 004A0072
004A0090|cmp byte ptr [ebp-11], 30 ;0
004A0094|je short 004A0072
004A0096|cmp byte ptr [ebp-11], 4F ;O
004A009A|je short 004A0072
004A009C|cmp byte ptr [ebp-11], 20 ;空格
004A00A0|je short 004A0072
004A00A2|cmp byte ptr [ebp-11], 2E ;.
004A00A6|je short 004A0072 ;对获取的字符进行过滤~~如果为上面五种字符则跳过,重新选取,直到符合条件为止
004A00A8|lea eax, dword ptr [ebp-18]
004A00AB|mov dl, byte ptr [ebp-11] ;下面是保存符合条件的字符
004A00AE|call 004049F8
004A00B3|mov edx, dword ptr [ebp-18]
004A00B6|mov eax, dword ptr [ebp-C]
004A00B9|call 00404AD8
004A00BE|mov eax, dword ptr [ebp-C]
004A00C1|mov eax, dword ptr [ebp-C]
004A00C4|mov eax, dword ptr [eax] ;符合条件的字符的个数~~
004A00C6|call 00404AD0
004A00CB|cmp eax, 13 ;符合条件的字符串一共是0x13位~
004A00CE\jnz short 004A0072
004A00D0mov eax, dword ptr [ebp-C]
004A00D3call 00404D28
004A00D8mov byte ptr [eax+4], 2D ;KEY替换成-
004A00DCmov eax, dword ptr [ebp-C]
004A00DFcall 00404D28
004A00E4mov byte ptr [eax+9], 2D ;KEY替换成 -
004A00E8mov eax, dword ptr [ebp-C]
004A00EBcall 00404D28
004A00F0mov byte ptr [eax+E], 2D ;KEY替换成 -
004A00F4xor eax, eax ;上面替换之后的就是注册码了~
004A00F6pop edx
004A00F7pop ecx
004A00F8pop ecx
004A00F9mov dword ptr fs:[eax], edx
004A00FCpush 004A0119
004A0101lea eax, dword ptr [ebp-18]
004A0104call 00404810
004A0109lea eax, dword ptr [ebp-4]
004A010Ccall 00404810
004A0111retn
004A0112jmp 00404190
004A0117jmp short 004A0101
004A0119pop ebx
004A011Amov esp, ebp
004A011Cpop ebp
004A011Dretn
{----------------------重要CALL:call 004030E8---------------------}
004030E8push ebx
004030E9xor ebx, ebx
004030EBimul edx, dword ptr [ebx+4B4008], 808>;和全局变量的值相乘后 保存到edx
004030F5inc edx ;edx+1
004030F6mov dword ptr [ebx+4B4008], edx ;继续保存回去
004030FCmul edx ;edx * eax,结果放在edx中
004030FEmov eax, edx ;保存最终结果,也就是要输出的
00403100pop ebx
00403101retn
【算法总结】
1.按字节方式累加邮箱ASCII
2.累加结果 XOR 12BFD54h
3.将XOR的结果作为下一步第一轮的初始值
4.对3步的结果进行查表处理
5.将指定位置的字符串替换成分隔符'-'(注意:不是插入)
6.最终注册码形式:1111-2222-3333-4444
注册信息保存在:
【算法函数】
.data
szConstTable db '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',0
.code
;=================================================
;注册算法:
;1.按字节方式累加邮箱ASCII
;2.累加结果 XOR 12BFD54h
;3.将XOR的结果作为下一步第一轮的初始值
;4.对3步的结果进行查表处理
;5.将指定位置的字符串替换成分隔符'-'(注意:不是插入)
;6.最终注册码形式:1111-2222-3333-4444
;注册信息保存在:
;=================================================
KeyGen proc uses ecx edx lpEmail:DWORD
LOCAL @szKey:BYTE
LOCAL @bEmaiByte:BYTE
LOCAL @dwTemp:DWORD
invoke RtlZeroMemory,addr @szKey,sizeof @szKey
xor ecx,ecx
xor edx,edx
xor esi,esi
;=============================
;对Email进行计算
invoke lstrlen,lpEmail ;获取Email长度
mov edx,eax ;保存长度
mov cl, 1
mov esi,lpEmail
@@:
xor eax, eax
mov al, cl
mov al, byte ptr [esi+eax-1]
add @bEmaiByte, al
inc cl
dec edx
jnz @B
;=============================
;=============================
;主要获取可视字符过程、查表
mov al,@bEmaiByte
xor eax,12BFD54h
mov @dwTemp, eax
xor esi,esi
@@:
invoke lstrlen,addr szConstTable
xor ebx, ebx
imul edx, dword ptr [@dwTemp], 8088405h
inc edx
mov dword ptr [@dwTemp], edx
mul edx
mov eax,edx
inc eax
mov al,byte ptr eax-1]
cmp al, 2Dh
je @B
cmp al, 30h
je @B
cmp al, 4Fh
je @B
cmp al, 20h
je @B
cmp al, 2Eh
je @B
mov byte ptr[@szKey+esi],al
inc esi
invoke lstrlen,addr @szKey
cmp eax, 13h
jnz @B
;=============================
;插入分隔符
mov byte ptr [@szKey+4h],2Dh
mov byte ptr [@szKey+9h],2Dh
mov byte ptr [@szKey+0Eh],2Dh
;输出最终注册码
lea eax,@szKey
ret
KeyGen endp
【版权声明】 本文纯属技术交流, 原创于PYG官方论坛, 转载请注明作者并保持文章的完整, 谢谢! 还是习惯VC的传参 Del还是有点怪怪的 ~ Nisy跑到我前面去了哈/:018 学习了飘老大的破文,谢谢
页:
[1]