【文章标题】: 继续爆破Apex Movie Converter V3.38
【文章作者】: 壹只老虎
【作者邮箱】: tiger..tiger@163.com
【软件名称】: Apex Movie Converter V3.38
【软件大小】: 7878 KB
【下载地址】: http://www.skycn.com/soft/32959.html
【加壳方式】: 无
【保护方式】: 反调试+注册码验证
【编写语言】: Microsoft Visual C++ 6.0
【使用工具】: od+peid
【操作平台】: 盗版xpsp2
【软件介绍】: 是一款专业的视频转换软件。它可以将AVI, DivX, XviD, MPEG, WMV, MOV, ASF, QuickTime ,RM,RMVB转换为AVI, DivX 或者 XviD格式。并可以更改作者,视频大小等等。还可以设置视频剪辑的开始和终止点以截取想要获得的片断。它界面友好,转换速度快,质量无损。【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
1:PEID查壳,无壳,Microsoft Visual C++ 6.0。
2:od载入,字符串参考,发现--〉ASCII "Thanks for register Apex Movie Converter ."
3:双击过去,来到这里。
0040A833 50 push eax
0040A834 E8 2796FFFF call ApexMovi.00403E60 ;我看他这里是关键的算法,
0040A839 83C4 04 add esp,4
0040A83C 83F8 01 cmp eax,1
0040A83F 0F85 A7000000 jnz ApexMovi.0040A8EC
0040A845 6A 40 push 40
0040A847 68 70664300 push ApexMovi.00436670 ; ASCII "Successful"(来到这里)
0040A84C 68 44664300 push ApexMovi.00436644 ; ASCII "Thanks for register Apex Movie Converter ."
注意这一句,0040A834 E8 2796FFFF call ApexMovi.00403E60
很明显是关键算法,但是这里爆破了也没用,因为软件启动的时候需要验证的,
所以我就想他启动的时候可能也要调用这个函数,好吧,过去看看,ctrl+g,
输入00403E60来到这里。
00403E5F 90 nop
00403E60 81EC 00030000 sub esp,300 ; 程序断在这里,EAX=假码,EDX=真码
00403E66 83C9 FF or ecx,FFFFFFFF
00403E69 33C0 xor eax,eax
00403E6B 53 push ebx
00403E6C 56 push esi
00403E6D 8BB424 0C030000 mov esi,dword ptr ss:[esp+30C] ; ESI=假码
00403E74 57 push edi
00403E75 8BFE mov edi,esi ; EDI=假码
00403E77 F2:AE repne scas byte ptr es:[edi]
00403E79 F7D1 not ecx
00403E7B 49 dec ecx ; ECX=注册码长度
00403E7C 83F9 30 cmp ecx,30 ; 和48比较,不是就跳死亡
00403E7F 0F85 E5000000 jnz ApexMovi.00403F6A
00403E85 33DB xor ebx,ebx ; EBX=0
00403E87 B9 3F000000 mov ecx,3F ; ECX=3F
00403E8C 8DBC24 0D010000 lea edi,dword ptr ss:[esp+10D]
00403E93 889C24 0C010000 mov byte ptr ss:[esp+10C],bl
00403E9A F3:AB rep stos dword ptr es:[edi]
00403E9C 66:AB stos word ptr es:[edi]
00403E9E AA stos byte ptr es:[edi]
00403E9F B9 3F000000 mov ecx,3F
00403EA4 33C0 xor eax,eax
00403EA6 8D7C24 0D lea edi,dword ptr ss:[esp+D]
00403EAA 885C24 0C mov byte ptr ss:[esp+C],bl
00403EAE F3:AB rep stos dword ptr es:[edi]
00403EB0 66:AB stos word ptr es:[edi]
00403EB2 AA stos byte ptr es:[edi]
00403EB3 B9 3F000000 mov ecx,3F
00403EB8 33C0 xor eax,eax
00403EBA 8DBC24 0D020000 lea edi,dword ptr ss:[esp+20D]
00403EC1 889C24 0C020000 mov byte ptr ss:[esp+20C],bl
00403EC8 F3:AB rep stos dword ptr es:[edi]
00403ECA 66:AB stos word ptr es:[edi]
00403ECC AA stos byte ptr es:[edi]
00403ECD 8B3D BCE54200 mov edi,dword ptr ds:[<&MSVCRT.strnc>; msvcrt.strncpy
00403ED3 6A 10 push 10
00403ED5 8D8424 10010000 lea eax,dword ptr ss:[esp+110]
00403EDC 56 push esi ; 假码压栈
00403EDD 50 push eax ; 地址[122054]压栈
00403EDE FFD7 call edi
00403EE0 8D4E 10 lea ecx,dword ptr ds:[esi+10] ; ECX=假码后32位
00403EE3 6A 10 push 10
00403EE5 8D5424 1C lea edx,dword ptr ss:[esp+1C]
00403EE9 51 push ecx
00403EEA 52 push edx
00403EEB FFD7 call edi
00403EED 83C6 20 add esi,20
00403EF0 6A 10 push 10
00403EF2 8D8424 28020000 lea eax,dword ptr ss:[esp+228]
00403EF9 56 push esi
00403EFA 50 push eax
00403EFB FFD7 call edi
00403EFD 8D8C24 30010000 lea ecx,dword ptr ss:[esp+130] ; ECX=假码后16位
00403F04 68 C8614300 push ApexMovi.004361C8 ; ASCII "880248DD39322D99"
00403F09 51 push ecx
00403F0A 889C24 48010000 mov byte ptr ss:[esp+148],bl
00403F11 885C24 48 mov byte ptr ss:[esp+48],bl
00403F15 889C24 48020000 mov byte ptr ss:[esp+248],bl
00403F1C E8 0FFEFFFF call ApexMovi.00403D30 ; 算法(非常大个)
00403F21 8D5424 38 lea edx,dword ptr ss:[esp+38]
00403F25 68 B4614300 push ApexMovi.004361B4 ; ASCII "8DEEFCBEE82526C1"
00403F2A 52 push edx
00403F2B 8BF0 mov esi,eax
00403F2D E8 FEFDFFFF call ApexMovi.00403D30
00403F32 8BF8 mov edi,eax
00403F34 8D8424 40020000 lea eax,dword ptr ss:[esp+240]
00403F3B 68 B4614300 push ApexMovi.004361B4 ; ASCII "8DEEFCBEE82526C1"
00403F40 50 push eax
00403F41 E8 EAFDFFFF call ApexMovi.00403D30
00403F46 83C4 3C add esp,3C
00403F49 3BF3 cmp esi,ebx
00403F4B 7E 1D jle short ApexMovi.00403F6A ; 关键比较1,爆破1
00403F4D 3BFB cmp edi,ebx
00403F4F 7E 19 jle short ApexMovi.00403F6A ; 关键比较2,爆破2
00403F51 3BC3 cmp eax,ebx
00403F53 7E 15 jle short ApexMovi.00403F6A ; 关键比较3,爆破3
00403F55 03C6 add eax,esi
00403F57 33C9 xor ecx,ecx
00403F59 3BC7 cmp eax,edi
00403F5B 5F pop edi
00403F5C 0F94C1 sete cl
00403F5F 5E pop esi
00403F60 8BC1 mov eax,ecx
00403F62 5B pop ebx
00403F63 81C4 00030000 add esp,300
00403F69 C3 retn
爆破之后,注册名随便写,注册码只要是48位就可以了。
就这样,OK。
--------------------------------------------------------------------------------
【经验总结】
需要注意的几点:
1:断点的选择,这个软件有反调试的模块,我的od异常了,不过还好,有个地方没做好,就是反调试代码在算法验证之后
,就是说,我们只要在反调试验证之前进行分析的话,那么,反调试功能就没用了,这是软件设计上的缺陷。
2:关于算法分析取注册名和注册码,如果你可以去掉反调试功能的话,那么你可以在点击注册按钮的之后进行分析。如果
不想去掉反调试的话,你可以在反调试之前断下来,这时候这册名和注册码是从注册表里面取得,软件在点击注册按钮之后
验证发现非法注册码,就会在HKEY_CURRENT_USER\Software\Apex\Apex Movie Converter\code地方设置为空,把
HKEY_CURRENT_USER\Software\Apex\Apex Movie Converter\user设置为"Unregistered",所以分析之前需要先手工把这两个
地方写入测试数据,然后再进行分析,它就会用我们写入的测试数据进行计算.
3:最近老是爆破,都不会算法分析了,每次遇到的软件的算法都好复杂,可能是没有以前那么耐心好了吧.
呵呵!~~今天的第二篇文章了.
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年03月18日 16:43:30
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课