android脱壳阿里比赛,so动态调试(阿里脱壳)

安卓APP在运行时,每个进程都有单独的进程空间,这是因为每个进程都独有一个Davlik虚拟机。系统启动时会先启动init进程,init进程会启动zygote进程,该进程会为每个要启动的App进程孵化出一个Davlik虚拟机实例.之后该虚拟机实例会将要运行App的DEX文件映射到内存中。

通过虚拟机实例调用dvmDexFileOpenPartial()来解析,加载DEX文件格式.。关于DEX文件格式见博客

dvmDexFileOpenPartial的函数原型如下

int dvmDexFileOpenPartial(const void* addr, int len, DvmDex** ppDvmDex)

参数1:加载的DEX文件在内存中的基址.(也就是DEX.035)

参数2:加载的DEX文件的文件长度,

参数3:略。

73608.html

本次第一代的阿里加固主要就是将DEX文件入口隐藏,而脱壳的关键也在于找到DEX的入口.

1.首先将实验用的APK装入真机中。

73608.html

失败原因:(1)1可能可能是手机上也需要没确认。

(2)手机上需要确认adb通信。

(3)如果其他原因请确认ADB时候正常。

2.使用AndroidKillers静态分析

73608.html

入口的MainActivity被隐藏了。在程序启动时系统会创建一个application对象用来储存系统以及Activity等一些组件的信息。

在配置文件中android:name="com.ali.mobisecenhance.StubApplication" ,分析该类。

73608.html

该类你创建了三个原生函数。配置动态调试so文件环境分析。

3.将IDA的 的Android_server插件放入手机的 ./data/local/tmp文件中。

(1)找到该文件文件夹。按住shift右击选择在此处打开命令行。

73608.html

(2)执行adb push android_server ./data/local/tmp

73608.html

(3)进入./data/local/tmp文件夹中设置android_server权限为777 (可读可写可执行)

73608.html

6.启动android_server

73608.html

7.将原APK文件中解压出的so文件拖入IDA中,配置调试选项。

首先选择调试环境为ARM,然后再次选择Debbugger->Process options

73608.html

设置hostname为localhost,与port为23946.(在一些反调试会检测该端口,遇到此类反调试可以修改端口为其他)

73608.html

7.设置端口通信转发

adb forward tcp:23946 tcp:23946

7.以调试状态启动Activity

adb shell am start -D -n com.ali.tg.testapp/.MainActiity

8.IDA附加进程

73608.html

选择以调试方式启动的com.ali.tg.testapp的测试APP

73608.html

OK之后进入调试模式。断在了onload,再次启动。

73608.html

找到attachBaseContext。在Export中搜索函数名,或者搜索字符串

73608.html

找到initclass函数下断点。

启动java层调试so文件。

jdb -connectcom.sun.jdi.SocketAttach:hostname=localhost,port=8700

搜索不到所以该函数是动态注册的。搜索该字符串。

Ctrl+F在模块中搜索dvm

73608.html

双击,Ctrl+F搜索dvmdexfile

双击,下断点

73608.html

8.F9运行 9.shift+F2

static main(void)

{

auto fp, begin, end, dexbyte;

fp = fopen("d:\dump1.dex", "wb");

begin = r0;

end = begin + r1;

for ( dexbyte = begin; dexbyte < end; dexbyte ++ )

fputc(Byte(dexbyte), fp);

}

73608.html

Dump出dex文件.

参考博客:http://developer.51cto.com/art/201002/182933.html.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值