XXXX下载精灵 1.60算法分析[适合新手]
本帖最后由 姐又寡闻了 于 2019-6-6 22:21 编辑【文章标题】:图片批量下载精灵 1.60算法分析[适合新手]
【文章作者】:pj2020
【软件名称】:xxxxx下载精灵 1.60
【软件大小】:957KB
【保护方式】:注册码
【下载地址】:自己搜索
【加壳方式】:无壳
【编写工具】:Borland Delphi 6.0 -7.0
【破解工具】:PEID、OD
【操作平台】:盗版XP3
【作者声明】:只是感兴趣,没有其他目的
【软件简介】:图片批量下载精灵是一款从网站上下载图片的共享软件,它可以把网站上的图片都下载下来。
【思路方法】本程序无壳,重启验证。因前面的步骤比较简单,在此不再啰嗦,直接进入算法分部:(以机器码“abcde”为例)
005273C0/$55 push ebp ;算法部分
005273C1|.8BEC mov ebp,esp
005273C3|.51 push ecx
005273C4|.B9 04000000 mov ecx,0x4
005273C9|>6A 00 /push 0x0
005273CB|.6A 00 |push 0x0
005273CD|.49 |dec ecx
005273CE|.^ 75 F9 \jnz short PicDown.005273C9
005273D0|.51 push ecx
005273D1|.874D FC xchg ,ecx
005273D4|.53 push ebx
005273D5|.56 push esi
005273D6|.57 push edi
005273D7|.8BF9 mov edi,ecx
005273D9|.8955 FC mov ,edx
005273DC|.8B45 FC mov eax,
005273DF|.E8 00DCEDFF call PicDown.00404FE4
005273E4|.33C0 xor eax,eax
005273E6|.55 push ebp
005273E7|.68 81755200 push PicDown.00527581
005273EC|.64:FF30 push dword ptr fs:
005273EF|.64:8920 mov dword ptr fs:,esp
005273F2|.8BC7 mov eax,edi
005273F4|.E8 3BD7EDFF call PicDown.00404B34
005273F9|.8B45 FC mov eax, ;机器码abcde
005273FC|.E8 F3D9EDFF call PicDown.00404DF4
00527401|.8BF0 mov esi,eax ;机器码长度eax=00000005
00527403|.85F6 test esi,esi
00527405|.7E 26 jle short PicDown.0052742D
00527407|.BB 01000000 mov ebx,0x1 ;ebx赋值0x1
0052740C|>8D4D EC /lea ecx,
0052740F|.8B45 FC |mov eax, ;机器码abcde
00527412|.0FB64418 FF |movzx eax,byte ptr ds:;依次取机器码ASC码:61 ('a')62 ('b')...65 ('e')
00527417|.33D2 |xor edx,edx
00527419|.E8 1224EEFF |call PicDown.00409830
0052741E|.8B55 EC |mov edx, ;
00527421|.8D45 F8 |lea eax,
00527424|.E8 D3D9EDFF |call PicDown.00404DFC
00527429|.43 |inc ebx
0052742A|.4E |dec esi
0052742B|.^ 75 DF \jnz short PicDown.0052740C
0052742D|>8B45 F8 mov eax, ;机器码ASC码连成新名: "6162636465"
00527430|.E8 BFD9EDFF call PicDown.00404DF4
00527435|.8BF0 mov esi,eax ;新名长度eax=0000000A
00527437|.85F6 test esi,esi
00527439|.7E 2C jle short PicDown.00527467
0052743B|.BB 01000000 mov ebx,0x1 ;ebx赋值0x1
00527440|>8B45 F8 /mov eax, ;
00527443|.E8 ACD9EDFF |call PicDown.00404DF4
00527448|.2BC3 |sub eax,ebx ;eax-ebx=A-1
0052744A|.8B55 F8 |mov edx,
0052744D|.8A1402 |mov dl,byte ptr ds: ; 倒序取新名ASC码:=35 ('5')36 ('6')34 ('4')...36 ('6')
00527450|.8D45 E8 |lea eax,
00527453|.E8 C4D8EDFF |call PicDown.00404D1C
00527458|.8B55 E8 |mov edx,
0052745B|.8D45 F4 |lea eax,
0052745E|.E8 99D9EDFF |call PicDown.00404DFC
00527463|.43 |inc ebx
00527464|.4E |dec esi
00527465|.^ 75 D9 \jnz short PicDown.00527440
00527467|>8D45 F8 lea eax,
0052746A|.50 push eax
0052746B|.B9 04000000 mov ecx,0x4
00527470|.BA 01000000 mov edx,0x1
00527475|.8B45 F4 mov eax, ;新名倒序: "5646362616"
00527478|.E8 D7DBEDFF call PicDown.00405054
0052747D|.8D45 F4 lea eax,
00527480|.50 push eax
00527481|.B9 04000000 mov ecx,0x4
00527486|.BA 05000000 mov edx,0x5
0052748B|.8B45 F4 mov eax,
0052748E|.E8 C1DBEDFF call PicDown.00405054
00527493|.8B45 F8 mov eax, ;新名倒序前四位: "5646"
00527496|.E8 59D9EDFF call PicDown.00404DF4
0052749B|.83F8 04 cmp eax,0x4 ;是否够4位?
0052749E|.7D 2F jge short PicDown.005274CF ;够就跳走
005274A0|.8B45 F8 mov eax,
005274A3|.E8 4CD9EDFF call PicDown.00404DF4
005274A8|.8BD8 mov ebx,eax
005274AA|.83FB 03 cmp ebx,0x3
005274AD|.7F 20 jg short PicDown.005274CF
005274AF|>8D4D E4 /lea ecx,
005274B2|.8BC3 |mov eax,ebx
005274B4|.C1E0 02 |shl eax,0x2 ;不够4位,进行位数左移2位
005274B7|.33D2 |xor edx,edx
005274B9|.E8 7223EEFF |call PicDown.00409830
005274BE|.8B55 E4 |mov edx,
005274C1|.8D45 F8 |lea eax,
005274C4|.E8 33D9EDFF |call PicDown.00404DFC
005274C9|.43 |inc ebx
005274CA|.83FB 04 |cmp ebx,0x4
005274CD|.^ 75 E0 \jnz short PicDown.005274AF
005274CF|>8B45 F4 mov eax, ;取新名倒序第5-8位: "3626"
005274D2|.E8 1DD9EDFF call PicDown.00404DF4
005274D7|.83F8 04 cmp eax,0x4 ;是否够4位?
005274DA|.7D 2F jge short PicDown.0052750B ;够就跳走
005274DC|.8B45 F4 mov eax,
005274DF|.E8 10D9EDFF call PicDown.00404DF4
005274E4|.8BD8 mov ebx,eax
005274E6|.83FB 03 cmp ebx,0x3
005274E9|.7F 20 jg short PicDown.0052750B
005274EB|>8D4D E0 /lea ecx,
005274EE|.8BC3 |mov eax,ebx
005274F0|.C1E0 02 |shl eax,0x2
005274F3|.33D2 |xor edx,edx
005274F5|.E8 3623EEFF |call PicDown.00409830
005274FA|.8B55 E0 |mov edx,
005274FD|.8D45 F4 |lea eax,
00527500|.E8 F7D8EDFF |call PicDown.00404DFC
00527505|.43 |inc ebx
00527506|.83FB 04 |cmp ebx,0x4
00527509|.^ 75 E0 \jnz short PicDown.005274EB
0052750B|>8D45 F0 lea eax,
0052750E|.BA 98755200 mov edx,PicDown.00527598 ;固定字串:Pic4e985espr
00527513|.E8 B4D6EDFF call PicDown.00404BCC
00527518|.8D45 DC lea eax,
0052751B|.50 push eax
0052751C|.B9 04000000 mov ecx,0x4 ;取固定字串四位
00527521|.BA 01000000 mov edx,0x1 ;从第一位开始取
00527526|.8B45 F0 mov eax,
00527529|.E8 26DBEDFF call PicDown.00405054
0052752E|.FF75 DC push ;固定字串前四位,(ASCII "Pic4")
00527531|.68 B0755200 push PicDown.005275B0 ;以“-”号连接
00527536|.FF75 F8 push ;新名倒序前四位: (ASCII "5646")
00527539|.8D45 D8 lea eax,
0052753C|.50 push eax
0052753D|.B9 05000000 mov ecx,0x5 ;取固定字串五位
00527542|.BA 05000000 mov edx,0x5 ;从第五位开始取
00527547|.8B45 F0 mov eax,
0052754A|.E8 05DBEDFF call PicDown.00405054
0052754F|.FF75 D8 push ;取固定字串第5-9位,(ASCII "e985e")
00527552|.68 B0755200 push PicDown.005275B0 ;以“-”号连接
00527557|.FF75 F4 push ;取新名倒序第5-8位:(ASCII "3626")
0052755A|.8BC7 mov eax,edi
0052755C|.BA 06000000 mov edx,0x6
00527561|.E8 4ED9EDFF call PicDown.00404EB4
00527566|.33C0 xor eax,eax
00527568|.5A pop edx ;PicDown.00527588
00527569|.59 pop ecx ;PicDown.00527588
0052756A|.59 pop ecx ;PicDown.00527588
0052756B|.64:8910 mov dword ptr fs:,edx
0052756E|.68 88755200 push PicDown.00527588
00527573|>8D45 D8 lea eax,
00527576|.BA 0A000000 mov edx,0xA
0052757B|.E8 D8D5EDFF call PicDown.00404B58
00527580\.C3 retn
算法总结:(以机器码“abcde”为例)注册码根据机器码和固定字串计算得出:各机器码ASC码相连后6162636465的倒序:5646362616取倒序第1-4位,记为A:"5646"取倒序第5-8位,记为B:"3626"取固定字串Pic4e985espr第1-4位,记为C:"Pic4"取固定字串Pic4e985espr第5-9位:记为D:"e985e"注册码=C-AD-B,即为:"Pic4-5646e985e-3626"
特殊情况:当机器码为3个字符时,新名倒序后第5-8位实际上只有第5-6位,那么第7-8位必须通过两次左移2位来获取:第1次左移为2(第5-8位的实际位数)左移2位=8(作为第7位),第2次左移为3(第5-8位的实际位数+1)左移2位=C(作为第8位)。结果第7-8位为“8C”。
当机器码为2个字符时,新名倒序后第5-8位实际上没有,为零,那么第5-8位必须通过四次左移2位来获取:第1次左移为0(第5-8位的实际位数)左移2位=0(作为第5位);第2次左移为1(第5-8位的实际位数+1)左移2位=4(作为第6位);第3次左移为2(第5-8位的实际位数+2)左移2位=8(作为第7位);第4次左移为3(第5-8位的实际位数+3)左移2位=C(作为第8位)。结果第5-8位为“048C”。
当机器码为1个字符时,新名倒序后第1-4位只有第1-2位,那么第3-4位必须通过两次左移2位来获取:第1次左移为2(第1-2位的实际位数)左移2位=8(作为第3位),第2次左移为3(第1-2位的实际位数+1)左移2位=C(作为第4位)。结果第3-4位为“8C”。而第5-8位实际上没有是零,第5-8位必须通过四次左移2位来获取:第1次左移为0(第5-8位的实际位数)左移2位=1(作为第5位);第2次左移为1(第5-8位的实际位数+1)左移2位=4(作为第6位);第3次左移为2(第5-8位的实际位数+2)左移2位=8(作为第7位);第4次左移为3(第5-8位的实际位数+3)左移2位=C(作为第8位)。结果第5-8位为“048C”。
当机器码为0个字符时,即机器码为空时,新名倒序后第1-8位均为零,所以在算第1-4及5-8位时,均是从0、1、2、3开始左移2位各四次,最终第1-4及5-8位结果均为:“048C”。
写在后面:本软件为明码比较,就算小白中的小白也很容易追到注册码并做出内存注册机。至于软件功能如何,并没有去验证,因本文旨在探讨算法,别无其他。对于那些的确需要这个软件的朋友,还是建议去购买正版,支持一下国软! 另外,本软件的算法跟前面有一个软件的算法几乎一模一样(详见本坛http://www.52pojie.cn/thread-598117-1-1.html),真有点晕了。所不同的是,本软件所说的机器码关非软件自动生成,而是由用户随便填写均可。所以在做算法注册机时,如果是机器码中含有中文时,就要多考虑一些。
正在照此软件,谢谢了 功能不错,下载的都是原始图片吗 3开始左移2位各四次,最终第1-4及5-8位结果均为:“048C”。
页:
[1]