在看雪潜水也好久了,也关注过各位大大的各种加固工具的技术贴,受益匪浅。下午有人问我,了解过聚安全吗?我愣了下,说没有,又问为什么没了解过?我着实没考虑过这个问题,想了想好像只能用要桑课和做实验室项目来安慰自己了,可这不是我想要的呀,于是我决定试着分析下,并通过看雪这个平台和大家交流下,水平有限,中间也会遇到各种未知的槛,望大大们不吝赐教。 分析过程: 原始apk是非虫书上的例子debugjniso.apk,加固的版本是找到的五月份加固的样本(能找到归功于做科研培养的良好的样本收藏习惯)。 1. 利用APKTool反编译,发现是可以的 2. 解压后比较下加固前后文件夹 首先lib目录下增加了四个so文件,源apk中的libdebugjniso.so没改变,显然没对so进行加壳。 另外AndroidManifest.xml和dex文件改变了,估计留在外面的dex是壳,后面再分析这两个文件。 3.Dex2jar生成jar包,jd-jui打开查看 这里只看到根据cpu类型加载不同的so库,arm下是libmobisec.so,x86下是libmobisecx.so,另外声明了两个jni函数,attachBaseContext和onCreate()。 查看反编译后的smali代码,也确实是这样,dex2jar没受到影响。 4.安装运行,单进程。(之前受梆梆加固多进程反调试荼毒太深。。) 5.尝试附加一下。用IDA attach下试试,what?这样就附加上了?一定有阴谋。看看先~ 6.不明觉厉,不管了,先试着dump dex。 然后找到应用进程,查看maps并dump dex 打开查看,找到了dey和dex,好高兴,准备从里面取出dex. 等等,不对啊,内存dump的这个dex和外面的dex壳很像呀,比较下还真是一样。。。 那真正的dex在哪里?回头查看刚才忽略的so,发现libmobisecy.so其实不是一个so,如图 用IDA打开发现,libmobisecy.so其实是个存储了dex的zip. 7.解压libmobisecy.so后得到一个dex,Baksmali反编译,得到如下: 对比源apk的dex反编译目录 现在一个一个文件夹分析。 先比较android目录,和预想的一样,加固前后没变化。 分析a目录,里面就一个an.smali,查看代码,发现了一个testdex2jarcrash函数,后来发现pnf里的exit.smali与an.smali是一样的。 看名字好像是用来干扰dex2jar的,验证了下还真是: (下图是so中获取的dex转成jar查看,有testdex2jarcrash) dex2jar打出的log如下: com.googlecode.dex2jar.DexException: while accept method:[La/a/a/a/a/an;.testdex2jarcrash(Ljava/lang/String;Ljava/lang/String;)V] at com.googlecode.dex2jar.reader.DexFileReader.acceptMethod(DexFileReader.java:701) ......省略 Caused by: com.googlecode.dex2jar.DexException: while accept parameter annotation in method:[La/a/a/a/a/an;.testdex2jarcrash(Ljava/lang/String;Ljava/lang/String;)V], parameter:[0] at com.googlecode.dex2jar.reader.DexFileReader.acceptMethod(DexFileReader.java:670) ... 9 more Caused by: java.lang.RuntimeException: EOF at com.googlecode.dex2jar.reader.io.ArrayDataIn.readUByte(ArrayDataIn.java:131) ......省略 ... 9 more 这个很熟悉呀,之前<<Android Dex攻防>>中提到过,看雪链接如下: http://bbs.pediy.com/showthread.php?t=177114 因此去除a目录和pnf目录(实验中发现其实只去除a目录即可,pnf其实没影响,不知道为什么),效果如下: Pnf目录提过了,就不说了,不过路径很幽默,就是下面这个 —。—! xxx\pnf\this\boject\does\not\Exist.smali 然后开始看com目录,发现许多方法中抛出RuntimeException异常,如图 另外在DebugjnisoActivityn中发现许多native函数的声明,如图 今天的分析先到这,对基本确定的小结一下: 1.加固后外面的是个壳dex,真正的dex放到libmobisecy.so中了。 2.解压缩后得到的dex不能直接dex2jar,去掉其中的a目录和pnf目录然后回编译就能正常了。 准备明天分析下RuntimeException作用、native函数的作用和libmobisec.so。之前没接触过RuntimeException,准备明天现学下,希望能得到指点。其他方面也希望大大们不吝赐教
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课