本帖最后由 Martin 于 2014-10-18 23:02 编辑
一、开篇 首先要写在前面本篇文章写的UPX 脱壳脚本有可能不是所有的UPX都使用,仅供学如果,仅供学习怎样去一个简单地脚本节省劳动力,这里不多废话,俗话说的好:“工欲善其事必先利器”,那么我们今天要用的利器就是OllySubScript脚本编写工具,有很多这类的工具,找一个就好了!下面就是对写脚本的具体分析。 这里重点说明一点:写脚本其实就是对在OD中进行分析得来的,这句话说通俗点就是比如我们载入OD后我们都会F8单步走,那么对应翻译成脚本就是STO,我们在脚本中写STO就是单步走一下! 今天我们要写的加了UPX壳的DLL,顺便将DLL的重定位地址找到;着重讲的是一个思路,这里重点思路是UPX壳是开始都是pushad和结尾是popad,这里就算是我们找到的一个特征码,记录下来我们将DLL文件载入到OD中进行查看!首先用PEID查壳看一下壳的版本!
图一
将DLL文件载入到OD中。相信大家手托过UPX的都知道往下拉看看结尾处!
图二
我们通过这个跳转到OEP的上面看到popad这个指令,那么我们就可以找到一个关键点,也就是这个popad这里,那么我们就从这里下手!进行写脚本!我们可以通过OD里面的搜索功能查找popad出现的次数,Ctrl+F查找popad;发现还有一个地方有这个指令,就是下面这里:
图三
既然我们已经找到了这个关键点Popad了,那么我们就来开始写脚本! 首先我要在脚本中写找到popad这个指令的语句,用Find查找来进行,类似于OD里面的Ctrl+B查找61;如果查找成功,地址会保存到保留变量$RESULT中,否则$RESULT将等于 0 [Asm] 纯文本查看 复制代码 Var cc //这里声明一个变量用来保存$RESULT的值
FIND eip, #61# //类似于Ctrl+B,结果保存在$RESULT当中
MOV cc,$RESULT //将查找的61的地址保存在cc中,注意这里查找的popad是100A0A29地址处的popad,注意我们在这个地方下硬件执行断点时候OD停不下来,那么我们就可以ret后面进行下断点2F-29=6,那么我们就在这个cc基础上加6
ADD cc,6
BPHWS cc,”x” //在指定地址,设置硬件断点。有三种模式: "r" - 读取, "w" - 写入 或者 "x" - 执行.
RUN //运行
MSG $RESULT //弹出地址下硬件执行断点的地址(用来做测试)
BPHWC cc //清楚硬件执行断点
上面的代码就会运行到我们查找的第一个popad后面的100A0A2F处断下,代码是add edi,0x4,100A0A2F处下面再查找popad的时候就是到OEP的那个Jmp上面的Popad了! [Asm] 纯文本查看 复制代码 FIND eip, #61# //类似于Ctrl+B,结果保存在$RESULT当中
BPHWS $RESULT, "x"
RUN
MSG $RESULT
BPHWC $RESULT
这时候代码就会段在图一所示的100A0A60处的popad,那么我们接下来要做的只需要单步两下,再对代码进行分析就到了OEP; [Asm] 纯文本查看 复制代码 STO //单步F8运行
STO //单步F8运行
MSG "欢迎来到OEP,By:BattleHeart"
AN eip //对程序进行分析
RET
这样初步的脚本就写完了,接下来就是我们所说的对DLL进行加壳之后比EXE多一个重定位的查找; 这里我们说一个快速查到的UPX壳的DLL重定位地址的方法,那就是搜索下面这几条语句; [Asm] 纯文本查看 复制代码 xchg ah,al
rol eax,0x10
xchg ah,al
add eax,esi 这几条指令上面会有moveax,dword ptr ds:[ebx],dword ptr ds:[ebx]存放的就是重定位的地址。
图四
那么我们就需要查找这几个指令,进行查找重定位地址 [Asm] 纯文本查看 复制代码 VAR tezhengma1 //用来存放重定位地址
VAR ee //用来存放$RESULT的结果
FIND eip,#86c4c1c010# //查找上面指令
MOV ee,$RESULT
MSG $RESULT //这里地址是100A0A46
SUB ee,2 //100A0A44这个位置
BP ee //断点到Mov eax,dword ptr ds:[ebx]
MOV tezhengma1,[ebx] //既然已经断在了这个位置那么我们就可以取出这个值并弹出来
MSG tezhengma1
BC ee //清楚F2断点
分析完毕; 整个脚本就是如下所示; [Asm] 纯文本查看 复制代码 //UPX脱壳脚本之一
VAR cc
VAR tezhengma1
VAR ee
FIND eip,#86c4c1c010#
MOV ee,$RESULT
MSG $RESULT
SUB ee,2
BP ee
MOV tezhengma1,[ebx]
MSG tezhengma1
BC ee
FIND eip, #61#
MOV cc,$RESULT
ADD cc,6
BPHWS cc, "x"
RUN
MSG $RESULT
BPHWC cc
FIND eip, #61#
BPHWS $RESULT, "x"
RUN
MSG $RESULT
BPHWC $RESULT
STO
STO
MSG "欢迎来到OEP,By:BattleHeart"
AN eip
RET
运行结果: 这个是重定位处断下的地址
图五
这个是重定位地址:别忘了减去基址哦!
图六
第一个Popad地址:
图七
断在了popad处
图八
OEP了!
图九
程序下载地:链接: http://pan.baidu.com/s/1o6HmsrC 密码: a2b6
希望大家在看的时候别忘了给点热心值,写文章不易啊!!各位看官
|