UPX压缩脱壳「建议收藏」

UPX压缩脱壳「建议收藏」该方法可针对upx变种,但AndroidLinker的时候不需要section表,所以我们不能修复section表进行SO层代码脱壳1.使用IDA打开libexec.so,在导出函数中找到.init_proc函数(0x39A79),搜索特征码7D2700DF搜索到下面语句2.自己编译一个load程序,然后ida附加.刚好到死跳转处,注意…

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

该方法可针对 upx 变种,但Android Linker 的时候不需要section表, 所以我们不能修复 section 表

进行SO层代码脱壳

1. 使用IDA 打开libexec.so,在导出函数中找到.init_proc 函数(0x39A79), 搜索特征码7D 27 00 DF

UPX压缩脱壳「建议收藏」

        搜索到下面语句    

        UPX压缩脱壳「建议收藏」     

        2.自己编译一个load程序 , 然后ida 附加.

        UPX压缩脱壳「建议收藏」

        刚好到 死跳转处, 注意 r0和 r1修复program head 有用

        3.开始dump 数据, 

UPX压缩脱壳「建议收藏」

从基地址开始0x40501000  到0x40559000 结束, 也就是刚才下面一个libexec  的segment结束.

      4.修复program head

UPX压缩脱壳「建议收藏」

 

这里是p_files和p_memsz 是错误的需要修正,  这里大小的计算为

mprotect 函数的参数1 + 参数2 – 模块基地址 结果如下:

0x40511000 + 0x00047490 – 0x40501000 = 0x57490;

    并修改第一个(RW_) Loadable Segment的文件偏移,P_offet = p_addr – 0x1000 , 这里 应该修改为 0x57EE0; 下面是修改后的

UPX压缩脱壳「建议收藏」

        5.修补数据

打开原始文件 libexec.so 文件定位到

第一个 (RW_) Loadable Segment的p_offset文件偏移0x3AEE0 , p_memsz 大小 (0x4BC8),  这里我们将这一步份数据复制出来, 粘贴到我dump出来的偏移 0x57EE0 处

UPX压缩脱壳「建议收藏」

         6. 获得原始init 函数 RVA

        定位原始的init 函数地址, 我们返回到刚才调试的IDA 中

UPX压缩脱壳「建议收藏」

 0x404E8649就VA了这里我们减掉基地址 0x404D6000 获得RVA为 0x12649, 也可以将上面的死条状指令恢复然后, 一直 F8 经2次返回就可到原始 init 函数

        第一次返回:

UPX压缩脱壳「建议收藏」

         第二次返回:

UPX压缩脱壳「建议收藏」

 

 

7.修改 .init_prot 偏移地址

.init_prot  rva= 0x039A79 , 所以我们在刚粘贴的数据中用WinHex 搜索 16进制

 0C 00 00 00 79 9A 03 00   //前4个字节是类型标识 后4个字节是函数偏移地址

UPX压缩脱壳「建议收藏」

我们要将这里的 0x39A79 壳代码修改为原始的init函数.最终修改为

UPX压缩脱壳「建议收藏」

 

 

 

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

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

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


相关推荐

  • XGBoost原理介绍

    XGBoost原理介绍 1.Introduction在这篇文章中,我将介绍XGBoost(eXtremeGradientBoosting),一种treeboosting的可扩展机器学习系统。这个系统可以作为开源的软件包使用。该系统的影响已经在大量的机器学习和数据挖掘挑战中被广泛地认可。这些获胜解决方案包括:商店销售预测;高能物理事件分类;网络文本分类;顾客行为预测;运动检测;广告点击率预测;…

    2022年6月7日
    44
  • github开源项目地址「建议收藏」

    github开源项目地址「建议收藏」github开源项目地址

    2022年7月16日
    30
  • oracle字段换名语句,修改表名的sql语句

    oracle字段换名语句,修改表名的sql语句sql语句能不能修改表名可以。SQL自带了一系列的系统存储过程。其中sp_rename就具有修改表名和列名的功能。对于sp_rename是这样定义的:更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。基本语法:修改表名:EXECsp_rename'[原有表名]’,'[新表名]’;修改列名:EXECsp_rename'[原有列名]’,‘[新列名]’,’COLUMN’…

    2022年5月13日
    67
  • siamfc++代码_c语言代码怎么理解

    siamfc++代码_c语言代码怎么理解文章目录前言一、论文翻译二、论文代码1.backbone网络前言记录自己阅读复现SiamFC的全过程,包括论文翻译,代码理解等一、论文翻译论文原文:链接:https://pan.baidu.com/s/1wvXra0Ji6L9IMVZikaUs9Q提取码:s7t3本文是Siam系列跟踪论文的开篇之作,兼容了速度与精度,引起跟踪社区极大的关注。论文中对一些细节描述分非常充分,适合精读本文。二、论文代码代码参考;https://github.com/HonglinChu/SiamTra.

    2022年9月30日
    2
  • DDPG 算法

    DDPG 算法DDPG算法1离散动作vs.连续动作离散动作与连续动作是相对的概念,一个是可数的,一个是不可数的。在CartPole环境中,可以有向左推小车、向右推小车两个动作。在FrozenLake环境中,小乌龟可以有上下左右四个动作。在Atari的Pong游戏中,游戏有6个按键的动作可以输出。但在实际情况中,经常会遇到连续动作空间的情况,也就是输出的动作是不可数的。比如说推小车力的大小、选择下一时刻方向盘的转动角度或者四轴飞行器的四个螺旋桨给的电压的大小等等。对于这些连续

    2022年6月15日
    106
  • WLAN与WIFI的区别[通俗易懂]

    WLAN与WIFI的区别[通俗易懂]WLAN与WIFI的区别WLAN简介:WLAN全称为:WirelessLocalAreaNetworks,中文解释为:无线局域网络,是一种利用射频(RadioFrequencyRF)技术进行据传输的系统,该技术的出现绝不是用来取代有线局域网络,而是用来弥补有线局域网络之不足,以达到网络延伸之目的,使得无线局域网络能利用简单的存取架构让用户透过它,实现无网线、无距离限制的通畅网络。

    2022年7月27日
    10

发表回复

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

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