对某APP加固的一次分析

7月的壳,最后的部分未完成,断断续续弄了一段时间了,期间也是得到了一些朋友的帮助。虽然没有完全解决问题,不过我个人认为还是有分享的价值,最近要为找工作作准备了,也不知道我这水平能不能找一份android逆向的工作。短期内没有时间去弄它了,所以就发上来了。在弄这个之前,在网上看了很多相关的文章,结果没有一个是跟我这个相似的,都是mmap下断或dvmXXX下断之类的,或者几个F9什么的,老实说,我是逆向的新手,所以刚开始也试过这些函数下断,全部无效,至于几个F9,步过步入什么的,表示完全看不懂。后来也就只有硬头头皮一点一点的啃了,然后就被我啃成了四不像。??短期内我也没时间去弄它了,如有朋友弄出来了或知道的欢迎分享!即使只是个思路也好??样本信息:名称:WIFIpasswordWatch.apk来源:第三方平台目的:分析反调试手段使用到的主要工具:IDA、AndroidKiller、jeb、eclipse、jdb、readelf、Editor总结首先就是反静态分析,通过次源文件及虚拟机(我不知道虚拟机的定认是什么,这里我看那函数的功能就像是一个解析器,所以我就把它叫虚拟机了,如有错误欢迎指点)的方式来执行函数,在静态分析中完全没法看,其次是部分核心代码放在了另一个so中,然后这个so又通过手动加载的方式加载到了内存中,这样做让IDA的动态调试的难度又一次成直线上升。前面几个简单的点都是直接让程序over了,通过ida的tracing的功能然后回溯很容易就找到了检测的点。但后面的没有这类特色操作后点就难找了,只能去详细分析功能。虽然说最后核心的东西还没有分析到,不过却实学到了很多。分析:准备工作拿到一个样本的时候我不知道专业人士都是从哪里开始,我一般是习惯性的往AndroidKiller上拖,然后看看都有哪些可疑文件。在这里,结合软件本身的功能,百度了一下实际上只需要管理员权限读取/data/misc/wifi目录下的wpa_supplicant.conf文件,所以一些网络、下载管理、电话状态安装快捷图标、读取log等都是可能与软件本身无关的既然存在,那么很大可能都是一些广告平台的需要,大至看了下,主要是使用了友盟、腾讯及豌豆荚的广告平台看了下application项Application有值,且有一个成员qihoo=”activity”,这一项原先是用来反apktool的,原因是apktool解包时在资源中找不到qihoo项会报错,不过这个在最新的apktool里面似乎已经修复了,所以这里也就不深究了。一般的反dex2jar、jd-gui、jeb等这类工具的方式是查看原码或进行批量的脚本处理记录下崩溃信息,然后通过定位崩溃源来反调试,比如在代码中插入新的指令,旧的反编译器一般不识别新的指令,所以会报异常。Jeb打开后直接看attachBaseContext方法(原因是这个方法先于onCreate方法执行,如果有反调试等一般会在这里操作)这里主要进行了对libjiagu.so的加载及调用attach方法,这里的interface8和initAssertForNative方法都很可疑,interface8为Native方法,这里的native方法在so里面找不到默认的匹配方法,所以必然会调用RegisterNative方法,因为RegisterNative方法的参数有特定的格式,在so里面调试的时候注意一下即可找到相应的函数,这里就不多说了。然后这里,onCreate方法里面也有可疑因为在这所有操作之前就已经加载了libjiagu.so,所以我这里直接从so开始,说到so,一般首先想到的是init_array项,但将libjiagu.so拖到ida中时有一个问题不得不外理,如下:确定后的结果显示如下:导出表和函数表空空如也,没法用IDA进行分析(6.8的会稍好些,不过我这里6.5的android_server调试较稳定),这里的原因是elf里面的sectiontable被抹掉了(有的情况表没抹,但elf头中的偏移及num错误),因为so的加载不需要用到sectiontable,也不会把sectiontable加载到内存中,而早其的ida是通过sectiontable来读取符号等信息的,所以一般的反调试第一步就是抹掉sectiontable信息,值得庆幸的是,在programtable中有每一项的信息,这也就做为了我们还原sectiontable的依据,详细的可以参考看雪的大神们的文章







































白癜风能否彻底治愈
北京哪有治疗白癜风的医院



转载请注明:http://www.jiaju1314.com/jyqj/jyqj/8651.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了