教你如何写UPX脱壳脚本
本帖最后由 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将等于 0Var 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 //弹出地址下硬件执行断点的地址(用来做测试)
BPHWCcc //清楚硬件执行断点
上面的代码就会运行到我们查找的第一个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:,dword ptr ds:存放的就是重定位的地址。 那么我们就需要查找这几个指令,进行查找重定位地址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:
MOV tezhengma1, //既然已经断在了这个位置那么我们就可以取出这个值并弹出来
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,
MSG tezhengma1
BC ee
FIND eip, #61#
MOV cc,$RESULT
ADD cc,6
BPHWS cc, "x"
RUN
MSG $RESULT
BPHWCcc
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
希望大家在看的时候别忘了给点热心值,写文章不易啊!!各位看官
Martin 发表于 2015-4-6 20:32
@smile1110本身就是个外挂里面的dll是加密的你是逗我吗?
一年只有三季 下载了,多谢指教 多谢指教{:301_1003:} 三楼,,,挺近的! 哈哈哈,适合我这种新手啊 用OD写? Bad丶Boy 发表于 2014-10-18 22:44
用OD写?
OllySubScript Martin 发表于 2014-10-18 23:01
OllySubScript
不是OD吗??? Bad丶Boy 发表于 2014-10-18 23:03
不是OD吗???
你自己百度吧!