IDA6.8 爱加密脱壳简单示例

第一步:将手机的 /system/lib/libart.so 文件拷贝出来.

注:↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

5.0以下的系统是/system/lib/libdvm.so

5.0级5.0以上的是/system/lib/libart.so

adb pull /system/lib/libart.so C:\Users\Administrator\Desktop

第二步:使用IDA静态分析libart.so文件,找到进入JNI_OnLoad上函数的汇编代码

(1) 

IDA6.8 爱加密脱壳简单示例_第1张图片

(2)

IDA6.8 爱加密脱壳简单示例_第2张图片

(3)

IDA6.8 爱加密脱壳简单示例_第3张图片

(4)JNIO_OnLoad地址值给了R12,接下来紧盯R12即可(dlsym是安卓系统函数,返回的是JNI_OnLoad的地址,各系统版本源码略有差异,具体参考安卓系统源码)

IDA6.8 爱加密脱壳简单示例_第4张图片

IDA6.8 爱加密脱壳简单示例_第5张图片

此时,记住BLX R12这个汇编代码的地址: 24A61E ,然后回到LoadNativeLibrary这个函数的起始位置,获取它的起始地址(上述的汇编代码均是这个LoadNativeLibrary函数的内容)

(5) 取得这两个地址后,计算偏移: 24A61E - 24A188 = 0x496

IDA6.8 爱加密脱壳简单示例_第6张图片

 IDA6.8 爱加密脱壳简单示例_第7张图片

 

第三步:使用IDA动态调试启动APP,通过偏移得到进入JNI_OnLoad函数的位置

(1)

IDA6.8 爱加密脱壳简单示例_第8张图片

(2)

IDA6.8 爱加密脱壳简单示例_第9张图片

(3)

IDA6.8 爱加密脱壳简单示例_第10张图片

(4)设置断点

IDA6.8 爱加密脱壳简单示例_第11张图片

(5)当运行到断点这个位置是,F7进入便可看到JNI_OnLoad函数,能看到OnLoad函数即表示dex文件已加载完毕

IDA6.8 爱加密脱壳简单示例_第12张图片

(6)dex文件加载完毕后,我们可通过OpenMemory..设断读取dump出dex

IDA6.8 爱加密脱壳简单示例_第13张图片

(7)

IDA6.8 爱加密脱壳简单示例_第14张图片

(8) Shift + F2打开执行脚本界面,输入脚本

IDA6.8 爱加密脱壳简单示例_第15张图片

static main(void)
{
    auto fp, dexAddress, end, size;
    dexAddress = 0xB3AA11F0;
    size = 0x4F0;
    end = dexAddress + size;
    fp = fopen("C:\\Users\\Administrator\\Desktop\\1.so", "wb");
    for ( ; dexAddress < end; dexAddress++ )
    fputc(Byte(dexAddress), fp);
}

 完!

你可能感兴趣的:(Android)