利用IDA学习一个简单的安卓脱壳

这是看别人的文章学习的,当然还有加点自己的思考,截图用自己的,这样的学习才有效果啊

学习附件及文档:(这是别人的)http://pan.baidu.com/s/1nuyxc9N 密码:d29f


本文链接:http://blog.csdn.net/u012763794/article/details/52511788

原理篇

dvmDexFileOpenPartial这是函数是关键,据说在这下 断点就可以了,看名字就是虚拟机去打开Dexfile的意思,应该那时已经解壳完成了吧


函数原型:
int dvmDexFileOpenPartial(const void* addr, int len, DvmDex** ppDvmDex);
第一个参数就是dex内存起始地址,第二个参数就是dex大小。所以在这个函数下断点可以直接dump出明文dex.

为了深入学习我们去看看安卓源码 可怜,这个参考底部有个大神的
这个应该是优化dex的,odex相关的东西,小白我不懂的

这里分别对三种不同类型的文件做不同的处理,传进去的参数是--dex就走中间那一步了,我们跟进去

根据log信息,我们知道,显示初始化VM虚拟机(应该是dalvik虚拟机吧)
跟着就执行优化,我们看看那个优化

可以看到上面的英文注释:重写文件,字节重排,结构重排,类验证,字节优化都在那个rewriteDex函数中,优化成功下面才去调用我们的dvmDexFileOpenPartial
可以看到第三个参数为NULL
既然这样,我们继续跟进


可以看到里面调用了dexFileParse,就是解析dex文件的了,既然都开始解析dex文件了,那么壳肯定已经对dex解密完成了,不然也无法解析啊


顺手简单看看是如何解析

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值