#爱加密征文#反编译事儿【重磅推荐反编译工具Dexter】

来源:互联网 发布:sql数据库修复软件 编辑:程序博客网 时间:2024/05/21 17:35
前瞻:

之前翻译过一篇BlueBox关于反编译的文章,其中介绍了静态和动态两种。
【 ANDROID的安全性分析的挑战:在运行过程中篡改DALVIK字节码
文章链接: http://my.eoe.cn/javezh/archive/18331.html 】

翻译的不是很好,因为这类技术篇需要一定的相应基础才行,大伙凑合着看,有好的建议或者意见也欢迎提出,或者重译都可以。
关于BlueBox的介绍或者了解,移步: http://bluebox.com/

关于反编译:
活动早就开始了,现在才有时间写,写的也比较仓促 , 发现不论是爱加蜜的cto还是社友们,几乎把市面上的反编译工具,方法都说遍了,不过赘述
因为那没有意义。选几段经典的给大伙看看。此外,题外话,拿反编译去谋利,比如加广告,恶意踹改等等此类行为我是不支持的,是对别人劳动成果的窃取。
如果是想要学习框架结构,实现原理,我觉得还是可以的。当然我也鼓励一些好的APK生厂商能够愿意分享自己的技术实现原理,传道授业,分享开源精神,
这样就不用担心这担心那了。
反编译工具就那些了,常见的APKTOOL+jd-gui的组合,深点的IDA等等,比比皆是。


关于如何保护:
当然对于一些安全性高的,用户量比较大的,有着自己的特有的技术等等在内的,比如银行啦,图片处理啦,下载量大的实用软件啦,保护自己的APP还是很有必要的,基本上现在通过so去处理关键的数据交互已经能够不错的抵制一些非法篡改等等,再加上现有的为大家熟知的保护方法,能够有效的防止了反编译。当然,第三方加密平台的出现也是一种体现,软件思维的体现,节省人力时间成本,工具类出现的意义也在于此。
主要帖子,爱加蜜的cto已经归类常见的保护方法:http://www.eoeandroid.com/thread-316988-1-1.html
1.防止工具反编译
a) 伪加密
b) APK压缩包故意破坏
c) 素材中的图片故意破坏
d) 使用无效的字节码防止反编译
2. 混淆保护
a)文件混淆
3. 运行时验证
a)  签名验证的各种方法

4. 防止内存修改
a) 如何防止”八门神奇”通过内存数据


片段:APK保护方法之三:运行时验证 – Android技术验证
        运行时验证,主要是指在代码启动的时候本地获取签名信息然后对签名信息进行检验来判断自己的应用是否是正版,如果签名信息不是正版则提示盗版或者直接崩溃。
原理:APK的唯一识别是根据包名+签名,包名信息是写死在AndroidManifest.xml里面的,但是签名则是与APK绑定的,一旦APK被反编译后签名会自动消失。APK的签名需要签名文件,签名文件的md5值基本上是无法伪造成一样的。
签名验证的方法也可以细分为3种:
1)        Java 层验证
获取签名信息和验证的方法都写在android 的java层。这种保护方法保护的意义并不大,因为反编译出源码后通过关键字搜索很快就能够找到验证的代码块,稍微一修改这验证保护就完全无效了。
目前市场上使用此方法验证的应用:神庙逃亡2,qq电池管家,微信,360手机管家等
2)        服务器验证
在android 的java层获取签名信息,上传服务器在服务端进行签名然后返回验证结果。这种保护还不如在纯java层验证有用,一旦没有网络验证保护就无效了。用android方法获取的签名信息用java方法也可以获取,验证存放在服务器上也是为了把保护正确的签名信息值,但是保护的意义其实没有任何作用。同样破解后全局搜索关键字然后伪造一个正确的签名信息就可以完美破解了。
目前市场上使用此方法验证的应用:地铁跑酷等
3)        NDK技术底层获取签名和验证
通过把Context,Activity,PackageManager,PackageInfo四个对象中的一个作为参数参入底层,在底层获取签名信息并验证。因为获取和验证的方法都封闭在更安全的so库里面,能够起到一定意义上的保护作用。不过通过java层的hook技术一样可以把这种保护完美破解。 但是相比于前两种,此保护的意义和价值就更大了。
目前市场上使用此方法验证的应用:植物大战僵尸2等




工具:
如果你正好也知道BlueBox,又恰巧知道Dexter的存在,那么就可以不用理会我下面的介绍与陈述了

工具地址: 原谅我的设置回复可见,希望支持下,让更多的人知道这个工具

本帖隐藏的内容

https://dexter.bluebox.com


官方介绍:



Dexter is an interactive Android software analysis environment with collaboration features.
Analysis capabilities include static and dynamic modules, heuristic result enrichment, a flexible tagging system and an API for automated processing / extending.



大致意思呢是指它是一款互动的安卓软件分析环境,我了解了,是人工与静态分析的结合体。它呢,分析能力包含静态和动态模块,分析结果丰富,非常灵活的标签系统【链接很清晰,有点像思维导图,此类工具比如FreeMind】,以及自动化处理或者扩展的API。对于分析一些病毒软件啊,一些自己感兴趣的apk的实现原理啊等等啊还是有帮助的。


这是进入后的首页:


 



可以清晰的看到,左侧是个集合栏,我这里就拿Fubbo来分析吧【没其他意思,选择上传文件随便点了个apk】。下图是预览的大致信息,可以清楚的看到apk的基本信息,这些通过apk就可以直接获取到相关信息
 

再然后点击open就可以看到整个分析了,大的apk可能会消耗一点分析的时间。下图右侧可以看到一个大致的情况,比如用了什么权限啊,甚至自定义的权限,包含了哪些Activity啦,Service啦,Receiver啦....单个点击都可以看到比较直观的信息,为了节省篇幅,不再一一截图解释,做开发的人都看得懂,没啥英文模块需要特别解释。
同时可以注意到右侧悬浮的菜单,包含了几个大类:

1.Open package dependency graph  打开各个包依赖的思维导图,清晰啊,节省了你去反编译,用啥apktool,jdgui啥的翻来覆去看的麻烦死了
2.Open list of classes 打开class类的列表
3.Open list of strings 打开strings列表,字符串
4.Open the apk filebroswer 打开apk文件视图,其实这玩意就是解压apk后的文件视图
5. Seacrh 全局搜索,这玩意也挺重要
再往下拉,可以看到一些详细的Activity信息,再下是service,receiver等

 





随便点击一个Activity吧,可以清晰的看到整个逻辑,AboutActivity继承于SwipeBackActivity,关于这个滑动返回,是指滑动Activity返回,类似于slidingmenu的侧滑效果,Fuubo的作者已经把它开源了,不过貌似只支持高版本的,然后再是更深层次的继承,最后是android.app.Activity.再细看AboutActivity,可以看到主要结构方法,参数等等,应该都看得懂...注意下那个黑色的弹出框,decompile this class,意思很清楚就是反编译这个类,点击后
会发现,他帮你把自己通过反编译工具去做的事归纳了起来,不用再去搜索引用,然后分析代码意思,即使是混淆过的代码,至于具体样子,更多的剖析,大伙自己去试吧,处于对此款APK作者的尊重就不再详细贴图。


 



第二个呢则是加密后的APK,比较偷懒,没写啥,就空代码。试了爱加蜜的,新建了个工程,打包,签名,混淆,比较蛋疼的是上传后竟然还要审核......梆梆我也传了,不需要的。。
加密后呢,是没签过名的,需要自己重签名,我也懒,就没签名上传了,显然它也检测出了 Bad Signature。。。。原谅我的懒惰,关于梆梆或者爱加蜜的加固,网上也有人剖析了,梆梆的相关文章也有
我也对加固过的包看过了,两家加密的方式几乎是像一家的样子....不过我没更深入的去分析,所以别介意,加密的那位客服妹纸,以及梆梆那位妹子经理..
好,继续,点击open,明显,MainActivity不可点击状态,应该是加固后的软件有效的防止了此款分析工具的反编译,由此可见,加固的作用。当然我相信厉害的BlueBox团队一定会在日后的更新中去分析以及
解决这些问题,本身他们就是一个专做移动安全等分析的实验室,大伙可以关注他的blog,顺便提升英文阅读水平。

 

转自:http://www.eoeandroid.com/thread-317776-1-1.html

0 0
原创粉丝点击