破文作者: fly 下载页面: http://www3.skycn.com/soft/10657.html 软件大小: 1750 KB 软件语言: 英文 软件类别: 国外软件 / 共享版 / 图标工具 应用平台: Win9x/NT/2000/XP 加入时间: 2004-10-20 09:22:15 下载次数: 5317 推荐等级: **** 开 发 商: http://www.beeicons.com/ 软件介绍: Bee Icons 是一个图标工具,可以替换系统图标和已注册文件类型的图标! 作者声明: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教! 调试环境: WinXP、OllyDbg、LordPE、WinHex 脱壳过程: 利用ASProtect的Pre-Dip来Patch注册其保护程序的方法在国外某些组织早已使用了。这个方法的意义在于能够直接Patch修改ASProtect加壳程序的内部代码,注册是指那些可以通过处理Pre-Dip来完成注册的加壳程序。本教程所介绍的方法只能Patch ASProtect V1.X壳保护程序,包括V1.23RC4、V1.3X等版本;但是不适用于ASProtect最新的V2.X壳保护程序,因为ASProtect V2.X壳特别针对这个方法加了校验。关于Pre-Dip可以查阅《看雪论坛精华6》中lipton以及ASProtect目录下的相关教程。 下面以ASProtect V1.23RC4加壳的Bee Icons V4.01为例来进行演示。 方法比较繁琐,分多次操作。需要耐心和ASProtect脱壳基础。多多练习就可以成功,国内已有不少兄弟掌握此方法了。 设置Ollydbg忽略除了“内存访问异常”之外的所有其它异常选项。下面的各步除了特殊说明的,皆为这个异常选项设置。 老规矩:用IsDebug V1.4插件去掉Ollydbg的调试器标志。 ————————————————————————————————— 一、获得ASProtect注册名Pre-Dip处理的地址 00401000 68 01306100 push BeeIcons.00613001 //进入Ollydbg后暂停在这 00401005 E8 01000000 call BeeIcons.0040100B 0040100A C3 retn Shift F9 运行N次,直至堆栈中第2次看见硬盘指纹: 0013FF3C 00FE4849 返回到 00FE4849 0013FF40 00FD3861 0013FF44 0013FFE0 指针到下一个 SEH 记录 0013FF48 00FE4C49 SE 句柄 0013FF4C 0013FF90 0013FF50 00FD0000 0013FF54 00FA0000 0013FF58 00FE4138 0013FF5C 010028C8 ASCII "wWDDDAAgLTg=" Alt M打开内存查看窗口,在00401000段“设置内存访问断点”,Shift F9通过异常,断下 0052FAB4 55 push ebp //注意这个地址:0052FAB4 ★ 0052FAB5 8BEC mov ebp,esp 0052FAB7 8B45 08 mov eax,dword ptr ss:[ebp 8] //[ebp 8]=[0013FF40]=00FD3861 注册名保存地址 ★ 0052FABA 85C0 test eax,eax 0052FABC 74 0C je short BeeIcons.0052FACA 0052FABE 8038 00 cmp byte ptr ds:[eax],0 0052FAC1 74 07 je short BeeIcons.0052FACA 0052FAC3 C605 681A5700 0>mov byte ptr ds:[571A68],1 0052FACA 8B15 5C1A5700 mov edx,dword ptr ds:[571A5C] 0052FAD0 8915 581A5700 mov dword ptr ds:[571A58],edx 0052FAD6 A3 5C1A5700 mov dword ptr ds:[571A5C],eax 0052FADB 5D pop ebp 0052FADC C2 0400 retn 4 看堆栈0013FF3C 返回到 00FE4849,Ctrl G:00FE4849向上看看 00FE483F A1 3866FE00 mov eax,dword ptr ds:[FE6638] 00FE4844 8B40 04 mov eax,dword ptr ds:[eax 4] 00FE4847 FFD0 call eax //Call 0052FAB4 00FE4849 8B15 1865FE00 mov edx,dword ptr ds:[FE6518] 在转存中Ctrl G:[0FE6638] 4 00FE7AB8 B4 FA 52 00 ★ 记住:0052FAB4和00FE7AB8 ————————————————————————————————— 二、第一次回溯:00FE7AB8 重新载入程序。忽略除了“内存访问异常”之外的所有其它异常选项,Shift F9 运行1次 00FE41A4 3100 xor dword ptr ds:[eax],eax //第1次内存异常 在转存中Ctrl G:00FE7AB8,或者下命令:DB 00FE7AB8 选中00FE7AB8处4个字节,下“内存写入”断点。忽略所有异常,Shift F9 00FD27A8 F3:AB rep stos dword ptr es:[edi] //第一次中断 00FD262B F3:A5 rep movs dword ptr es:[edi],dword ptr ds:[esi] //第二次中断 ds:[esi]=[00FF1613]=0012FAB4 ★ es:[edi]=[00FE7AB8]=00000000 0012FAB4=0052FAB4-基址0040000 如果在00FE7AB8处设置“内存访问”断点,就会跟踪到这里: 00FE444D 010C82 add dword ptr ds:[edx eax*4],ecx; BeeIcons.00400000 //[00FE7AB8]=0012FAB4 00400000 记住:00FF1613 ————————————————————————————————— 三、得到壳重定位后的基址 第二次回溯:00FF1613 重新载入程序。忽略所有异常,BP VirtualAlloc 然后把断点挪到VirtualAlloc的段尾,Shift F9运行,观察壳所申请到的内存地址 ———————————————————————— 1、得到壳重定位后的基址 7C809A81 8BFF mov edi,edi //VirtualAlloc 7C809A83 55 push ebp 7C809A9A C2 1000 retn 10 //这里下断 当我们在VirtualAlloc中断第2次,会发现申请的EAX返回值是00FD0000 0013FF90 0061352D /CALL 到 VirtualAlloc 来自 BeeIcons.00613527 0013FF94 00000000 |Address = NULL 0013FF98 0001E000 |Size = 1E000 (122880.) 0013FF9C 00001000 |AllocationType = MEM_COMMIT 0013FFA0 00000004 \Protect = PAGE_READWRITE 00FD0000就是这个程序的壳重定位后的基址,F7,需要跟踪一下 00613527 FF95 DF030000 call dword ptr ss:[ebp 3DF] 0061352D 8985 BF010000 mov dword ptr ss:[ebp 1BF],eax //[00613607]=00FD0000 ★ 00613533 8B55 5B mov edx,dword ptr ss:[ebp 5B] 00613536 8B85 BF010000 mov eax,dword ptr ss:[ebp 1BF] 0061353C 8902 mov dword ptr ds:[edx],eax //[00613048]=00FD0000 记住:[00613607],保存壳重定位后的基址,或者[00613048] ———————————————————————— 2、第二次回溯:00FF1613 OK,我们继续Shift F9运行, 观察壳所申请到的内存地址,这个需要不少次才看到EAX=00FF0000,某些时候需要中断2次EAX=00FF0000,取消7C809A9A处断点。 在转存选中Ctrl G:00FF1613选中00FF1613处4个字节,下“内存写入”断点。Shift F9 00FD2645 F3:A5 rep movs dword ptr es:[edi],dword ptr ds:[esi] //中断在这里 ds:[esi]=[00635587]=E0515542 es:[edi]=[00FF1614]=00000000 ds:[esi]=[00635583]=DB9F2C32 es:[edi]=[00FF1610]=00000000 00635586==>00FF1613 DB 42 55 51 ★ 你可以用LordPE的FLC功能查看BeeIcons.exe的00635586(偏移000C5B86)处数据:DB 42 55 51 , Good! ASProtect壳下面会对这些数据进行简单的运算,变换成0012FAB4 ————————————————————————————————— 四、得到运算数据 求逆 选择00FF1613处的4个字节,设置“内存访问”断点。Shift F9,中断在00FD94BA处,开始运算。 00FD946A 41 inc ecx 00FD946B 80E1 FF and cl,0FF 00FD946E 33DB xor ebx,ebx 00FD94C1 321C30 xor bl,byte ptr ds:[eax esi] //异或 注意:记住运算的数据! //①、BL=DB XOR 6F=B4 //②、BL=42 XOR B8=FA //③、BL=55 XOR 47=12 //④、BL=51 XOR 51=00 运算结束得到: ★ 00FF1613 B4 FA 12 00 BeeIcons.exe的000C5B86偏移地址处是DB425551,这个值正是上面进行运算的数据。 我们要把这里的0052FAB4(0012FAB4 0040000)改为运算后跳向可以写Patch代码的地址! 一般在PE文件偏移80-100间有段空白地址可以给我们利用,所以要修改这个运算后的Patch地址为00400080。 求逆00000080(00400080-00400000)如下: ①、BL=80 XOR 6F=EF ②、BL=00 XOR B8=B8 ③、BL=00 XOR 47=47 ④、BL=00 XOR 51=51 使用WinHex修改BeeIcons.exe偏移000C5B86处的DB425551为:EFB84751,另存为fly.eXe,第六步时需要在里面进行最终的修改。 ————————————————————————————————— 五、RegOpenKeyExA 得到上面的地址运算数据后,我们还要得到壳通过读取注册表中的信息判断是否过期的地方。 Ctrl F在“整个段块”搜索命令:push 20019 00FD961D 68 19000200 push 20019 //找到这里 00FD9622 6A 00 push 0 00FD9624 8BC7 mov eax,edi 00FD9626 E8 31A2FFFF call 00FD385C 00FD962B 50 push eax 00FD962C 56 push esi 00FD962D E8 C6BAFFFF call 00FD50F8; jmp to advapi32.RegOpenKeyExA //Call RegOpenKeyExA 00FD9632 85C0 test eax,eax 00FD9634 0F85 84000000 jnz 00FD96BE call 00FD50F8就是call RegOpenKeyExA 点右键,搜索全部命令:call 00FD50F8 ————————————————————————————————— 六、Patch最终处理 用Ollydbg载入第四步保存的fly.eXe,忽略所有异常,直接下断:BP 400080,Shift F9后中断下来。 00400080 0000 add byte ptr ds:[eax],al //中断 OK,ASProtect成功到达我们指定的地点!现在写入Patch代码: 00400080 A1 07366100 mov eax,dword ptr ds:[613607] //[613607]中是第三步得到的壳重定位后的基址 00400085 C680 7D970000 E>mov byte ptr ds:[eax 977D],0EB //这三句是修改壳通过读取注册表中的信息判断是否过期的地方 //修改①、 jmp 00FD97E5 0040008C C780 30980000 E>mov dword ptr ds:[eax 9830],94E9 //修改②、 jmp 00FD98C9 00400096 C680 18990000 E>mov byte ptr ds:[eax 9918],0E9 //修改③、 jmp 00FD994A 0040009D 55 push ebp 0040009E 8BEC mov ebp,esp //上面2句是把0052FAB4和0052FAB5代码挪到这里执行 004000A0 B8 C0004000 mov eax,004000C0; ASCII "fly" //直接在004000C0处写入注册名:fly 004000A5 E9 10FA1200 jmp 0052FABA //跳回去继续流程 从Ollydbg中“二进制复制”如下: A1 07 36 61 00 C6 80 7D 97 00 00 EB C7 80 30 98 00 00 E9 94 00 00 C6 80 18 99 00 00 E9 55 8B EC B8 C0 00 40 00 E9 10 FA 12 00 前面所有的工作只为了这里写入的几行代码,而这几行代码则使得这个使用ASProtect保护的程序变成了注册版! 至于制作Patch,可以随意选择补丁工具,看你的喜好了。我选择t.p.e制作了通用的文件补丁。 |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-29 11:42 , Processed in 0.288561 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.