首页
社区
课程
招聘
[原创]一个ELF格式的脱壳破解记录
发表于: 2012-10-23 18:34 15259

[原创]一个ELF格式的脱壳破解记录

2012-10-23 18:34
15259
一、脱壳
用命令strings crackme5查出来加了upx3.08版本的壳

登录http://upx.sourceforge.net 下载

根据版本自己选择下载,我用的BT564位,所以选择第三个下载
tar -xf upx-3.08-amd64_linux.tar.bz2解压文件

将要脱壳的文件放到upx-3.08-amd64_linux这个文件夹
再执行./upx -d crackme5 就脱壳成功。如图Unpacked 1 file

二、破解
直接把脱壳的放ida6.1版本

静态分析:

此处是这个反汇编唯一的一个jz比较,有经验的cracker肯定会想应该是关键跳,想丅断,发现不行!!
不知道IDA对ELF格式的不支持动态调试,BT5里面有一个edb可以动态调试ELF格式文件,界面和OD差不多,
不过不是很熟悉,所以尝试了一下就放弃了!
我们还是一步一步的静态的看代码吧!

我们鼠标单击esp+eax+16中的16会发现是这样的数据
根据内存数据存储情况我们还原esp+eax+16的值是:45 61 2D 63 5B  71 23 63 2D 5A 4B 33 52          

我们数据再单击esp+eax+24
发现就这三段有24h,明显就是把13位字符串截取成3断,分别进行算法操作!最后和esp+eax+16比较

首先是对第一到第五个字符串的处理

(not 0)*2 = FFFFFFFE(-2) + x = 45
(not 1)*2 = FFFFFFFC(-4)
(not 2)*2 = FFFFFFFA(-6)
(not 3)*2 = FFFFFFF8(-8)
(not 4)*2 = FFFFFFF6(-10)类似的

接下来是对第六到第十个字符串的处理
mov     eax, [esp+78h]
mov     edx, [esp+78h]//esp+78h=index(字符索引)
movzx   edx, byte ptr [esp+edx+4Ch] //依次取出第六个到第十个的假码的ASCII的16进制到edx
mov     ecx, edx //假码给ecx
mov     edx, 4
sub     edx, [esp+78h]//edx = edx-index(index>=5)
add     edx, edx//edx=2*edx
lea     edx, [ecx+edx]//edx=ecx+edx
add     edx, 1//edx加1
mov     [esp+eax+24h], dl
jmp     short loc_8048312
最后总结第六到第十个字符串的处理就是:des(目标)依次+1,3,5,7,9

下面是对第11到13个字符串的处理

结果不处理!!

给了大家思路,相信大家已经会怎么静态分析elf格式的文件了。

最后成功的效果如图:

总结:
1、有movzx一般就是算法了。因为在取输入的假码。
2、反汇编代码中的数据是从高地址到低地址存储~
3、静态分析比动态分析难度要大很多,这也要求了对汇编指令的熟悉程度!
4、尽量不用ida的F5插件功能。要增加自己的反汇编分析能力!

--------------------------------------------------------------------------------
【版权声明】: 本文原创于JoyChou, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2012年10月15日 21:51:59
详细图片和下载请点击http://note.youdao.com/share/?id=a4f47c1e147853e5651dc2ef3755d5a1&type=note
大牛勿喷啊

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 6
支持
分享
最新回复 (1)
雪    币: 4
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
请问下楼主,这个是可以直接用upx -d脱,但是有的处理过的壳没法直接脱,这种只能手动分析了吧。。
但是linux下没啥好的工具,我只能ida远程调试了,现在就是发现64位的可能用的原理不太一样,导致分析不太顺。不知道楼主有没有相关的研究呢
2015-12-13 11:02
0
游客
登录 | 注册 方可回帖
返回
//