360加固动态脱壳

参考文章: http://www.52pojie.cn/thread-435746-1-1.html

 

①. 运行IDA服务端并端口转发

360加固动态脱壳_第1张图片

②. 以调试方式启动app

adb shell am start -D -n com.CMapp/com.e4a.runtime.android.StartActivity

360加固动态脱壳_第2张图片

③. 使用IDA远程附加

360加固动态脱壳_第3张图片

360加固动态脱壳_第4张图片

360加固动态脱壳_第5张图片

 ④. 在libc.so中找到mmap函数设置断点,为了方便,直接设置到函数末尾了

360加固动态脱壳_第6张图片

360加固动态脱壳_第7张图片

360加固动态脱壳_第8张图片

 ⑤. 打开ddms或者Eclipse (必要,为了使用jdb命令),获取应用程序的端口号, F9运行程序

360加固动态脱壳_第9张图片

在命令行中执行:jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700    其中port=8700是从ddms中看到的。

此时程序会断下来

⑥. 多次F9后,会来到libjiagu.so模块中,到反调试的函数中将反调试去掉

360加固动态脱壳_第10张图片

360加固动态脱壳_第11张图片

360加固动态脱壳_第12张图片

360加固动态脱壳_第13张图片

 360加固动态脱壳_第14张图片

 ⑦. 将以上两处反调试去掉后,就可以只保留mmap函数的断点,一直F9了,查看堆栈直到出现

360加固动态脱壳_第15张图片

⑧. 内存观看r0寄存器所指向的地址,F8单步十几步之后,就可以看到解密好的dex文件,然后使用ida脚本 dump

360加固动态脱壳_第16张图片

static main(void)
{
  auto fp, begin, end, dexbyte;
  fp = fopen("C:\\dump.dex", "wb");
  begin = 0x5E650000;
  end = 0x5E650000 + 0x0004BC38;  //偏移0x20处,取4字节为dex文件大小
  for ( dexbyte = begin; dexbyte < end; dexbyte ++ )
      fputc(Byte(dexbyte), fp);
}

⑨. 使用工具查看dump.dex文件或者重打包apk文件

360加固动态脱壳_第17张图片

 

样本是用易安卓写的。

 

样本链接: http://pan.baidu.com/s/1dEpUTXn

密码: rp6u

你可能感兴趣的:(360加固动态脱壳)