-
-
[原创]一个ELF格式的脱壳破解记录
-
发表于:
2012-10-23 18:34
15436
-
一、脱壳
用命令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直播授课