【破文标题】淘友助手 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进制字符串就是真码。

  • 标 题: 答复
  • 作 者:binbinbin
  • 时 间:2006-11-26 12:52

后来发现还有注册认证码的。晕倒,

sorry