学生编程讨论吧 关注:4,066贴子:13,880
  • 2回复贴,共1

最艰难的时刻的自我学习审视,总结及规划

只看楼主收藏回复

学习安卓逆向差不多有一段时间了,之前重心都放在ctf的,大概是疫情后吧,差不多重心就慢慢转移了,原因是我发现必须要转变了。
这次,我也是对我四个多月的安卓逆向学习进行了一些总结,自我的审视,以及一些未来的规划,然后想了一下,自己既然总结了,不如发出来,让同学们也能做一些自己的思考。
学习过程:像我的话,逆向题型win,Linux,Android都会涉及到,比较杂。首先就是看书刷视频,看文章,看帖,复盘,然后差不多了就去实战一下,找app去分析和逆向。收货最大的时候是在刷视频和实战部分,因为会有各种疑问,莫名其妙的问题,这个时候带着问题去解决会非常有成就感,兴趣也是这么慢慢培养来的,随着能解决的疑惑越多,成就感和新思路等因子会越多。有些app比较简单,有些企业版的加固难,目前水平不行就带着问题放那里,做好标记。然后再去看资料视频,不停的带着问题去研究,这个过程能让我学到好多新的知识,或者拓展到好多新的工具,再回过头去分析,可能之前的问题迎刃而解,好几个都是这样。
常用工具:逆向分析过程的话,IDA,JEB,frida,jadx,charles,还有MT管理器几个工具都很常用,java层的分析是jeb,jadx还有frida互相配合进行静态分析和动态调试以及hook。so层的就是ida,静态分析比较困难就动态调试,大部分时候都先用frida hook libart跑一下,打印参数,获得注册函数名称地址,还有就是动态调试过程中有时候需要dump下来dex文件和so文件,会使用idapython脚本和idc脚本。


IP属地:河南来自Android客户端1楼2022-06-15 14:50回复
    frida hook和脱壳:frida是我很喜欢的一个工具,大部分时候我不会先选择进行动态调试,而是使用frida进行hook,在java层操作比较熟悉一些,在so层自己尝试的少。
    frida在so层的操作我主要就是用别人的项目,比如在so文件之前,先使用fridahooklibart工具来一把梭,可以打印出so的名字和函数的偏移地址。再比如脱壳的时候dex整体dump操作,我会尝试用fridaunpack或者fridadexdump来进行操作。前者是通过hook住libart.so库的一些函数来进行对dex文件的整体dump,也就是最常见的脱壳点opencommon或者openmemroy,后者就是通过内存搜索dump对dex文件进行整体dump。在不考虑整体指令抽取的情况,这两个工具是很典型的dex文件整体dump思路。
    然后关于脱壳了解到的还有像fdex2采用的思路是对类java.lang.classloader的loadclass函数进行hook获得返回的class对象cls,再通过java.lang.class类的getdex方法和com.android.dex.Dex类中的getBytes函数完成对内存中的dex进行dump。像这个思路也是能够frida很简单的代码能够实现的。
    然后就是针对指令抽取壳,指令抽取壳我也只是停留在学习理论知识上,没有真正实战过,不过我下一个重点计划也是学习对抗指令抽取壳。
    这里也说一下我不熟悉的东西,也是我接下来的规划中的东西。大的方向就是安卓系统和她的源码相关东西,我打算从加固加壳原理的实现和脱壳机的实现,以及frida对原生层的hook作为三个点去出发。


    IP属地:河南来自Android客户端2楼2022-06-15 15:05
    回复
      ELF文件和DEX文件:我对ELF文件的学习,首先是对于它结构的了解,ELF头部-ELF header,程序头部表-program header table,还有节区头部表-section header table,然后就是节区-section,和段-segment,用010editor的elf模板来学习的话就是十分清晰,代表哪些信息和相应的地址就非常清楚。
      然后我觉得对ELF的学习最重要的就是理解segment和section是个一体两面的东西,对应的是两种视图,一个是链接视,一个是装载视图。
      像ELF文件加载到内存中的是按照segment加载的,有着load属性的segment才会被加载内存中,我对这个的深刻认识是在一次分析百度加固过程中需要dump解密后的so文件并修复后产生的。
      dump下来的内存中的so文件拖进IDA里面是分析不了的,这个时候就想着修复他,然后加深对ELF的理解,问题出现在内存中dump下来的so文件只是完整的so文件中有着load属性的segment,其他部分是没有的,然后这个修复办法就是把原来的so文件除了load属性的segment的部分都添加到dump下来的so文件中,然后这个时候再用ida分析就是可以了。
      然后关于ELF文件还需要理解的就是.init了,分析so文件首先是看.init里面有没有函数首先执行,很多时候这里也会进行解密和其他的一些操作,分析完后就是找JNI_Onload函数了。
      然后是关于so文件混淆处理,ollvm,花指令,表跳转,反调试,这方面我分析的少,以后会找一些样本进行强化。
      对ELF逆向过程中深刻感受到了C语言的重要性,同时有时候在查看安卓源码过程中感觉到阅读吃力,也决心要加强对C语言的编程能力!
      DEX文件,我只是开始理论学习的时候简单的使用了010editor学习了他的结构,后面就是再学习接触到指令抽取壳,关注的就是encode_method这个结构体,里面的code_item中有着方法的代码信息,指令抽取就是把这里给抽取了,这样对dex文件的整体dump就没有作用了。


      IP属地:河南来自Android客户端3楼2022-06-15 16:05
      回复