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);
        }
}

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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • windows下的pycharm配置 linux环境

    windows下的pycharm配置 linux环境由于最近学习python的需要,为了方便程序的调试,尝试在Windows下的Pycharm远程连接到虚拟机中Centos下的python环境。(这里我采用的是ssh的远程连接)1、准备工作:固定ce

    2022年7月6日
    23
  • 最小角回归 LARS算法包的用法以及模型参数的选择(R语言 )

    最小角回归 LARS算法包的用法以及模型参数的选择(R语言 )Lasso回归模型,是常用线性回归的模型,当模型维度较高时,Lasso算法通过求解稀疏解对模型进行变量选择。Lars算法则提供了一种快速求解该模型的方法。Lars算法的基本原理有许多其他文章可以参考,这里不过多赘述,这里主要简介如何在R中利用lars算法包求解线性回归问题以及参数的选择方法。以下的的一些用法参照lars包的帮助文件,再加上自己的使用心得。所用的示例数据diabetes是Efron…

    2022年6月26日
    28
  • es6箭头函数详解_es6的新特性

    es6箭头函数详解_es6的新特性ES6标准新增了一种新的函数:ArrowFunction(箭头函数)。基础语法通常函数的定义方法varfn1=function(a,b){returna+b}functionfn2(a,b){returna+b}使用ES6箭头函数语法定义函数,将原函数的“function”关键字和函数名都删掉,并使用“=>”连接参数…

    2022年4月19日
    36
  • 初学者计算机电脑怎样学,初学者怎样学习电脑能够快速入门(免费科普电脑基础知识)…

    初学者计算机电脑怎样学,初学者怎样学习电脑能够快速入门(免费科普电脑基础知识)…上次回答了一个关于怎样自学电脑操作比较快的问题,现在我把我的答案整理升级,增加了键盘的快速入手使用方法。发布出来,以便更多的人能够有所收获。1.开机和关机作为完全初学者,首先需要学会正确的开关机。下图我整理了一些常见主机的开关机键与重启(restart)按键。常见主机上的开关机键和重启键一般来说,较大的一个是开关机键,较小的一个为重启键。在电脑处于关闭状态时,按一下开关机键即为开机。当电脑处于开…

    2022年10月19日
    2
  • 什么是防抖和节流?如何实现防抖和节流?

    什么是防抖和节流?如何实现防抖和节流?防抖 Debounce 和节流 Throttle 都是用来控制某个函数在一定时间内触发次数 两者都是为了减少触发频率 以便提高性能或者说避免资源浪费 毕竟 JS 操作 DOM 对象的代价还是十分昂贵的 应用场景 处理一些频繁触发的事件 例如 mousedown mousemove keyup keydown 等 不然的话 页面很可能会十分卡顿哦 防抖防抖就是指触发事件后在 n 秒内函数只能执行一次 如果在 n 秒内又触发了事件 则会重新计算函数执行时间 举个例子吧 例如 你是一个肯德基外卖配送员 每天专门

    2025年6月24日
    2
  • jquery验证二代身份证

    jquery验证二代身份证$(‘#idcardno’).blur(function(){varidcard=$(this).val();varreg=/^\d{17}\d|x$/;varis_ok=reg.test(idcard);vararrExp=[7,9,10,5,8,4,2,1,6,3,7,9…

    2022年6月27日
    27

发表回复

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

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