一段时间的研究下来,对安卓的整个逆向过程除了加固和一些独特的混淆外基本有个认识。这段时间算是真正的从认识到尝试去了解smali,包括期间有想为逆向开发一个从smali2java,java2smali的可视化实时工具,不过意识到时间问题,还是暂时先放弃。不过也出了自己的第一款个人软件,lexgetapp,算是逆向的第一个跨步,后期会继续为它增加一些功能,来帮助自身做安全,逆行的一些工作,让工作更加顺利。
我这里基本对工具进行一些收集和记录
逆向工具集合]
android killer
apktool
apkaid
smali查看与分析]
jadx
smali2java-gui
其实整个从逆向到注入自己的代码过程非常的明晰。
1,反编目标工程
2,编写自己的工程,尽量只留下一个程序入口,把任务都设置在某个intent,或是某个异步操作。
3,使用某些工具获取注入目标。
4,在注入目标插入自己工程的调起语句。
说起来很简单,可实际会遇到很多问题,做一些简单说明。
1,阅读问题
smali语句的可读性不是很好,所以需要jadx辅助查看去理解源代码的一些操作与逻辑或者进行smali的语法学习。
2,代码插入问题
其实直接复制包很容易产生很多毛病,比如65535个函数超限的问题,就需要新建smali_classes2文件夹来解决问题。
3,资源问题
我自己的工程,我会尽量使用代码来创建图形和界面,就是为了避免资源id冲突问题,每一个安卓R资源的引入和定义都会出现在string.xml以16进制留存,不可重复,不同种资源必须放在不同位置。甚至不同系统版本对于某些资源的引用都会产生问题。
最后,其实整个东西都很简单,但是为了避免记不住还是做了这个记录。