【文章标题】: Open Video Joiner V3.0.2注册过程分析
【文章作者】: elance
【作者邮箱】: liupengnpu@163.com
【作者QQ号】: 275199621
【软件名称】: Open Video Joiner V3.0.2
【下载地址】: 自己搜索下载
【加壳方式】: 无
【保护方式】: 注册码
【编写语言】: 没在意
【使用工具】: OD
【操作平台】: XP
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
1、说是注册分析,其实并为对其注册码转换算法深入分析,不过要写注册机的话大部分代码可抄袭源程序的代码,
各位先看个味道,不要向我扔砖头哦,呵呵,:)
2、具体分析
跟踪来到这里:
00422E20 /. 55 push ebp
00422E21 |. 8BEC mov ebp, esp
00422E23 |. 83EC 20 sub esp, 20
00422E26 |. 894D E0 mov [ebp-20], ecx
00422E29 |. 6A 01 push 1
00422E2B |. 8B4D E0 mov ecx, [ebp-20]
00422E2E |. E8 FC130200 call 0044422F
00422E33 |. 8B4D E0 mov ecx, [ebp-20]
00422E36 |. 83C1 70 add ecx, 70
00422E39 |. E8 A28CFEFF call 0040BAE0
00422E3E |. 83F8 02 cmp eax, 2 //注册码小于两位就出错
00422E41 7D 13 jge short 00422E56
00422E43 6A 00 push 0
00422E45 6A 00 push 0
00422E47 |. 68 D4CF4500 push 0045CFD4 ; please input correct user name!
00422E4C |. E8 6AAE0200 call 0044DCBB
00422E51 |. E9 A9020000 jmp 004230FF
00422E61 |. 83F8 08 cmp eax, 8 //大于八位也出错
00422E64 7D 13 jge short 00422E79
00422E66 6A 00 push 0
00422E68 6A 00 push 0
00422E6A |. 68 F4CF4500 push 0045CFF4 ; please input correct registration code!
接着往下看:
//此部分对用输入的用户名著为进行简单的变换,并将转换结果保存到相应位置,供后边比较使用
00422EB6 |. 8845 FA mov [ebp-6], al
00422EB9 |. 0FB645 EF movzx eax, byte ptr [ebp-11]
00422EBD |. 83C8 4F or eax, 4F
00422EC0 |. 8845 EF mov [ebp-11], al
00422EC3 |. 0FB64D F8 movzx ecx, byte ptr [ebp-8]
00422EC7 |. 83C9 56 or ecx, 56
00422ECA |. 884D F8 mov [ebp-8], cl
00422ECD |. 0FB655 FF movzx edx, byte ptr [ebp-1]
00422ED1 |. 83CA 4A or edx, 4A
00422ED4 |. 8855 FF mov [ebp-1], dl
00422ED7 |. 0FB645 FA movzx eax, byte ptr [ebp-6]
00422EDB |. 83C8 4E or eax, 4E
00422EDE |. 8845 FA mov [ebp-6], al
00422EE1 |. 0FB645 EF movzx eax, byte ptr [ebp-11]
00422EE5 |. 99 cdq
00422EE6 |. B9 0A000000 mov ecx, 0A
00422EEB |. F7F9 idiv ecx
00422EED |. 8855 EF mov [ebp-11], dl
00422EF0 |. 0FB645 F8 movzx eax, byte ptr [ebp-8]
00422EF4 |. 99 cdq
00422EF5 |. B9 0A000000 mov ecx, 0A
00422EFA |. F7F9 idiv ecx
00422EFC |. 8855 F8 mov [ebp-8], dl
00422EFF |. 0FB645 FF movzx eax, byte ptr [ebp-1]
00422F03 |. 99 cdq
00422F04 |. B9 0A000000 mov ecx, 0A
00422F09 |. F7F9 idiv ecx
00422F0B |. 8855 FF mov [ebp-1], dl
00422F0E |. 0FB645 FA movzx eax, byte ptr [ebp-6]
00422F12 |. 99 cdq
00422F13 |. B9 0A000000 mov ecx, 0A
00422F18 |. F7F9 idiv ecx
再往下又是一些变换:
//如果只是想破借此软件,在这些变换上花大功夫研究就有些不值了,因为从后边的分析看这部分对后边的注册没什麽影响
00422F1A |. 8855 FA mov [ebp-6], dl
00422F1D |. C745 F0 00000>mov dword ptr [ebp-10], 0
00422F24 |. C745 E8 00000>mov dword ptr [ebp-18], 0
00422F2B |. EB 09 jmp short 00422F36
00422F2D |> 8B55 E8 /mov edx, [ebp-18]
00422F30 |. 83C2 01 |add edx, 1
00422F33 |. 8955 E8 |mov [ebp-18], edx
00422F36 |> 8B4D E0 mov ecx, [ebp-20]
00422F39 |. 83C1 70 |add ecx, 70
00422F3C |. E8 9F8BFEFF |call 0040BAE0
00422F41 |. 3945 E8 |cmp [ebp-18], eax
00422F44 |. 7D 1E |jge short 00422F64
00422F46 |. 8B45 E8 |mov eax, [ebp-18]
00422F49 |. 50 |push eax ; /Arg1
00422F4A |. 8B4D E0 |mov ecx, [ebp-20] ; |
00422F4D |. 83C1 70 |add ecx, 70 ; |
00422F50 |. E8 1BF4FFFF |call 00422370 //有兴趣的话可跟进,后边还有用到此call的地方
00422F55 |. 8845 E7 |mov [ebp-19], al
00422F58 |. 0FB64D E7 |movzx ecx, byte ptr [ebp-19]
00422F5C |. 034D F0 |add ecx, [ebp-10]
00422F5F |. 894D F0 |mov [ebp-10], ecx
00422F62 |.^ EB C9 \jmp short 00422F2D
下来还有,
00422F6F |. 8855 F4 mov [ebp-C], dl
00422F72 |. 6A 00 push 0 ; /Arg1 = 00000000
00422F74 |. 8B4D E0 mov ecx, [ebp-20] ; |
00422F77 |. 83C1 74 add ecx, 74 ; |
00422F7A |. E8 F1F3FFFF call 00422370 ; \VideoJoi.00422370
00422F7F |. 8845 FC mov [ebp-4], al
00422F82 |. 6A 01 push 1 ; /Arg1 = 00000001
00422F84 |. 8B4D E0 mov ecx, [ebp-20] ; |
00422F87 |. 83C1 74 add ecx, 74 ; |
00422F8A |. E8 E1F3FFFF call 00422370 ; \VideoJoi.00422370
省去部分代码。。。。。。
有兴趣的话可跟进call 00422370,看看里边到底是些什莫东东,:)
下边是关键:
00422FF2 |. 0FB655 EF movzx edx, byte ptr [ebp-11]
00422FF6 |. 0FB645 FC movzx eax, byte ptr [ebp-4]
00422FFA |. 83E8 30 sub eax, 30
00422FFD |. 3BD0 cmp edx, eax
00422FFF 75 3C jnz short 0042303D
00423001 0FB64D F8 movzx ecx, byte ptr [ebp-8] //存放的是用户名的变换
00423005 |. 0FB655 FD movzx edx, byte ptr [ebp-3] //注册码第二位数字
00423009 |. 83EA 30 sub edx, 30 //转换为asc码
0042300C |. 3BCA cmp ecx, edx
0042300E 75 2D jnz short 0042303D //不等则出错, :(
00423010 |. 0FB645 FF movzx eax, byte ptr [ebp-1] //存放的是用户名的变换
00423014 |. 0FB64D F6 movzx ecx, byte ptr [ebp-A] //注册码第三位数字
00423018 |. 83E9 30 sub ecx, 30
0042301B |. 3BC1 cmp eax, ecx
0042301D |. 75 1E jnz short 0042303D //出错
0042301F |. 0FB655 FA movzx edx, byte ptr [ebp-6]
00423023 |. 0FB645 F5 movzx eax, byte ptr [ebp-B]
00423027 |. 83E8 30 sub eax, 30
0042302A |. 3BD0 cmp edx, eax
0042302C |. 75 0F jnz short 0042303D //出错
0042302E |. 0FB64D F4 movzx ecx, byte ptr [ebp-C]
00423032 |. 0FB655 F9 movzx edx, byte ptr [ebp-7]
00423036 |. 83EA 30 sub edx, 30
00423039 |. 3BCA cmp ecx, edx
0042303B |. 74 58 je short 00423095 //如果到这都一直没出错,呵呵,恭喜你,注册成功!!!
3、总结
也没什莫好总结的,用OD跟踪的话,只需在
00422EFC |. 8855 F8 mov [ebp-8], dl
00422F0B |. 8855 FF mov [ebp-1], dl
00422F1A |. 8855 FA mov [ebp-6], dl
00422F6F |. 8855 F4 mov [ebp-C], dl
四处下断分别记下当时的dl值,这四位便是注册码的2~4为数字。
如用户名:elance@crsky 此时dl分别为6106
好了,输入用户名elance@crsky注册码16106987, "Registration has succeeded!"
--------------------------------------------------------------------------------
【经验总结】
没啥经验,玩儿呗!
--------------------------------------------------------------------------------
【版权声明】: 本文原创于霏凡论坛, 转载请注明作者并保持文章的完整, 谢谢!
2006年06月29日 19:32:23
[课程]Android-CTF解题方法汇总!