-
-
[原创]一个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直播授课