- UID
- 32691
注册时间2007-8-2
阅读权限20
最后登录1970-1-1
以武会友
TA的每日心情 | 开心 2019-2-6 23:35 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
- 【破文标题】某视频转换软件算法分析
- 【破解工具】OD
- 【破解平台】Windows
- 【软件名称】某视频转换软件
- 【软件简介】https://www.chinapyg.com/viewthread.php?tid=53247&extra=page%3D1
- 【破解声明】
- ------------------------------------------------------------------------
- 【破解过程】004D6E62 00 db 00
- 004D6E63 90 nop
- 004D6E64 /$ 55 push ebp ; 算法入口
- 004D6E65 |. 8BEC mov ebp, esp
- 004D6E67 |. 51 push ecx
- 004D6E68 |. B9 04000000 mov ecx, 4
- 004D6E6D |> 6A 00 /push 0
- 004D6E6F |. 6A 00 |push 0
- 004D6E71 |. 49 |dec ecx
- 004D6E72 |.^ 75 F9 \jnz short 004D6E6D ; push 8 0
- 004D6E74 |. 51 push ecx
- 004D6E75 |. 874D FC xchg dword ptr [ebp-4], ecx
- 004D6E78 |. 53 push ebx
- 004D6E79 |. 56 push esi
- 004D6E7A |. 57 push edi
- 004D6E7B |. 8BF9 mov edi, ecx
- 004D6E7D |. 8955 FC mov dword ptr [ebp-4], edx ; edx -- name
- 004D6E80 |. 8B45 FC mov eax, dword ptr [ebp-4] ; eax -- name
- 004D6E83 |. E8 08DBF2FF call 00404990
- 004D6E88 |. 33C0 xor eax, eax
- 004D6E8A |. 55 push ebp
- 004D6E8B |. 68 25704D00 push 004D7025
- 004D6E90 |. 64:FF30 push dword ptr fs:[eax]
- 004D6E93 |. 64:8920 mov dword ptr fs:[eax], esp
- 004D6E96 |. 8BC7 mov eax, edi
- 004D6E98 |. E8 43D6F2FF call 004044E0
- 004D6E9D |. 8B45 FC mov eax, dword ptr [ebp-4] ; [ebp-4] --- name
- 004D6EA0 |. E8 FBD8F2FF call 004047A0 ; len(eax) --- 9
- 004D6EA5 |. 8BF0 mov esi, eax
- 004D6EA7 |. 85F6 test esi, esi
- 004D6EA9 |. 7E 26 jle short 004D6ED1 ; if len(name) <= 0, then jump
- 004D6EAB |. BB 01000000 mov ebx, 1 ; ebx = 1
- 004D6EB0 |> 8D4D EC /lea ecx, dword ptr [ebp-14]
- 004D6EB3 |. 8B45 FC |mov eax, dword ptr [ebp-4] ; eax -- name
- 004D6EB6 |. 0FB64418 FF |movzx eax, byte ptr [eax+ebx-1] ; eax = name[ebx-1]
- 004D6EBB |. 33D2 |xor edx, edx
- 004D6EBD |. E8 E222F3FF |call 004091A4 ; eax to ASCII string (16进制大写)
- 004D6EC2 |. 8B55 EC |mov edx, dword ptr [ebp-14] ; edx -- ASCII string of eax
- 004D6EC5 |. 8D45 F8 |lea eax, dword ptr [ebp-8] ; eax -- some buffer
- 004D6EC8 |. E8 DBD8F2FF |call 004047A8 ; strcat(eax, edx)
- 004D6ECD |. 43 |inc ebx
- 004D6ECE |. 4E |dec esi
- 004D6ECF |.^ 75 DF \jnz short 004D6EB0
- 004D6ED1 |> 8B45 F8 mov eax, dword ptr [ebp-8] ; [ebp-8] --- AsciiString of name --- NameAscii
- 004D6ED4 |. E8 C7D8F2FF call 004047A0 ; eax = len(eax)
- 004D6ED9 |. 8BF0 mov esi, eax
- 004D6EDB |. 85F6 test esi, esi
- 004D6EDD |. 7E 2C jle short 004D6F0B
- 004D6EDF |. BB 01000000 mov ebx, 1
- 004D6EE4 |> 8B45 F8 /mov eax, dword ptr [ebp-8]
- 004D6EE7 |. E8 B4D8F2FF |call 004047A0 ; eax = len(eax) -- len([ebp-8])
- 004D6EEC |. 2BC3 |sub eax, ebx ; eax = eax - ebx
- 004D6EEE |. 8B55 F8 |mov edx, dword ptr [ebp-8] ; edx -- [ebp-8] -- NameAscii
- 004D6EF1 |. 8A1402 |mov dl, byte ptr [edx+eax] ; dl = NameAscii[eax]
- 004D6EF4 |. 8D45 E8 |lea eax, dword ptr [ebp-18] ; [ebp-18] -- some buffer
- 004D6EF7 |. E8 CCD7F2FF |call 004046C8
- 004D6EFC |. 8B55 E8 |mov edx, dword ptr [ebp-18]
- 004D6EFF |. 8D45 F4 |lea eax, dword ptr [ebp-C]
- 004D6F02 |. E8 A1D8F2FF |call 004047A8 ; strcat(eax, edx)
- 004D6F07 |. 43 |inc ebx
- 004D6F08 |. 4E |dec esi
- 004D6F09 |.^ 75 D9 \jnz short 004D6EE4 ; 以上 反转(NameAscii) -- NameAscii2
- 004D6F0B |> 8D45 F8 lea eax, dword ptr [ebp-8]
- 004D6F0E |. 50 push eax ; eax -- some buffer
- 004D6F0F |. B9 04000000 mov ecx, 4
- 004D6F14 |. BA 01000000 mov edx, 1
- 004D6F19 |. 8B45 F4 mov eax, dword ptr [ebp-C] ; [ebp-c] -- NameAscii2
- 004D6F1C |. E8 DFDAF2FF call 00404A00 ; substring(NameAscii2, 1, 4)
- 004D6F21 |. 8D45 F4 lea eax, dword ptr [ebp-C]
- 004D6F24 |. 50 push eax
- 004D6F25 |. B9 04000000 mov ecx, 4
- 004D6F2A |. BA 05000000 mov edx, 5
- 004D6F2F |. 8B45 F4 mov eax, dword ptr [ebp-C]
- 004D6F32 |. E8 C9DAF2FF call 00404A00 ; substring(NameAscii2, 5, 4)
- 004D6F37 |. 8B45 F8 mov eax, dword ptr [ebp-8] ; [ebp-8] -- NameAscii2 前4位
- 004D6F3A |. E8 61D8F2FF call 004047A0
- 004D6F3F |. 83F8 04 cmp eax, 4
- 004D6F42 |. 7D 2F jge short 004D6F73 ; if >= 4, jmp
- 004D6F44 |. 8B45 F8 mov eax, dword ptr [ebp-8]
- 004D6F47 |. E8 54D8F2FF call 004047A0
- 004D6F4C |. 8BD8 mov ebx, eax ; ebx = len(前几位)
- 004D6F4E |. 83FB 03 cmp ebx, 3
- 004D6F51 |. 7F 20 jg short 004D6F73 ; if >= 3 , jmp
- 004D6F53 |> 8D4D E4 /lea ecx, dword ptr [ebp-1C]
- 004D6F56 8BC3 mov eax, ebx ; eax = 2/3
- 004D6F58 |. C1E0 02 |shl eax, 2 ; eax = eax * 4
- 004D6F5B |. 33D2 |xor edx, edx
- 004D6F5D |. E8 4222F3FF |call 004091A4 ; eax to AsciiString
- 004D6F62 |. 8B55 E4 |mov edx, dword ptr [ebp-1C] ; 可能是8 C
- 004D6F65 |. 8D45 F8 |lea eax, dword ptr [ebp-8]
- 004D6F68 |. E8 3BD8F2FF |call 004047A8 ; strcat(eax, edx)
- 004D6F6D |. 43 |inc ebx
- 004D6F6E |. 83FB 04 |cmp ebx, 4
- 004D6F71 |.^ 75 E0 \jnz short 004D6F53 ; 凑够4位
- 004D6F73 |> 8B45 F4 mov eax, dword ptr [ebp-C] ; [ebp-c] NameAscii2 第二个前4位
- 004D6F76 |. E8 25D8F2FF call 004047A0
- 004D6F7B |. 83F8 04 cmp eax, 4
- 004D6F7E |. 7D 2F jge short 004D6FAF
- 004D6F80 |. 8B45 F4 mov eax, dword ptr [ebp-C]
- 004D6F83 |. E8 18D8F2FF call 004047A0
- 004D6F88 |. 8BD8 mov ebx, eax
- 004D6F8A |. 83FB 03 cmp ebx, 3
- 004D6F8D |. 7F 20 jg short 004D6FAF
- 004D6F8F |> 8D4D E0 /lea ecx, dword ptr [ebp-20]
- 004D6F92 |. 8BC3 |mov eax, ebx ; 可能是 0 1 2 3
- 004D6F94 |. C1E0 02 |shl eax, 2
- 004D6F97 |. 33D2 |xor edx, edx
- 004D6F99 |. E8 0622F3FF |call 004091A4
- 004D6F9E |. 8B55 E0 |mov edx, dword ptr [ebp-20] ; 0 4 8 C
- 004D6FA1 |. 8D45 F4 |lea eax, dword ptr [ebp-C]
- 004D6FA4 |. E8 FFD7F2FF |call 004047A8
- 004D6FA9 |. 43 |inc ebx
- 004D6FAA |. 83FB 04 |cmp ebx, 4
- 004D6FAD |.^ 75 E0 \jnz short 004D6F8F ; 凑够4位
- 004D6FAF |> 8D45 F0 lea eax, dword ptr [ebp-10]
- 004D6FB2 |. BA 3C704D00 mov edx, 004D703C ; lenomp4888
- 004D6FB7 |. E8 BCD5F2FF call 00404578 ; store something to [ebp-10]
- 004D6FBC |. 8D45 DC lea eax, dword ptr [ebp-24] ; buff
- 004D6FBF |. 50 push eax
- 004D6FC0 |. B9 04000000 mov ecx, 4
- 004D6FC5 |. BA 01000000 mov edx, 1
- 004D6FCA |. 8B45 F0 mov eax, dword ptr [ebp-10]
- 004D6FCD |. E8 2EDAF2FF call 00404A00 ; 取 1234 位 到 [ebp-24]
- 004D6FD2 |. FF75 DC push dword ptr [ebp-24]
- 004D6FD5 |. 68 50704D00 push 004D7050 ; -
- 004D6FDA |. FF75 F8 push dword ptr [ebp-8]
- 004D6FDD |. 8D45 D8 lea eax, dword ptr [ebp-28] ; buff
- 004D6FE0 |. 50 push eax
- 004D6FE1 |. B9 05000000 mov ecx, 5
- 004D6FE6 |. BA 05000000 mov edx, 5
- 004D6FEB |. 8B45 F0 mov eax, dword ptr [ebp-10]
- 004D6FEE |. E8 0DDAF2FF call 00404A00 ; 从 [ebp-10]的 56789 位 到[epb-28]
- 004D6FF3 |. FF75 D8 push dword ptr [ebp-28]
- 004D6FF6 |. 68 50704D00 push 004D7050 ; -
- 004D6FFB |. FF75 F4 push dword ptr [ebp-C]
- 004D6FFE |. 8BC7 mov eax, edi
- 004D7000 |. BA 06000000 mov edx, 6
- 004D7005 |. E8 56D8F2FF call 00404860
- 004D700A |. 33C0 xor eax, eax
- 004D700C |. 5A pop edx
- 004D700D |. 59 pop ecx
- 004D700E |. 59 pop ecx
- 004D700F |. 64:8910 mov dword ptr fs:[eax], edx
- 004D7012 |. 68 2C704D00 push 004D702C
- 004D7017 |> 8D45 D8 lea eax, dword ptr [ebp-28]
- 004D701A |. BA 0A000000 mov edx, 0A
- 004D701F |. E8 E0D4F2FF call 00404504
- 004D7024 \. C3 retn
- 004D7025 .^ E9 FACDF2FF jmp 00403E24
- 004D702A .^ EB EB jmp short 004D7017
- 004D702C . 5F pop edi
- 004D702D . 5E pop esi
- 004D702E . 5B pop ebx
- 004D702F . 8BE5 mov esp, ebp
- 004D7031 . 5D pop ebp
- 004D7032 . C3 retn
- 004D7033 00 db 00
- ------------------------------------------------------------------------
- 【破解总结】算法比较简单,伪码如下:
- name // 用户名
- NameAscii = AsciiString(name)// 去用户名的Ascii大写字符串
- NameAscii2 = 反转(NameAscii) // 反转用户名Ascii字符串
- N1 = 取子串(NameAscii2, 1, 4) // 1到4位
- N2 = 取子串(nameascii2, 5,4)// 5 到8位
- 如果 取 长度(N1)不大于3 或 4, 补齐{
- 补 0 4 8 C
- ...
- }
- Code = "lenomp4888"
- C1 = 取子串(Code,1,4)// 取 1 到 4 位
- C1 入栈
- "-"入栈
- N1入栈
- C2 = 取子串(Code,5, 5) // 取 5 到 9 位
- C2入栈
- "-"入栈
- N2入栈
- 连接以上6个入栈的字符串
- ------------------------------------------------------------------------
- 【版权声明】本文只是出于学习和交流目的,请勿用于商业用途,否则后果自负。软件版权归作者所有。
复制代码 软件在https://www.chinapyg.com/viewthr ... &extra=page%3D1里有介绍
tianxj老大说有暗桩,不过那就不是我这个小菜鸟能解决的了,^_^
[ 本帖最后由 liuyun213 于 2010-1-10 16:27 编辑 ] |
评分
-
查看全部评分
|