zoukankan      html  css  js  c++  java
  • “爱加密” 动态脱壳法

    测试环境为:

    安卓2.3

    IDA6.6

    下面看具体操作步骤:

    具体怎样用IDA动态调试我就不多说了,网上己经有很多文章了,下面直接进入正题。

    1.准备好调式环境后 用IDA附加进程。

    2.附加成功后按"G"键 跳到dvmDexFileOpenPartial函数与fopen函数与fgets函数去下好断点。

    3.下好断点后我们来说说它的反调试吧,下面我给两张图片大家可能就会明白它的反调试是怎么一回事了。

    在调试状态下查看进程 TracerPid 不为0

    在非调试状态下查看进程 TracerPid 为0

    上面TracerPid: 23131

    不为0时表示跟踪当前进程的进程ID,如果是0,表示没有跟踪。

    4.明白了反调试后就可以进下面脱壳步骤了 F9 运行 断在fopen

    5.打开进程成功后使用fgets获得信息 当获得如下信息进我们将其修改为 0

    修改为 0 后

    6.我在测试时它检查了两次,都修改后就会来到这里。

    7.这样就得到了解密后的DEX开始地址与大小,R0为存放DEX数据开始地址,R1为Dex大小,Dump出来。

    8.写个简单的过idc脚本将其dump出来,开始地址加上dex大小就是结束地址了。

    0x446DC4E4为开始地址加上大小后等于0x4472AFBC(结束地址)

    auto fp, dexAddress;

    fp = fopen("C:\test.dex", "wb");

    for ( dexAddress=0x446DC4E4; dexAddress < 0x4472AFBC; dexAddress++ )

    fputc(Byte(dexAddress), fp);

    9.使用idc脚本将其dump出来 

    运行完脚本后c盘就会出来明文的DEX了,到此脱壳完成。

    重新打包时一定要删除AndroidManifest.xml文件中

    android:name="com.shell.SuperApplication" 壳入口。

    这样原始的dex文件就被dump出来了。

    完.

    样本及文档下载

     http://yunpan.cn/cASwMkjaMwaTy (提取码:ce81)

    当把学习当成一种习惯!
  • 相关阅读:
    阿里云重磅发布DMS数据库实验室 免费体验数据库引擎
    阿里云移动端播放器高级功能---直播时移
    图解SQL的inner join、left join、right join、full outer join、union、union all的区别
    索引覆盖分析
    case when 性能优化
    Eclipse断点种类
    Eclipse高效率开发技巧
    VS Code编辑器
    正则表达式
    JDBC编程之预编译SQL与防注入式攻击以及PreparedStatement的使用教程
  • 原文地址:https://www.cnblogs.com/2014asm/p/4112116.html
Copyright © 2011-2022 走看看