【破文标题】淘友助手 V5.1注册算法
【破文作者】XXNB
【作者邮箱】
【作者主页】http://free.ys168.com/?binbinbin7456
【破解工具】OD
【破解平台】xpsp2
【软件名称】淘友助手 V5.1
【软件大小】3082 KB
【原版下载】http://www.skycn.com/soft/31430.html
【保护方式】码
【软件简介】淘宝卖家必备工具!
本程序主要目的是化繁为简!
将烦琐的登记,填写包裹单,统计数量等操作简化!
本程序可以打印邮局包裹单和快递包裹单及包裹封面,商品清单!
可以自动获取买家信息,买家购买商品信息!自动生成包裹单,销货清单!
将手写带来的不便及容易出错误等问题,减至最小。
以往包裹
1,确定买家购买的商品,需要手工记录,或直接出库(非常容易出错)
2,填写包裹单,封装后还需在包装上填写地址(包裹多的时候很麻烦)
使用本程序后
以上操作只要轻点几下鼠标就可以了。
自动提取、打印邮局包裹单,快递包裹单,包装外地址单,商品清单!
【破解声明】向大侠们学习!!!只为学习!请尊重作者的劳动成功!
------------------------------------------------------------------------
【破解过程】
1、用看雪主页上的易语言反编译软件“E-code Explorer”可以轻松定位。
00562EBA 55 push ebp
00562EBB 8BEC mov ebp, esp
00562EBD 81EC 3C000000 sub esp, 3C
00562EC3 C745 FC 0000000>mov dword ptr [ebp-4], 0
00562ECA C745 F8 0000000>mov dword ptr [ebp-8], 0
00562ED1 68 01030080 push 80000301
00562ED6 6A 00 push 0
00562ED8 68 D30A1C34 push 341C0AD3
00562EDD 68 01030080 push 80000301
00562EE2 6A 00 push 0
00562EE4 FF35 584CAE00 push dword ptr [AE4C58]
00562EEA 68 02000000 push 2
00562EEF BB CC000000 mov ebx, 0CC
00562EF4 E8 8E1F0000 call 00564E87
00562EF9 83C4 1C add esp, 1C ; 这里在eax可以看到机器码的16进制表示
00562EFC 8945 FC mov dword ptr [ebp-4], eax
00562EFF DB45 FC fild dword ptr [ebp-4]
00562F02 DD5D F0 fstp qword ptr [ebp-10] ; 机器码装成实数
00562F05 DD45 F0 fld qword ptr [ebp-10]
00562F08 DC0D A76D4000 fmul qword ptr [406DA7] ; *-2
00562F0E DD5D E8 fstp qword ptr [ebp-18]
00562F11 DD45 E8 fld qword ptr [ebp-18]
00562F14 DC05 AF6D4000 fadd qword ptr [406DAF] ; +874
00562F1A DD5D E0 fstp qword ptr [ebp-20]
00562F1D DD45 E0 fld qword ptr [ebp-20]
00562F20 DC35 B76D4000 fdiv qword ptr [406DB7] ; /1.333
00562F26 DD5D D8 fstp qword ptr [ebp-28]
00562F29 DD45 D8 fld qword ptr [ebp-28]
00562F2C DC25 BF6D4000 fsub qword ptr [406DBF] ; -976
00562F32 DD5D D0 fstp qword ptr [ebp-30]
00562F35 DD45 D0 fld qword ptr [ebp-30]
00562F38 DC0D C76D4000 fmul qword ptr [406DC7] ; *9.99
00562F3E DD5D C8 fstp qword ptr [ebp-38]
00562F41 68 01030080 push 80000301
00562F46 6A 00 push 0
00562F48 68 D0489006 push 69048D0
00562F4D DD45 C8 fld qword ptr [ebp-38] ; 这里就是经过上面一堆运算后的浮点数
00562F50 E8 A038FDFF call 005367F5 /// 跟进这里是对运算结果由浮点到整数的转换《《《《《《---
00562F55 68 01030080 push 80000301
00562F5A 6A 00 push 0
00562F5C 50 push eax
00562F5D 68 02000000 push 2
00562F62 BB CC000000 mov ebx, 0CC
00562F67 E8 1B1F0000 call 00564E87 //// 这里计算注册码,根进《《《《《《《《《《《《《《---
00562F6C 83C4 1C add esp, 1C ; 这里的eax就是真码的16进制
00562F6F 8945 F8 mov dword ptr [ebp-8], eax
00562F72 68 01030080 push 80000301
00562F77 6A 00 push 0
00562F79 FF75 F8 push dword ptr [ebp-8]
00562F7C 68 01000000 push 1
00562F81 BB 68010000 mov ebx, 168
00562F86 E8 FC1E0000 call 00564E87 ; 转成10进制字符串
00562F8B 83C4 10 add esp, 10 ; 真码在eax 可以做内存注册机了。这里
00562F8E 8945 F4 mov dword ptr [ebp-C], eax
00562F91 6A FF push -1
00562F93 6A 08 push 8
00562F95 68 BC050116 push 160105BC
00562F9A 68 B8050152 push 520105B8
00562F9F E8 EF1E0000 call 00564E93
00562FA4 83C4 10 add esp, 10 ; 取出假码
00562FA7 8945 F0 mov dword ptr [ebp-10], eax
00562FAA 8B45 F4 mov eax, dword ptr [ebp-C] ; 取出真码
00562FAD 50 push eax ; 真码入栈
00562FAE FF75 F0 push dword ptr [ebp-10] ; 假码入栈,看来要比较了
00562FB1 E8 E132FDFF call 00536297 ; 比较函数
00562FB6 83C4 08 add esp, 8
00562FB9 83F8 00 cmp eax, 0
00562FBC B8 00000000 mov eax, 0
00562FC1 0F95C0 setne al
00562FC4 8945 EC mov dword ptr [ebp-14], eax
00562FC7 8B5D F0 mov ebx, dword ptr [ebp-10]
00562FCA 85DB test ebx, ebx
00562FCC 74 09 je short 00562FD7
00562FCE 53 push ebx
00562FCF E8 AD1E0000 call 00564E81
00562FD4 83C4 04 add esp, 4
00562FD7 8B5D F4 mov ebx, dword ptr [ebp-C]
00562FDA 85DB test ebx, ebx
00562FDC 74 09 je short 00562FE7
00562FDE 53 push ebx
00562FDF E8 9D1E0000 call 00564E81
00562FE4 83C4 04 add esp, 4
00562FE7 837D EC 00 cmp dword ptr [ebp-14], 0
00562FEB 0F84 3B000000 je 0056302C ; 关键跳
00562FF1 68 04000080 push 80000004
00562FF6 6A 00 push 0
00562FF8 68 ED324000 push 004032ED
00562FFD 68 01030080 push 80000301
00563002 6A 00 push 0
00563004 68 10000000 push 10
00563009 68 04000080 push 80000004
0056300E 6A 00 push 0
00563010 68 6D584500 push 0045586D
00563015 68 03000000 push 3
0056301A BB 00030000 mov ebx, 300
0056301F E8 631E0000 call 00564E87
00563024 83C4 28 add esp, 28
00563027 E9 15010000 jmp 00563141
0056302C 6A 00 push 0
0056302E 68 E0010000 push 1E0
00563033 6A FF push -1
00563035 6A 02 push 2
00563037 68 B7050106 push 60105B7
0056303C 68 B8050152 push 520105B8
00563041 E8 471E0000 call 00564E8D
00563046 83C4 18 add esp, 18
00563049 68 00000000 push 0
0056304E BB 04010000 mov ebx, 104
00563053 E8 2F1E0000 call 00564E87
00563058 83C4 04 add esp, 4
0056305B 8945 F4 mov dword ptr [ebp-C], eax
0056305E 68 BA354000 push 004035BA ; ASCII "\设置.ini"
2、跟进浮点运算,由浮点到整数的00562F50 E8 A038FDFF call 005367F5,得到:
005367F5 55 push ebp
005367F6 8BEC mov ebp, esp
005367F8 83C4 F4 add esp, -0C
005367FB D97D FE fstcw word ptr [ebp-2] ; 将FPU的控制字保存到ebp-2
005367FE 66:8B45 FE mov ax, word ptr [ebp-2]
00536802 80CC 0C or ah, 0C ; ax的高位ah和0C或
00536805 66:8945 FC mov word ptr [ebp-4], ax ; 存储或后的结果
00536809 D96D FC fldcw word ptr [ebp-4] ; 从【ebp-4】装入FPU的控制字
0053680C DF7D F4 fistp qword ptr [ebp-C] ; 取出浮点寄存器的值,然后会进行出栈操作
0053680F D96D FE fldcw word ptr [ebp-2] ; 从【ebp-2】装入FPU的控制字
00536812 8B45 F4 mov eax, dword ptr [ebp-C] ; 2079510E-这个数就是转成整数后的,是我们要的。
00536815 8B55 F8 mov edx, dword ptr [ebp-8]
00536818 8BE5 mov esp, ebp
0053681A 5D pop ebp ; “FPU指令FISTP,它将栈中的浮点数弹出并保存为整数”
0053681B C3 retn
3、跟进计算注册码的call 00564E87。这个call是以上面那个整数为基础进行运算的,。得到
10059C80 8B5424 10 mov edx, dword ptr [esp+10]
10059C84 8B4424 0C mov eax, dword ptr [esp+C]
10059C88 83F8 01 cmp eax, 1
10059C8B 8B0A mov ecx, dword ptr [edx] ; 上面那个整数的16进制表示
10059C8D 7E 2F jle short 10059CBE
10059C8F 56 push esi
10059C90 8B7424 08 mov esi, dword ptr [esp+8]
10059C94 57 push edi
10059C95 8D78 FF lea edi, dword ptr [eax-1]
10059C98 8BC6 mov eax, esi
10059C9A 83C2 0C add edx, 0C
10059C9D 83E8 00 sub eax, 0
10059CA0 74 0E je short 10059CB0
10059CA2 48 dec eax
10059CA3 74 07 je short 10059CAC
10059CA5 48 dec eax
10059CA6 75 0A jnz short 10059CB2
10059CA8 330A xor ecx, dword ptr [edx] ; 原来是这句。那个数和固定值069048D0做异或运算
10059CAA EB 06 jmp short 10059CB2 ; 这个call在生成机器码的时候同样用到
10059CAC 0B0A or ecx, dword ptr [edx]
10059CAE EB 02 jmp short 10059CB2
10059CB0 230A and ecx, dword ptr [edx]
10059CB2 4F dec edi ; 异或得到的数转成10进制字符串就是注册码。
10059CB3 ^ 75 E3 jnz short 10059C98
10059CB5 8B4424 10 mov eax, dword ptr [esp+10]
10059CB9 5F pop edi
10059CBA 5E pop esi
10059CBB 8908 mov dword ptr [eax], ecx
10059CBD C3 retn
------------------------------------------------------------------------
【破解总结】
1、这个算法我学到的是浮点运算“FPU指令FISTP”,它的功能是“将栈中的浮点数弹出并保存为整数(Convert top of stack to integer)”
2、首先,取得机器码,转成浮点,然后经过加减乘除得到另一个浮点数。经过指令FISTP转换后得到一个整数。这个整数再和定值069048D0做
异或运算,得到的结果转成10进制字符串就是真码。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!