首页
社区
课程
招聘
[讨论](安卓)有没有人有兴趣做一些基础性的项目,欢迎讨论!
2014-1-5 12:10 8461

[讨论](安卓)有没有人有兴趣做一些基础性的项目,欢迎讨论!

2014-1-5 12:10
8461
论坛上牛人很多,但在我看来,一个东西如果要成功,不光是你牛就能做到的,还需要一种眼光,一种时机。

我举个很简单的例子。看雪上有个大牛开发了一个和OD差不多(甚至还要强?)的调试器MDebug,他的水平是毋庸置疑的,但是!既然OD已经足够好用了,重复造轮子的意义何在?当然,对于开发者自己的提高是极有好处的,能不能福泽众人就要打个问号。

再谈下安卓。我认为安卓是一个很奇怪的系统。它的api是建立在java上面的,下层支撑的是so库的实现。这意味着,从逆向的角度来看,安卓和windows(以及linux)有着极大的区别:后者的hook可以直接从native入手,因为api就是native的;而前者的系统在native层面无法做出什么保证(也许除了libc之外)。

也许你会说,我已经hook一个so里面的函数成功了啊,效果很好。我想请你再认真想一下,你真的成功了吗?由于工作的关系我可以接触到大量的安卓手机,我曾经hook过libandroid_servers.so,我测试了10台不同的手机都没问题,但是到第11台时,系统直接挂掉。无数人,无数厂商都想要编译自己的rom,各种不同的native实现,一个函数甚至只要多加一个参数,你就完蛋。

这就是安卓的碎片化,一个比'dll hell'还要可怕的地狱。

所以如果你想要你的修改比较通用,那么最好从java层入手。而java层的关键,是smali语言。那么我的理解,分析smail的基础库,就是一项非常有实际意义的工作。

目前有smali&baksmali开源项目,但是这个库是基于java的。我觉得它的粒度不够细,而且这种方式我不太喜欢,有点笨重,通用性不好,如果我希望在手机上直接调用该如何弄?想用C#来调用又该如何?分析文件结构是c的强项,而且c库的通用性才是真正最好的。如果能有一个基于c的smail库(csmali),那么应该是大有前途的。

试想,在你的应用里带上一个100k的csmali.so,就可以在手机上直接反汇编分析和修改xx.dex,yy.odex,难道不是一件喜大普奔的事?

以上是我的一点想法,欢迎大家各抒己见!

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
点赞1
打赏
分享
最新回复 (9)
雪    币: 1413
活跃值: (401)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
Claud 6 2014-1-5 13:10
2
0
两个角度吧。

Dalvik层的instrumentation,可以看下xposed(版面上有很多资料)、ddi/adbi、Cydia Substrate。

另一个角度,把各类工具集移植到Android中,也没什么问题,参考一下各类类似于AIDE、Android Emulator Terminal一类的项目。

在手机上对dex做重打包,而且自己去实现基础库,我觉得才是另一种形式的重造轮子吧。
雪    币: 257
活跃值: (44)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
gemo 2014-1-5 13:27
3
0
csmail想要达到的目标是不需要重新打包

我用native的elf文件举个例子。baksmail实现的功能,就好比是将so还原成c代码,然后你可以修改c代码,然后再重新编译成so。这种方式对逆向来说不是特别适合,太“伤筋动骨”了,要做到通用性,一定要选择改动最小的方式。

csmail的目标是分析出dex和odex的基本结构,就好像一个基础的elf库,分析出so文件的结构,然后对感兴趣的位置进行进一步分析后直接修改,不要重新构建!
雪    币: 479
活跃值: (273)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
hellopen 2014-1-5 13:56
4
0
csmail 蛮不错的,支持楼主
雪    币: 1413
活跃值: (401)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
Claud 6 2014-1-5 14:17
5
0
C/C++写的dex格式解析库蛮多的啊,比如Android源码里、androguard里、radare里都有。。

(其实我感觉自己还是没真正catch住楼主的想法,抱歉……)
雪    币: 257
活跃值: (44)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
gemo 2014-1-5 14:34
6
0
是有吧,但是没有独立出来,没有提供接口?

我举一个实际的例子,简化说明如下:

一个app启动时会弹个框,说"hello world"。你很讨厌这个东西,想把它干掉。无疑,这个弹框就是odex里面的几条smail代码,nop掉就可以了。但是如何定位呢?

目前通行的方法是,用baksmail解包成java代码,修改之,再重新打包。但是这么做有两个问题:
1 odex的重新打包可能会依赖到一些其他的文件
2 重新打包这个动作太"重",兼容性无法保证

那么我就想,能不能弄一个更基础的smail库,作用是将odex的各个部分解析出来,然后做进一步操作。比如在这里例子中,库可以列出所有调用了alert的位置,我们从中找到参数为"hello world"的那一个,然后库可以告诉你这个调用在odex中的偏移,于是我们可以直接到偏移处改之为nop指令。这种方法比重新打包风险要小得多。

当然,这只是用法之一!
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wapjia 2014-1-5 17:14
7
0
手机上的字节码编辑器好像跟楼主说的有点像。
雪    币: 28
活跃值: (75)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
往来一气 2014-1-5 17:41
8
0
这个dalvik字节码编辑器可以做到吧
雪    币: 213
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jasonzhou 2014-1-6 09:49
9
0
这个想法可以用XPosed来实现,但是楼主的意思应该不是想通过hook,而是通过patch
C来Parse dex是很容易的事情,但是楼主应该是想实现一套通用的修改Dex的框架
但是问题是,怎么确定你要Patch的target,听楼主的意思应该不是通过API,而是行为吧?
如果是通过行为,就无法实现通用,所以又回到了XPosed的基于App的方式了。
雪    币: 257
活跃值: (44)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
gemo 2014-1-6 10:21
10
0
dalvik字节码编辑器 貌似和我说的很接近了,待我去研究研究!
谢谢各位的建议!
游客
登录 | 注册 方可回帖
返回