易速快递单打印软件算法分析[新手思路]
本帖最后由 pj2020 于 2017-4-11 23:25 编辑【文章标题】:易速快递单打印软件算法分析[新手思路]
【文章作者】:pj2020
【软件名称】:易速快递单打印软件1.65
【软件大小】:7.55MB
【保护方式】:注册码
【下载地址】:自己搜索
【加壳方式】:无壳
【编写工具】:Borland Delphi 6.0 -7.0
【逆向工具】:PEID、OD
【操作平台】:盗版XP3
【作者声明】:只是感兴趣,没有其他目的
【软件简介】:易速快递单打印软件是一款简单好用的快递单打印软件,即有申通、中通、圆通等现成的快递单模板供您选择,您也可以根据自己手中的快递单自己动手设计模板并进行保存,格式底图可以更换成您手中的快递单图片。
【思路方法】
写在前面:
易速快递单打印软件在XX论坛上早已有人PJ了,分析方法包括爆破、追码、内存注册机,能做出内存注册机,很明显是明码比较,所以这里不再讨论这些方法,本文只分析算法部分。
因前面的步骤比较简单,在此不再啰嗦,直接进入算法分部:(以机器码“WD-WCC2EL8ZELFA”为例)
00697A68|.E8 17010000 call kdd.00697B84 ;//进入算法部分
00697B84/$55 push ebp
00697B85|.8BEC mov ebp,esp
00697B87|.51 push ecx
00697B88|.B9 04000000 mov ecx,0x4
00697B8D|>6A 00 /push 0x0
00697B8F|.6A 00 |push 0x0
00697B91|.49 |dec ecx
00697B92|.^ 75 F9 \jnz short kdd.00697B8D
00697B94|.51 push ecx
00697B95|.874D FC xchg ,ecx
00697B98|.53 push ebx
00697B99|.56 push esi
00697B9A|.57 push edi
00697B9B|.8BF9 mov edi,ecx
00697B9D|.8955 FC mov ,edx ;取机器码 "WD-WCC2EL8ZELFA"
00697BA0|.8B45 FC mov eax,
00697BA3|.E8 58D7D6FF call kdd.00405300
00697BA8|.33C0 xor eax,eax
00697BAA|.55 push ebp
00697BAB|.68 457D6900 push kdd.00697D45
00697BB0|.64:FF30 push dword ptr fs:
00697BB3|.64:8920 mov dword ptr fs:,esp
00697BB6|.8BC7 mov eax,edi
00697BB8|.E8 83D2D6FF call kdd.00404E40
00697BBD|.8B45 FC mov eax,
00697BC0|.E8 4BD5D6FF call kdd.00405110
00697BC5|.8BF0 mov esi,eax ;机器码长度eax=0xF
00697BC7|.85F6 test esi,esi
00697BC9|. /7E 26 jle short kdd.00697BF1 ;机器码为空跳走(有这种情况吗?)
00697BCB|.BB 01000000 mov ebx,0x1
00697BD0|>8D4D EC /lea ecx,
00697BD3|.8B45 FC |mov eax, ;机器码: (ASCII "WD-WCC2EL8ZELFA")
00697BD6|.0FB64418 FF |movzx eax,byte ptr ds: ;依次取机器码ASC码:ds:=57 ('W')
00697BDB|.33D2 |xor edx,edx
00697BDD|.E8 C628D7FF |call kdd.0040A4A8
00697BE2|.8B55 EC |mov edx, ;
00697BE5|.8D45 F8 |lea eax,
00697BE8|.E8 2BD5D6FF |call kdd.00405118
00697BED|.43 |inc ebx
00697BEE|.4E |dec esi
00697BEF|.^ 75 DF \jnz short kdd.00697BD0
00697BF1|>8B45 F8 mov eax, ;机器码ASC码连成新名: (ASCII "57442D57434332454C385A454C4641")
00697BF4|.E8 17D5D6FF call kdd.00405110
00697BF9|.8BF0 mov esi,eax ;新名长度eax=0x1E
00697BFB|.85F6 test esi,esi
00697BFD|. /7E 2C jle short kdd.00697C2B ;机器码为空跳走(有这种情况吗?)
00697BFF|.BB 01000000 mov ebx,0x1
00697C04|>8B45 F8 /mov eax, ;新名: (ASCII "57442D57434332454C385A454C4641")
00697C07|.E8 04D5D6FF |call kdd.00405110
00697C0C|.2BC3 |sub eax,ebx ;新名长度1E-ebx(计数器)
00697C0E|.8B55 F8 |mov edx,
00697C11|.8A1402 |mov dl,byte ptr ds: ;倒序取新名ASC码:31 ('1')/34 ('4')/36 ('6')/...
00697C14|.8D45 E8 |lea eax,
00697C17|.E8 0CD4D6FF |call kdd.00405028
00697C1C|.8B55 E8 |mov edx,
00697C1F|.8D45 F4 |lea eax,
00697C22|.E8 F1D4D6FF |call kdd.00405118
00697C27|.43 |inc ebx
00697C28|.4E |dec esi
00697C29|.^ 75 D9 \jnz short kdd.00697C04
00697C2B|>8D45 F8 lea eax,
00697C2E|.50 push eax
00697C2F|.B9 04000000 mov ecx,0x4 ;ecx=0x4,共取4位
00697C34|.BA 01000000 mov edx,0x1 ;edx=0x1,从第1位开始
00697C39|.8B45 F4 mov eax, ;新名倒序: (ASCII "1464C454A583C45423343475D24475")
00697C3C|.E8 2FD7D6FF call kdd.00405370
00697C41|.8D45 F4 lea eax,
00697C44|.50 push eax
00697C45|.B9 04000000 mov ecx,0x4 ;ecx=0x4,共取4位
00697C4A|.BA 05000000 mov edx,0x5 ;edx=0x5,从第5位开始
00697C4F|.8B45 F4 mov eax, ;新名倒序: (ASCII "1464C454A583C45423343475D24475")
00697C52|.E8 19D7D6FF call kdd.00405370
00697C57|.8B45 F8 mov eax, ;取新名倒序第1-4位, (ASCII "1464")
00697C5A|.E8 B1D4D6FF call kdd.00405110
00697C5F|.83F8 04 cmp eax,0x4 ;是否够4位?eax=0x4
00697C62|.7D 2F jge short kdd.00697C93 ;够不够4位?够跳走,不够继续
00697C64|.8B45 F8 mov eax,
00697C67|.E8 A4D4D6FF call kdd.00405110
00697C6C|.8BD8 mov ebx,eax
00697C6E|.83FB 03 cmp ebx,0x3
00697C71|. /7F 20 jg short kdd.00697C93 ;是否大于3位?大于跳走,否则继续
00697C73|> |8D4D E4 /lea ecx,
00697C76|. |8BC3 |mov eax,ebx ;eax=第1-4位的实际位数
00697C78|. |C1E0 02 |shl eax,0x2 ;实际位数作左移2位(根据第1-4位的实际位数来左移)
00697C7B|. |33D2 |xor edx,edx ;edx清零
00697C7D|.E8 2628D7FF |call kdd.0040A4A8
00697C82|.8B55 E4 |mov edx,
00697C85|.8D45 F8 |lea eax,
00697C88|.E8 8BD4D6FF |call kdd.00405118
00697C8D|.43 |inc ebx
00697C8E|.83FB 04 |cmp ebx,0x4
00697C91|.^ 75 E0 \jnz short kdd.00697C73
00697C93|>8B45 F4 mov eax, ;取新名倒序第5-8位, (ASCII "C454")
00697C96|.E8 75D4D6FF call kdd.00405110
00697C9B|.83F8 04 cmp eax,0x4 ;是否够4位?eax=0x4
00697C9E|. /7D 2F jge short kdd.00697CCF ;够不够4位?够跳走,不够继续
00697CA0|. |8B45 F4 mov eax, ;取新名倒序第5-8位
00697CA3|. |E8 68D4D6FF call kdd.00405110
00697CA8|. |8BD8 mov ebx,eax
00697CAA|. |83FB 03 cmp ebx,0x3
00697CAD|. |7F 20 jg short kdd.00697CCF ;是否大于3位?大于跳走,否则继续
00697CAF|> |8D4D E0 /lea ecx,
00697CB2|. |8BC3 |mov eax,ebx ;eax=第5-8位的实际位数
00697CB4|. |C1E0 02 |shl eax,0x2 ;实际位数作左移2位(根据第5-8位的实际位数来左移)
00697CB7|. |33D2 |xor edx,edx ;edx清零
00697CB9|. |E8 EA27D7FF |call kdd.0040A4A8
00697CBE|. |8B55 E0 |mov edx,
00697CC1|. |8D45 F4 |lea eax,
00697CC4|. |E8 4FD4D6FF |call kdd.00405118
00697CC9|. |43 |inc ebx
00697CCA|. |83FB 04 |cmp ebx,0x4
00697CCD|.^|75 E0 \jnz short kdd.00697CAF ;够4位了吗?不够继续
00697CCF|>8D45 F0 lea eax,
00697CD2|.BA 5C7D6900 mov edx,kdd.00697D5C ;固定字串:KDD24588d54c
00697CD7|.E8 FCD1D6FF call kdd.00404ED8
00697CDC|.8D45 DC lea eax,
00697CDF|.50 push eax
00697CE0|.B9 04000000 mov ecx,0x4 ;ecx=0x4,共取4位
00697CE5|.BA 01000000 mov edx,0x1 ;edx=0x1,从第1位开始
00697CEA|.8B45 F0 mov eax,
00697CED|.E8 7ED6D6FF call kdd.00405370 ;
00697CF2|.FF75 DC push ;取固定字串第1-4位:(ASCII "KDD2")
00697CF5|.68 747D6900 push kdd.00697D74 ;用“-”号连接
00697CFA|.FF75 F8 push ;新名倒序第1-4位, (ASCII "1464")
00697CFD|.8D45 D8 lea eax,
00697D00|.50 push eax
00697D01|.B9 05000000 mov ecx,0x5 ;ecx=0x5,共取5位
00697D06|.BA 05000000 mov edx,0x5 ;edx=0x5,从第5位开始
00697D0B|.8B45 F0 mov eax,
00697D0E|.E8 5DD6D6FF call kdd.00405370 ;
00697D13|.FF75 D8 push ;取固定字串第5-9位:(ASCII "4588d")
00697D16|.68 747D6900 push kdd.00697D74 ;用“-”号连接
00697D1B|.FF75 F4 push ;新名倒序第5-8位, (ASCII "C454")
00697D1E|.8BC7 mov eax,edi
00697D20|.BA 06000000 mov edx,0x6 ;edx=0x6
00697D25|.E8 A6D4D6FF call kdd.004051D0
00697D2A|.33C0 xor eax,eax
00697D2C|.5A pop edx ;0012EC08
00697D2D|.59 pop ecx ;0012EC08
00697D2E|.59 pop ecx ;0012EC08
00697D2F|.64:8910 mov dword ptr fs:,edx
00697D32|.68 4C7D6900 push kdd.00697D4C
00697D37|>8D45 D8 lea eax,
00697D3A|.BA 0A000000 mov edx,0xA
00697D3F|.E8 20D1D6FF call kdd.00404E64
00697D44\.C3 retn
算法总结:(以机器码“WD-WCC2EL8ZELFA”为例)**** Hidden Message *****
写在后面:本软件为明码比较,就算小白中的小白也很容易追到注册码,但若以为追到码就成功了,那有可能你就错了,听说该软件有暗桩。至于是否真有暗桩,有何暗桩,又如何去暗桩,那就不在本文的分析范围内了,因本文旨在探讨算法,别无其他。对于那些的确需要这个软件的朋友,还是建议去购买正版,支持一下国软!
最喜欢看算法分析了 加油 总结的特别好,很羡慕大家有时间做自己喜欢做的事,我现在天天跟孩子玩。。{:6_218:}
所以,珍惜时间吧,多做些自己喜欢做的事,免得等到时间身不由己的时候后悔不已。。 我哥用的着这个软件谢谢楼主教程 非常感谢楼主的分享!支持... 感谢分享,学习一下 不错,谢谢分享
这个分析的够详细的 一直在找 打印机快递单的软件 谢啦