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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ORACLE触发器(trigger)的使用

    ORACLE触发器(trigger)的使用1、触发器说明触发器是一种在事件发生时隐式地自动执行的PL/SQL块,不能接受参数,不能被显式调用2、触发器语法create[orreplace]triggertrigger_name{before|after|insteadof}trigger_eventon{table_name|view_name}[foreachrow]beginPL/SQL语句…

    2022年7月15日
    18
  • nginx和apache优缺点

    nginx和apache优缺点nginx与Apache的对比今天准备较详细的对比一下apachehttpd与nginx两个web服务器的异同点、优缺点。由于我并不是做web开发的,所以有什么理解错误还请指出,想要了解它们是因为工作中有时候会用到它,有系统中用到了nginx+apache。本文绝大多数资料都是摘抄网上,自己做的只就是整合网上零散的资源然后加上自己的一点见解。简单的说apachehttpd和nginx都是we…

    2022年5月16日
    40
  • 移动端禁用长按复制js兼容css样式_手机为什么长按不能复制

    移动端禁用长按复制js兼容css样式_手机为什么长按不能复制添加全局禁止选择文本的CSS属性*{-webkit-touch-callout:none;/*系统默认菜单*/-webkit-user-select:none;/*webkit浏览器*//*noinspectionCssUnknownProperty*/-khtml-user-select:none;/*早期浏览器*/-moz-user-select:none;/*火狐浏览器*/-ms-user-select:

    2022年9月29日
    3
  • bootstrap与vue区别_layui框架和vue哪个好

    bootstrap与vue区别_layui框架和vue哪个好layui,bootstrap和vue的区别

    2022年8月1日
    4
  • sql中的 IF 条件语句的用法[通俗易懂]

    sql中的 IF 条件语句的用法[通俗易懂]IF表达式IF(expr1,expr2,expr3)expr1的值为TRUE,则返回值为expr2expr1的值为FALSE,则返回值为expr3如下:1234

    2022年7月1日
    26
  • 怎么使用matlab画图_matlab画图plot

    怎么使用matlab画图_matlab画图plot注意点matlab中分号;是拿来分隔列并抑制输出显示的。matlab中每个变量都是数组/矩阵,即使是x=1这样的语句也代表创建了一个1*1的矩阵,变量使用前必须有值。通过whos显示当前的变量使用情况。长任务可以通过使用省略号…扩展到另一行。formatlong命令显示十进制后的16位数字。b白色、r红色、k黑色基本语法示例循环、选择、函数定义function…

    2022年9月20日
    4

发表回复

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

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