-
-
[原创]Krypton0.5主程序脱壳
-
发表于:
2012-6-15 19:30
6544
-
【软件简介】:这个壳的anti一般,使用了多线程(首次在壳中出现?)。it处理还可以,但强度不够。 http://www.lockless.com 注意: 长时间不更新,稳定性兼容性不是很好,不推荐商业软件采用。<出自看雪描述>
【作者声明】:初学Crack,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【调试环境】:WinXP、Ollydbg1.09、PEiD、LordPE、ImportREC V1.6
前言:留一篇文章记录自己的成长,通过调试该软件使你彻底了解加密壳的世界,是如此复杂繁琐的一件事。同时崇拜Patch Code高手,写脚本调试就简单多了。但本
人因为很没有耐心,所以锻炼一下。<如果你有更好锻炼耐心的方法,请PM我,谢谢!>
本文主要讲解除了K-Protect on Api之外,其他选项全部扣上<英文不懂,翻译不准,O(∩_∩)O哈哈~>,因为K-Protect on API强度很弱。K-Protect on API 主要采用
flags - 0xff 来判断是否加密IAT,只要在中断处理Iat哪里找到该跳转并patch重定向代码即可。
快速到达OEP方法:
在VirtualAlloc F2断下三次,直接在Code段F2直接到达OEP<软件只添加K-Protect on API>的情况下使用。如果勾选K-Execution直接中断在该选项处理代码。
K-Execution一共有五种模拟代码处理方式<其实只有四种,但是通过asm编译程序的对比,主程序将FF25类型API也定向到FF15,所以也Patch相关代码进行处理>。因为
只处理FF15代码,导致不兼容其他编译程序,默认支持asm程序。<其他程序除了不勾选K-Execution选项才可以加壳成功>
第一种模拟方式:flags:0x5 模拟:API
第二种模拟方式:flags:0x0 模拟:push [Addr]
第三种模拟方式:flags:0x1 模拟:模拟一段代码,0xff之内字节。
第四种模拟方式:flags:0x2 模拟:mov [Addr],0x?
第五种模拟方式:flags:0x3 模拟:cmp [Addr],0x?
要还原还必须找到这些Addr处理代码的<偏移值>和处理<代码地址类型>判断,然后通过原程序的解码操作进行Patch。工作量有点大,研究数天,因为找了脱文,似乎都
只讲解API处理。主程序也只有fly发过,但是脱文提到Oep处Dump即可运行。<fly脱文往下拉,有解释(*^__^*) 嘻嘻……>
OD载入:
004A4000 > 54 push esp
004A4001 E8 00000000 call Krypton.004A4006
004A4006 5D pop ebp
004A4007 8BC5 mov eax,ebp
004A4009 81ED 71444000 sub ebp,Krypton.00404471
004A400F 2B85 64604000 sub eax,dword ptr ss:[ebp+0x406064]
004FEFFD 66:8138 FF15 cmp word ptr ds:[eax],0x15FF ; 判断是否未15FF
004FF026 /0F85 C7000000 jnz 004FF0F3 ; 找不到就 Addr + 1 Size - 1
004FF054 8378 02 05 cmp dword ptr ds:[eax+0x2],0x5 ; 判断是否[FF15+0x2]是否为5 壳作的Flags <这个也要记住的>
004FF07D /75 74 jnz short 004FF0F3 ; 判断是否不为5则跳
004FF0C9 8970 02 mov dword ptr ds:[eax+0x2],esi ; 取ESI填充 <这个我们要记录的>
004FF11B 40 inc eax ; Addr + 1
004FF13F 49 dec ecx ; Size - 1
004FF161 85C9 test ecx,ecx ; 测试SIZE是否为零
004FF18A ^\0F85 4EFEFFFF jnz 004FEFDE ; 如果相等则填充完毕
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)