elf 变异upx 脱壳

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

大家好,又见面了,我是你们的朋友全栈君。

题目
是某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);
        }
}

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158110.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mybatiscodehelperpro 2.9.6激活码【2021最新】「建议收藏」

    (mybatiscodehelperpro 2.9.6激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1PA3AFINM4-eyJsaWNlb…

  • pstack 安装linux_pstack命令[通俗易懂]

    pstack 安装linux_pstack命令[通俗易懂]pstack命令可显示每个进程的栈跟踪。pstack命令必须由相应进程的属主或root运行。可以使用pstack来确定进程挂起的位置。此命令允许使用的唯一选项是要检查的进程的PID。命令软件包下载地址:https://packages.debian.org/sid/pstack实例pstree以树结构显示进程pstree-pwork|grepadsshd(22669)—b…

  • 服务器四通道内存性能提升,四通道内存性能怎么样

    服务器四通道内存性能提升,四通道内存性能怎么样四通道的内存有提升,但是性价比不是很好,如果是发烧友那不需要考虑什么了,如果是实用主义者四通道带来的性能的提升可能不会在使用中有太多的明显的感受。组建四通道内存很简单,有足够的内存条卡槽,X79的芯片组,i7-3960K的处理器,Apacer宇瞻猎豹DDR3-16002GB*4或者海盗船DDR316002GB*4的内存条就可以了,当然其他品牌的内存条也可以,这里只是举例,四条一样…

  • 常见数据结构与算法整理总结(下)_常用数据结构与算法

    常见数据结构与算法整理总结(下)_常用数据结构与算法数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。算法是为求解一个问题需要遵循的、被清楚指定的简单指令的集合。下面是自己整理的常用数据结构与算法相关内容,如有错误

  • 【SpringBoot】45、SpringBoot中整合JWT实现Token验证(注解篇)「建议收藏」

    前言上篇文章,我们已经在SpringBoot中整合了JWT并实现了Token验证,那我们在实际应用中就会发现,如果每个视图层(controller)都手动验证token,代码就会显得特别臃肿,本篇文章主要为了解决该问题。如果对整合JWT还不熟悉的朋友,可以先看看我的这篇博客:【SpringBoot】四十四、SpringBoot中整合JWT实现Token验证自定义注解1、创建自定义注解packagecom.asurplus.common.annotation;import

  • JQuery的Ajax跨域请求的

    JQuery的Ajax跨域请求的

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号