elf 变异upx 脱壳[通俗易懂]

elf 变异upx 脱壳[通俗易懂]题目是某ctf题首先使用IDA打开:函数极少,有壳。查看函数这个跳转比较可疑下面进行IDA动态调试进入loc_52D516再进入直到找到jmpr13运行到这里,F8跳转直接retn下断点F9,直接retn下断点F9重复,直到遇到一个大跳转单步,然后return来到了程序入口下面dump脱壳(转储的意思)。dump要使用脚本,因为我是个菜鸡,直接在网上找的脚本,通用的。idc脚本下载可以存放在ida里面有个脚本的文件夹idc,源码后面会附上首先在D盘下

大家好,欢迎来到IT知识分享网。

题目
是某ctf题

首先使用IDA打开:
在这里插入图片描述
函数极少,有壳。
查看函数
使用

这个跳转比较可疑
在这里插入图片描述

下面进行IDA动态调试
进入loc_52D516
在这里插入图片描述

再进入
直到找到jmp r13
运行到这里,F8跳转
直接retn下断点F9,直接retn下断点F9重复,
在这里插入图片描述
直到遇到一个大跳转
在这里插入图片描述
单步,然后return
在这里插入图片描述
来到了程序入口
请添加图片描述
下面dump脱壳(转储的意思)。
dump要使用脚本,因为我是个菜鸡,直接在网上找的脚本,通用的。

idc脚本下载

可以存放在ida里面有个脚本的文件夹idc,源码后面会附上

首先
在D盘下创建一个dumpfile无后缀文件,不然要提示错误
在这里插入图片描述
当然也可以改文件目录和地址,见源文件
运行到程序入口点。
使用alt+F7载入脚本,选择dump_elf64
等待
加载

请添加图片描述

成功以后,刚刚创建的dumpfile就是脱壳后的文件了。

源码:

#include <idc.idc>
#define PT_LOAD 1
#define PT_DYNAMIC 2
static main(void)
{ 
   
         auto ImageBase,StartImg,EndImg;
         auto e_phoff;
         auto e_phnum,p_offset;
         auto i,dumpfile;
         ImageBase=0x400000;
         StartImg=0x400000;
         EndImg=0x0;
         if (Dword(ImageBase)==0x7f454c46 || Dword(ImageBase)==0x464c457f )
  { 
   
    if(dumpfile=fopen("D:\\dumpfile","wb"))//这路可以更改路径
    { 
   
      e_phoff=ImageBase+Qword(ImageBase+0x20);
      Message("e_phoff = 0x%x\n", e_phoff);
      e_phnum=Word(ImageBase+0x38);
      Message("e_phnum = 0x%x\n", e_phnum);
      for(i=0;i<e_phnum;i++)
      { 
   
         if (Dword(e_phoff)==PT_LOAD || Dword(e_phoff)==PT_DYNAMIC)
                         { 
    
                                 p_offset=Qword(e_phoff+0x8);
                                 StartImg=Qword(e_phoff+0x10);
                                 EndImg=StartImg+Qword(e_phoff+0x28);
                                 Message("start = 0x%x, end = 0x%x, offset = 0x%x\n", StartImg, EndImg, p_offset);
                                 dump(dumpfile,StartImg,EndImg,p_offset);
                                 Message("dump segment %d ok.\n",i);
                         }    
         e_phoff=e_phoff+0x38;
      }

      fseek(dumpfile,0x3c,0);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);

      fseek(dumpfile,0x28,0);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);
      fputc(0x00,dumpfile);

      fclose(dumpfile);
        }else Message("dump err.");
 }
}
static dump(dumpfile,startimg,endimg,offset) 
{ 
   
        auto i;
        auto size;
        size=endimg-startimg;
        fseek(dumpfile,offset,0);
        for ( i=0; i < size; i=i+1 ) 
        { 
   
        fputc(Byte(startimg+i),dumpfile);
        }
}

这个题脱壳后就全是地址了,用了很多方法,没找着主函数,我太菜了

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/26265.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信