【文章标题】: PhotoZoomPro2 2.1.8 脱壳后变态自校验完全解决办法
【文章作者】: qyc
【作者主页】: http://www.iv2.cn
【软件名称】: PhotoZoomPro2 2.1.8
【软件大小】: 3.55M
【下载地址】: 自己搜索下载
【加壳方式】: ASProtect 2.1x SKE -> Alexey Solodovnikov-->Version: ASProtect 1.35 build 04.25 or 06.26 Release [Extract]
【保护方式】: 加密壳
【编写语言】: VC++
【使用工具】: PEID IRE OD
【操作平台】: Win XP SP2
【软件介绍】: PhotoZoomPro2是一个图片放大软件
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
PhotoZoomPro2是一个图片放大软件,小Q一直以来都是用最低版本的!知到有最新版!可以就是没有用的机会,因为没有破解!
自己以前脱壳技术水平又不高一直没对它下手! 直到Aspr2.XX_IATfixer_v2.2s.osc的出现,才给了偶这次动它的机会,今天
公司叫偶放大图片就再次下PhotoZoomPro2 最新版本是: 2.1.8
PEID--->ASProtect 2.1x SKE -> Alexey Solodovnikov
插件--->Version: ASProtect 1.35 build 04.25 or 06.26 Release [Extract]
解决问题: 变态自校验
OD 加载 程序 Aspr2.XX_IATfixer_v2.2s.osc 脚本完全dumped,IRE修复IAT,一个指针未修复,用插件搞定! 下面是精彩部分
运行程序发现出错不能运行,一开始还以为壳偷了代码,认为10分变态,我所知ASProtect 1.35是不会偷代码的!
脱壳后变态入口:
00584FEF > $ E8 190D0100 call 00595D0D-------->F8死// F7进
00584FF4 .^ E9 16FEFFFF jmp 00584E0F
00584FF9 $ 6A 0C push 0C
00584FFB . 68 F0D16F00 push 006FD1F0
00585000 . E8 DFC40000 call 005914E4
00585005 . 8B75 08 mov esi, [ebp+8]
=================================================================
来到:
=================================================================
00584F47 . 85C0 test eax, eax
00584F49 . 7D 08 jge short 00584F53
00584F4B . 6A 09 push 9
00584F4D . E8 90330000 call 005882E2
00584F52 . 59 pop ecx
00584F53 > 53 push ebx
00584F54 . E8 A5340000 call 005883FE--------------->内存异常!程序不可读! F7进
00584F59 . 59 pop ecx
00584F5A . 85C0 test eax, eax
00584F5C . 74 07 je short 00584F65
================================================================
下面就是变态过程:
================================================================
00588456 |. /73 0F jnb short 00588467
00588458 |> |8B06 /mov eax, [esi]
0058845A |. |85C0 |test eax, eax
0058845C |. |74 02 |je short 00588460
0058845E |. |FFD0 |call eax --------> 相当变态的动态地址(异常将在这里发生)!
00588460 |> |83C6 04 |add esi, 4
00588463 |. |3BF7 |cmp esi, edi
00588465 |.^|72 F1 \jb short 00588458------->来回不知多少次,你别用F8了!
00588467 |> \833D BC1F7500>cmp dword ptr [751FBC], 0
============================================================================
F9让异常出现吧!
错误提示内存00FC0000不可读.见图! 好伽伙,这招毒啊! 壳不抽代码,原程序做起这事来了! ^_^!
以经验所知! 内存出错, ASM 语句: PUSH
那就 PUSH 00FC0000 查找所有命令 PUSH 00FC0000 哇....还真有一处也
==============================================================================
0058CD36 CC int3
0058CD37 CC int3
0058CD38 68 0000FC00 push 0FC0000--------------->相当制命的一招(软件作者好毒啊!) F2下断
0058CD3D C3 retn
0058CD3E AE db AE
0058CD3F 2D db 2D ; CHAR '-'
0058CD40 1B db 1B
0058CD41 77 db 77 ; CHAR 'w'
0058CD42 BD db BD
0058CD43 5E db 5E ; CHAR '^'
0058CD44 8B db 8B
================================================================================
重新运行程序,程序直接中断在0058CD38, 执行push 0FC0000后就是空白代码,程序出错,程序被WINDOWS 关闭,所有问题连接而来(狂晕中).
55555,要是偶能用程序语言写出代码就好罗,可是写不出,呵呵!
以上所知!找到了问题所在,那就是出注意解决问题啦! 各位考考你们,让想到啦,请举手哈(鸡蛋青菜全向偶飞来!不要,我马上解决)
================================================================================
解决问题很简单:跟踪原程序(哈哈!大家别扁偶啊,老大们都是这样做的)
================================================================================
原程序: 0FC0000代码如下:
================================================================================
00FC0000 68 FFFFFFFF push -1
00FC0005 50 push eax
00FC0006 83C8 FF or eax, FFFFFFFF
00FC0009 F7D0 not eax
00FC000B 64:8B00 mov eax, fs:[eax]
00FC000E 50 push eax
00FC000F 8D840B 3E5B4700 lea eax, [ebx+ecx+475B3E]
00FC0016 65:EB 01 jmp short 00FC001A
00FC0019 9A 2BC18B44 240C call far 0C24:448BC12B
00FC0020 64:8925 00000000 mov fs:[0], esp
00FC0027 F3: prefix rep:
00FC0028 EB 02 jmp short 00FC002C
00FC002A CD20 896C240C vxdcall C246C89
00FC0030 036C24 38 add ebp, [esp+38]
00FC0034 C1CD 23 ror ebp, 23
00FC0037 26:EB 02 jmp short 00FC003C
00FC003A CD20 336C2408 vxdcall 8246C33
00FC0040 EB 01 jmp short 00FC0043
00FC0042 6903 6C24188D imul eax, [ebx], 8D18246C
00FC0048 6C ins byte ptr es:[edi], dx
00FC0049 04 0C add al, 0C
00FC004B 2BE8 sub ebp, eax
00FC004D 50 push eax
00FC004E C3 retn
===============================================================================
上面代码经典哈!偶就不作解释了! 转成 16 如下:
===============================================================================
68 FF FF FF FF 50 83 C8 FF F7 D0 64 8B 00 50 8D 84 0B 3E 5B 47 00 65 EB 01 9A 2B C1 8B 44 24 0C
64 89 25 00 00 00 00 F3 EB 02 CD 20 89 6C 24 0C 03 6C 24 38 C1 CD 23 26 EB 02 CD 20 33 6C 24 08
EB 01 69 03 6C 24 18 8D 6C 04 0C 2B E8 50 C3
===============================================================================
什么,你现在问我做什么! 狂晕! 脱壳后 0FC0000 没代码,我们要给他补上啊! 要不然程序怎运和下去啊! 明白没??? 不明白再去多看一下书^_^!
===============================================================================
偶用PEID找了块空地! 就是:( 0078AC08 ) 好肥的地啊! 种些东西一定不错! 以下是偶种的地瓜!
===============================================================================
0078AC06 0000 add [eax], al
0078AC08 68 FFFFFFFF push -1
0078AC0D 50 push eax
0078AC0E 83C8 FF or eax, FFFFFFFF
0078AC11 F7D0 not eax
0078AC13 64:8B00 mov eax, fs:[eax]
0078AC16 50 push eax
0078AC17 8D840B 3E5B4700 lea eax, [ebx+ecx+475B3E]
0078AC1E 65:EB 01 jmp short 0078AC22
0078AC21 9A 2BC18B44 240C call far 0C24:448BC12B
0078AC28 64:8925 00000000 mov fs:[0], esp
0078AC2F F3: prefix rep:
0078AC30 EB 02 jmp short 0078AC34
0078AC32 CD20 896C240C vxdcall C246C89
0078AC38 036C24 38 add ebp, [esp+38]
0078AC3C C1CD 23 ror ebp, 23
0078AC3F 26:EB 02 jmp short 0078AC44
0078AC42 CD20 336C2408 vxdcall 8246C33
0078AC48 EB 01 jmp short 0078AC4B
0078AC4A 6903 6C24188D imul eax, [ebx], 8D18246C
0078AC50 6C ins byte ptr es:[edi], dx
0078AC51 04 0C add al, 0C
0078AC53 2BE8 sub ebp, eax
0078AC55 50 push eax
0078AC56 C3 retn
0078AC57 0000 add [eax], al
================================================================================
记得要保存好哦! 加载保存后的文件! 还记得: 0FC0000所在地吗? CRTL + G 0058CD38
================================================================================
0058CD38 68 0000FC00 push 0FC0000
改
0058CD38 68 06AC7800 push 0078AC06
===============================================================================
然后保存! 下面是修复后运行返回代码:
================================================================================
0012FF14 005BFC10 返回到 dumped_.005BFC10 来自 dumped_.0058CD38
0012FF18 005EB69F 返回到 dumped_.005EB69F 来自 dumped_.005BFC06
0012FF1C 00632E7C ASCII "file" -------------------->这分明就是在检验文件吗!
================================================================================
005EB687 . 68 ECF77100 push 0071F7EC
005EB68C . 6A 00 push 0
005EB68E . 6A 00 push 0
005EB690 . 68 7C2E6300 push 00632E7C ; ASCII "file"
005EB695 . B9 D81D7500 mov ecx, 00751DD8
005EB69A . E8 6745FDFF call 005BFC06----------------->软件作者的经典之作! (变态自校验)
005EB69F . 68 AAD05E00 push 005ED0AA----------------->就这样被小Q走回来了!
005EB6A4 . E8 558BF9FF call 005841FE
005EB6A9 . 59 pop ecx
005EB6AA . C3 retn
=================================================================================
返回,上面看过的:
00588456 |. /73 0F jnb short 00588467
00588458 |> |8B06 /mov eax, [esi]
0058845A |. |85C0 |test eax, eax
0058845C |. |74 02 |je short 00588460
0058845E |. |FFD0 |call eax
00588460 |> |83C6 04 |add esi, 4------------>这里哈
00588463 |. |3BF7 |cmp esi, edi
00588465 |.^|72 F1 \jb short 00588458
00588467 |> \833D BC1F7500>cmp dword ptr [751FBC], 0
0058846E |. 5F pop edi
=================================================================================
呵呵,这软件的变态自校验就这样解决了!呵呵兄弟们,学习到了吗?
有空来偶的小站玩玩 http://www.iv2.cn (艾微儿) ,2007年第一贴,kanxue你的加密与解密第三版啥时候出版啊!偶要谢谢哈!
谢谢你看到这里! 感谢VolX的Aspr2.XX_IATfixer_v2.2s.osc脚本!没有你脚本,就没有这文章!感谢月攘のKouryu给偶的提示!
By [qyc]小Q 2007/1/5/9:25/写完文章!
--------------------------------------------------------------------------------
【经验总结】
分析软件卡住时,千万别放弃分析! 我还是个菜鸟,请大家多多指教!
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
[课程]FART 脱壳王!加量不加价!FART作者讲授!