GIFMovieGear4.2破解全过程。软件很简单,牛牛莫笑。
本帖最后由 blackboyswe 于 2012-9-1 13:53 编辑破解软件:
GIF Movie Gear 是一款实用的 GIF 文件制作、编辑、优化、转换软件。您可以用它打开 BMP/GIF/JPG/PNG/PSD/AVI/CUR/ICO 等格式并将它们转换或混合为 GIF 格式,并保存为 BMP/GIF/JPG/PNG/PSD/AVI/CUR/ICO 甚至 SWF 格式。您还可以用它剪切、缩放、旋转导入的图像文件,调整帧的顺序和延迟时间,更改循环次数,并用多种方法对其进行优化,以减小文件体积。此外,GIF Movie Gear 还能调用任意应用程序对帧进行实时编辑,为 GIF 文件添加注释以及输出 HTML 代码方便您在网页中调用图像。
这个软件是PECompact 2.x的壳 @mycsy发过脱壳教程http://www.52pojie.cn/forum.php?mod=viewthread&tid=49406 ,当然也可以直接万能脱壳机脱掉 {:1_907:}。。。
软件地址:http://dl.vmall.com/c0eiqmnih8 注册表位置 : HKEY_LOCAL_MACHINE\SOFTWARE\gamani\GIFMovieGear\2.0
直接破解过程上:
OD打开,f9运行,点开注册框假注册,对话框提示不正确
,
直接堆栈f12 alt+k,
进入调用。
停在77D5082A系统领空, 我们在下面77D5082F下f2断点,再运行 停住,之后 f8就到了程序领空 00411733 ,
我们看到上面的0041172D FF15 C0F44700 call dword ptr ds:[<&user32.#477>] ; 就是弹出不能注册的。
不过这个是调用系统函数,不改。我们往上看到这些代码:
004116B0/$8B4424 04 mov eax,dword ptr ss:
004116B4|.8B0D C4C24A00 mov ecx,dword ptr ds: ;Unpack_.00400000
004116BA|.68 00020000 push 0x200 ; /Count = 200 (512.)
004116BF|.68 80BF4A00 push Unpack_.004ABF80 ; |您提供的信息无效。请确认您输入的信息与我们提供给您的完全相同。
004116C4|.50 push eax ; |RsrcID
004116C5|.51 push ecx ; |hInst => 00400000
004116C6|.FF15 BCF44700 call dword ptr ds:[<&user32.#457>] ; \LoadStringA
004116CC|.85C0 test eax,eax
004116CE|.74 0D je XUnpack_.004116DD
004116D0|.3D 00020000 cmp eax,0x200
004116D5|.7D 06 jge XUnpack_.004116DD
004116D7 B8 80BF4A00 mov eax,Unpack_.004ABF80 ;您提供的信息无效。请确认您输入的信息与我们提供给您的完全相同。
004116DC|.C3 retn
(其实这些代码都不是破解关键,因为这个程序从一开始就检测这段代码,一直在运行这段代码,改了其他有些东西就乱了,我摸出来的。。。所以我们不要在这段代码纠结了,直接看看哪些地方调用这段代码了,要注册成功肯定得call这段代码。)所以:在子函数第一行004116E0 ctrl+j 查看调用地址。
,
里面地址从下往上试,找到00433D12 是注册时候调用的。
00433D02 .C2 1000 retn 0x10
00433D05 >6A 30 push 0x30
00433D07 .68 159D0000 push 0x9D15
00433D0C .68 149D0000 push 0x9D14
00433D11 .57 push edi
00433D12 .E8 C9D9FDFF call Unpack_.004116E0
我们找到跳到00433D05 的地方为00433C49 ,
00433C2D .FFD6 call esi ; |\GetDlgItem
00433C2F .50 push eax ; |hWnd
00433C30 .FFD3 call ebx ; \GetWindowTextA
00433C32 .8D8C24 C40000>lea ecx,dword ptr ss:
00433C39 .51 push ecx
00433C3A .8D5424 64 lea edx,dword ptr ss:
00433C3E .52 push edx ;上面函数就是取注册 id 跟 密码的,可以跳过
00433C3F .E8 FCFBFFFF call Unpack_.00433840 ;这个看看 应该关键call
00433C44 .83C4 08 add esp,0x8
00433C47 .85C0 test eax,eax ;判断之后 写入注册表
00433C49 0F84 B6000000 je Unpack_.00433D05 ;不跳就好,eax得不为0
00433C4F .8D4424 10 lea eax,dword ptr ss:
00433C53 .50 push eax ; /pDisposition
00433C54 .8D4C24 10 lea ecx,dword ptr ss: ; |
00433C58 .51 push ecx ; |pHandle
00433C59 .6A 00 push 0x0 ; |pSecurity = NULL
00433C5B .68 3F000F00 push 0xF003F ; |Access = KEY_ALL_ACCESS
00433C60 .6A 00 push 0x0 ; |Options = REG_OPTION_NON_VOLATILE
00433C62 .68 85F64700 push Unpack_.0047F685 ; |Class = ""
00433C67 .6A 00 push 0x0 ; |Reserved = 0
00433C69 .68 84E44800 push Unpack_.0048E484 ; |Software\gamani\GIFMovieGear\2.0
00433C6E .68 02000080 push 0x80000002 ; |hKey = HKEY_LOCAL_MACHINE
00433C73 .FF15 0CF04700 call dword ptr ds:[<&advapi32.#464>] ; \RegCreateKeyExA
00433C79 .8D4424 60 lea eax,dword ptr ss:
00433C7D .8D50 01 lea edx,dword ptr ds:
00433C80 >8A08 mov cl,byte ptr ds: ;取注册id
00433C82 .40 inc eax
00433C83 .84C9 test cl,cl
00433C85 .^ 75 F9 jnz XUnpack_.00433C80 ;下面写注册id进注册表
00433C87 .8B35 00F04700 mov esi,dword ptr ds:[<&advapi32.#509>];advapi32.RegSetValueExA
00433C8D .2BC2 sub eax,edx
分析就可知道 00433C3F 就是关键,从00433C3F出来后eax得不为0才会注册,如果简单nop掉 00433C49 0F84 B6000000 je Unpack_.00433D05就只能写入注册表,还是未注册的。所以我们得把出来时eax值改掉不为0.
我们跟进 00433C3F .E8 FCFBFFFF call Unpack_.00433840直接f8到
下面就是retn了。我们不能让eax=0,这个call可以改变命运,果断跟进。f8一直单步,过程有些循环,耐心走,当然这时候得时刻注意eax的值。
到这边就得小心了,
马上要retn了!可以看到现在eax值是最大的ffffffff,
到这里关键来了,
004336B8 33C0 xor eax,eax,这边是xor给eax清零!!!
一种方法把上面jne改为je,让跳转不实现;另一种方法把这边的xor改为or,修改好了复制保存。完美爆破。
第一次写破文。有点小激动,写的比较乱。大家别笑呀。{:17_1060:}
鼓励发布破文,文章稍微有点乱,
可以借鉴别人的,看下是如何排的那么整齐。 Chief 发表于 2012-9-1 12:00 static/image/common/back.gif
鼓励发布破文,文章稍微有点乱,
可以借鉴别人的,看下是如何排的那么整齐。
恩恩。。。谢谢chief大~ 学习了。 支持一下原创的东西 学习 ,学习 ,再学习 。
页:
[1]