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

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

2012-10-23 18:34
15738

一、脱壳
用命令strings crackme5查出来加了upx3.08版本的壳

登录ee0K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4g2H3P5q4)9J5k6i4y4G2N6i4u0U0k6h3k6G2M7X3N6W2i4K6u0W2L8X3g2@1 下载

根据版本自己选择下载,我用的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
详细图片和下载请点击697K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3&6G2N6r3g2Q4x3X3g2&6L8%4g2V1j5h3!0Q4x3X3g2U0L8$3#2Q4x3V1k6K6K9r3q4J5k6g2)9J5c8W2)9K6c8X3W2V1i4K6y4p5j5e0c8X3y4o6N6U0x3h3f1I4y4o6M7^5y4e0y4W2y4e0j5#2x3h3c8U0x3X3g2X3x3K6M7#2y4h3b7#2j5e0q4Q4x3U0k6@1P5i4m8W2i4K6y4p5L8X3!0@1k6b7`.`.
大牛勿喷啊


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

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