本帖最后由 BattleHeart 于 2014-10-18 20:34 编辑
一、开篇 首先要写在前面本篇文章写的UPX脱壳脚本有可能不是所有的UPX都使用,仅供学如果,仅供 学习怎样去一个简单地脚本节省劳动力,这里不多废话,俗话说的好:“工欲善其事必先利器”,那么 我们今天要用的利器就是OllDbgScript脚本编写工具,有很多这类的工具,找一个就好了!下面就是对写脚本的具体分析。 这里重点说明一点:写脚本其实就是对在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
- 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了! - FIND eip, #61# //类似于Ctrl+B,结果保存在$RESULT当中
- BPHWS $RESULT, "x"
- RUN
- MSG $RESULT
- BPHWC $RESULT
复制代码 这时候代码就会段在图一所示的100A0A60处的popad,那么我们接下来要做的只需要单步两下,再对代码进行分析就到了OEP; - STO //单步F8运行
- STO //单步F8运行
- MSG "欢迎来到OEP,By:BattleHeart"
- AN eip //对程序进行分析
- RET
复制代码 这样初步的脚本就写完了,接下来就是我们所说的对DLL进行加壳之后比EXE多一个重定位的查找;
这里我们说一个快速查到的UPX壳的DLL重定位地址的方法,那就是搜索下面这几条语句; - xchg ah,al
- rol eax,0x10
- xchg ah,al
- add eax,esi
复制代码 这几条指令上面会有moveax,dword ptr ds:[ebx],dword ptr ds:[ebx]存放的就是重定位的地址。
图四
图四 那么我们就需要查找这几个指令,进行查找重定位地址:
- 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断点
复制代码 分析到此完毕; 整体脚本如下所示:
- //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
复制代码 运行结果截图查看: 这个是重定位处搜索出来的地址:
图五
图5 这个是重定位地址:别忘了减去基址哦!
图六
图六 第一个Popad地址:
图七
图七
图八
图八
这里就是OEP了:
图九
图九
程序下载地:链接: http://pan.baidu.com/s/1o6HmsrC 密码: a2b6
|