wuqing1501 发表于 2010-8-19 12:50

让阿蛋-VP再升级一次吧-道歉声明

本帖最后由 wuqing1501 于 2010-8-20 12:23 编辑

【文章标题】: 让阿蛋-VP再升级一次吧
【文章作者】: wuqing1501
【软件名称】: VP加壳的VB程序
【下载地址】: 自己搜索下载
【保护方式】: VP全选项IAT最高等级加密
【使用工具】: 老三样
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
由于我的粗心导致这个壳的IAT没有全部修复而且不能跨平台太运行,只能本机运行在此向各位看官还有下载附件的朋友表示深深的歉意,为我的粗心和不严谨的态度浪费了大家宝贵的时间,向大家说声对不起!同时也为我的鲁莽给VP带来的负面影响表示深深的抱歉!!

【详细过程】
      前段时间学习了一下VP1.72demo的脱壳方法,找到了VP IAT加密最高等级的特征码,根据特征码就可以很简单的修复IAT了,但是在随后的几次升级中,阿蛋和谐了那几个特征码,不过经过对VP1.75DEMO 和1.76demo的分析,修复IAT的特征码发生了变化在1.72版中特征码是:#595B588BC18B4F24519D03C38B5F4489039C58#,而在VP1.75&1.76版中,特征码变成了这个:#588B5F448D04878B008903#,所以脚本需要稍微修改一下了!
其他的没有太多好说了,详细找OEP还有脱壳的流程可以参看我前面的文章,这里呢,我说下和原来有些不一样的地方。
先说下自己的分析思路吧!
      对于一个加密壳,如何修复IAT,好像目前常见的方式有两种吧,一种是在到达oep以前,找到壳处理IAT的地方先path掉加密(比如大多数的TMD的脱壳脚本都是这样的),然后到达OEP后DUMP IR修复;另外一种就是先到达OEP,然后找几个加密后的IAT分析是怎么加密变形的,然后根据加密的方式再找到相应的处理方法(比如ZP壳脱壳脚本,还有VMP1.7脚本等),相对来说,我个人感觉第二种方法其实更简单一些更适合像我这样的菜鸟。所以我还是用菜鸟的办法吧。其实上次文章那里KISSYMM给出了更好的修复IAT 的方法,也就是应该和他和谐VMP一样的方法吧,但是很可惜我水平太菜了,到目前为止用KMM的那个脚本脱VMP的壳一次都没有成功过,所以对于那种方法修复VP加壳后的程序我就更不知道怎么做了,所以还是延续比较简单的修复IAT的方式吧,到OEP以后再修复。
      对于VP加壳后的程序,大家可以看一下,使用最简单加密的时候,修复的时候反而最不容易修复,因为修复很简单但是用的时间却很长,因为都是很简短的代码很难在里面找到相应的特征码,所以写脚本修复的时候只要不停的让脚本F7运行,然后判断EAX或者ESP中是否是真实的API地址就可以了。对于VP加密的中或者高等级加密来说,你要是不停的F7你就发现这个是不行的因为这两种加密方式都使用了VP特有的垃圾堆指令,修复一个API就不停的跑那些垃圾代码等你修复一个程序,阿蛋早就更新了N个版本了!所以对于这两种加密方式我个人感觉唯一的方法就是在那些垃圾代码中找到特征码。如果想详细分析VP的话可能要详细分析那些垃圾指令了,所以这个时候就需要用到我上次的文章中所用到的垃圾指令清楚脚本,不过当时那个脚本不能直接使用的,原因就是把所有的垃圾指令都NOP 掉了,但是软件运行中就会发现ESP貌似就不一样了,所以运行会出错的,只要把那个垃圾指令脚本中的"??"修改诚相应个数的”90”就可以了用了,用完脚本后再分析的话就很容易的发现,整个垃圾指令中主要是对 ESP 和EAX进行操作,(具体怎么操作的,大家可以看加壳的程序,因为我水平菜没有看懂),经过一些列的操作后通过JMP eax (也就是FFE0) 来确定跳转的地址,通过不停的跳转最后用一个RET 返回到某个地址。详细的分析搞不定,有兴趣的可以研究一下。
      具体怎么在这么多的垃圾指令中到大特征码呢?还是用到了上次那个小脚本,就是在vm中找IAT地址的那个,通过对所有寄存器的值来判断那个寄存器是壳使用的以及相应的出现真实API地址的代码,最好把某一个API 解密过程中所有出现真实地址的代码都记下来, 当然也可以写成一个小脚本记录,我呢就手动了。等脚本跑完后,在所有出现真实地址的地方下断,然后运行程序,看程序运行过程中调用API真实地址都是通过那个共同代码的那么那个代码就可以认定是特征码了!对于VP加密的程序,这个过程就是个体力活。其实这个方法虽然是最笨的但是对于但多数的加密壳来说我感觉应该都是通用的。
找到了特征码那么修复就变得简单多了,直接写个脚本就可以了。
      在这里我贴出,自己写的分析加密的VB程序的脚本,具有一定的通用性 但仅限于VB程序,因为VB简单所以研究的话也是最方便的,用别的语言的话查找加密后的IAT稍微费力气一点不过修复的时候都是一样的,原理相通。不过需要注意的是用脚本修复完IAT后, 用UIF修复一下,然后DUMP,用IR修复的时候要注意那些地址还有大小最好都是自己根据程序里面的值自己写,尤其是RVA这个值最好是自己根据程序的实际情况来写,因为我在脱壳过程中发现如果自己简单的用UIF修复后 直接填写个值的话会出错的,不知道是共性问题还是我自己脱壳的问题。
      对于新版的VP,好像还有个ANTIdump,这个也不知道是共性问题还是我自己的脱壳问题,也就是脱壳后的程序所有的段都被设置成了只读的属性,而程序运行中却要往段内写入数据所以就造成了出错,针对这个的话可以用LP将脱壳后的程序的段全部设置成可读写可执行,那样程序就没有问题了,可以运行了。
      另外对于新版的VP,最快速度的加密中,好像也有一个特征码就是#33c3e9#,这个还不能完全确定。
好了这次就到这里吧没有任何的代码,是因为我感觉在前面的文章中,已经说的很详细了,在这里只是略作补充吧,这里只是说出了我分析的方法,希望对于想分析这个壳的朋友提供一点点的思路呵呵!
      下面这个脚本是脱VP1.75&1.76DEMO加壳的VB程序专用的脚本大家可以测试一下。

///////////////////////////////////////////////////////////////////
//VP 1.75&1.76demo VB IAT 修复脚本 //
//1、本脚本适用于VP 1.75&1.76 DEMO IAT 中等强度和最高等级 //
//2、本脚本仅适用于VB程序 //
//3、本脚本到达oep后使用 //
//4、到达OEP的方法: //
// 1)CODE段下硬件写入断点(可使用StrongOD和PhantOm 两个插件) //
// 2)断下后,F7、F8各一次 //
// 3)code段下内存访问断点(或F2断点)到达oep //
//code by wuqing1501 //
//2010-08-19 //
///////////////////////////////////////////////////////////////////

var neicuncodebase
var neicuncodesize
var oep
var ptr
var ip1
var addr
var refaddr
var temesp
var ptr1
var code
var kebase
var iataddr


mov kebase,0040e000 //VP 第一个壳段
mov oep,eip
mov temesp,esp

findkebase1tzm3:

mov eip,kebase
find eip, #588B5F448D04878B008903# //vp1.75和1.76修复IAT的特征码
cmp $RESULT,0
je exit
add $RESULT,9
bp $RESULT

mov esp,temesp
mov eip,00401000 //查找的起始位置
mov ptr1,eip

tzm3iatfind:

mov temesp,esp
find ptr1, #e9????????90# //VB程序比较特殊,AT被变形后 一般是这个遇到特殊的时候可适当修改
je exit
mov ptr,$RESULT
mov ptr1,ptr
mov eip,ptr
mov refaddr, ptr




tzm3iataddrfind:

esto
mov iataddr,eax
gn iataddr
cmp $RESULT,0
je tzm3iataddrfind

tzm3iatfix:


sub eax,refaddr
sub eax,5
mov refaddr,ptr
mov ,#e9#
add refaddr,1
mov ,eax,4
mov esp,temesp


nextfind:
add ptr1,6
cmp ptr1,oep //针对VB程序的特殊性在这里添加一下限制,判断需要修复的IAT是否是在OEP上面,如果其他的程序的话,根据实际情况,可怎加相应的判断防止修复过程中跑飞。
ja exit
jmp tzm3iatfind





exit:
mov esp,temesp
mov eip,oep
ret


附件:


--------------------------------------------------------------------------------
【经验总结】
1、自己分析总结经验还是很重要的。有时候技术是一方面,努力和思路也是一方面。
2、对于自己来说这个壳还是太难了,看来学习基础知识是十分必要的,还是要静下心来。

--------------------------------------------------------------------------------
【版权声明】: 没有什么版权, 但转载请注明作者并保持文章的完整, 谢谢!

2010年08月19日 12:33:21

小糊涂虫 发表于 2010-8-19 13:52

本帖最后由 小糊涂虫 于 2010-8-19 14:04 编辑

附件里的脱壳后的程序不能运行。这个方法正在试验中,不知道可行否。。。

261044691 发表于 2010-8-19 14:13

虽然看不懂 还是支持下·

553868776 发表于 2010-8-19 16:29

。。
看不懂
这是CC 还是VC

wuqing1501 发表于 2010-8-20 08:16

回复 2# 小糊涂虫


    不知虫 兄 试验的 如何能否正常运行呢   我估计我是没有修完了因为 现在 这里还有UPK都有说 不能正常运行但是我这里 我周围的这些电脑竟然都能正常运行 不知道是不是公司安装的系统的原因还是什么问题 希望您测试后 反馈意见

小糊涂虫 发表于 2010-8-20 11:26

回复小糊涂虫


    不知虫 兄 试验的 如何能否正常运行呢   我估计我是没有修完了因为 现在 这 ...
wuqing1501 发表于 2010-8-20 08:16 http://bbs.52pojie.cn/images/common/back.gif


      我也不知道是什么原因。。。还是不能运行。。。那个脚本iat倒是能修。。。。

ximo 发表于 2010-8-20 13:04

这个肯定运行不了。如下的IAT调用都没修复呢。
004051E6    E8 9D9B0000          call dumped_.0040ED88
004051EB    90                   nop

004052DC    E8 479B0000          call dumped_.0040EE28
004052E1    90                   nop

00405143    90                   nop
00405144    E8 779B0000          call dumped_.0040ECC0

0040514B    90                   nop
0040514C    E8 979B0000          call dumped_.0040ECE8

不列举了,还有很多很多。
这些调用都没修复。

jie342607776 发表于 2010-8-22 12:44

唉 .......完全不懂- -

pcghr355 发表于 2010-8-24 17:53

小支持下

tieniu 发表于 2010-10-4 12:50

态度令人敬佩
页: [1] 2
查看完整版本: 让阿蛋-VP再升级一次吧-道歉声明