360壳分析,手把手教你操作

安卓/手游逆向交流群963612891

先直接看这个so库:
360壳分析,手把手教你操作_第1张图片

拖入IDA静态看一下:发现看不到什么信息,原因很简单,因为被处理了;
360壳分析,手把手教你操作_第2张图片

怎么办呢?通过010进行对so简单修改:
拖入IDA,使用ELF.b进行识别:

360壳分析,手把手教你操作_第3张图片
识别效果:
360壳分析,手把手教你操作_第4张图片

头里面描述了有关节的信息:
360壳分析,手把手教你操作_第5张图片

先修改节的偏移:360壳分析,手把手教你操作_第6张图片

这个三个:
360壳分析,手把手教你操作_第7张图片

保存之后,然后继续拖入IDA:发现没报异常,可以识别一些东西:
360壳分析,手把手教你操作_第8张图片

为什么这样就能成功呢?因为我们把节有关的信息去除之后,他开始解析段的信息;
看导出函数列表,发现函数名称也是被处理过的,但是JNI_Load还是可以看到的:

360壳分析,手把手教你操作_第9张图片
双击过来,还是可以看到一些信息的;
360壳分析,手把手教你操作_第10张图片

ctrl+S ,来到这里,看一下:
360壳分析,手把手教你操作_第11张图片

点击sub_1AD8:发现也没什么信息~

360壳分析,手把手教你操作_第12张图片
直接F5,看JNI_Load的信息:
360壳分析,手把手教你操作_第13张图片

修改一下参数:

360壳分析,手把手教你操作_第14张图片

点进去看一下下面的那个函数也看不出来什么;

360壳分析,手把手教你操作_第15张图片

双击进去后
继续跟
发现是一个switch循环;

360壳分析,手把手教你操作_第16张图片

F5一下:
360壳分析,手把手教你操作_第17张图片

分支挺长的,看不出来啥;直接动态分析;

这个函数的分析,同样的在open函数下断:
F9之后,加载进来这个so:
360壳分析,手把手教你操作_第18张图片

linker处下断:
360壳分析,手把手教你操作_第19张图片

libdvm下断:

360壳分析,手把手教你操作_第20张图片

F9后,linker处断下:
360壳分析,手把手教你操作_第21张图片

F7进去,发现没什么;

360壳分析,手把手教你操作_第22张图片继续F9linker断下,然后F7:

360壳分析,手把手教你操作_第23张图片

F7往下走,发现有个函数:

360壳分析,手把手教你操作_第24张图片
进入后来到libdvm.so,与getenv有关;

360壳分析,手把手教你操作_第25张图片

回来后,继续F7,这里有个函数:

360壳分析,手把手教你操作_第26张图片
F7进去:往下跟:

360壳分析,手把手教你操作_第27张图片

过来后:

360壳分析,手把手教你操作_第28张图片
F7往下,这里有个函数,

360壳分析,手把手教你操作_第29张图片
进去:F7往下,发现这里是一个循环:一直比较R2和R3的值;

360壳分析,手把手教你操作_第30张图片

F4后F7往下走,来到了跳转表这里:

360壳分析,手把手教你操作_第31张图片

继续F7往下,来到了case26分支:
360壳分析,手把手教你操作_第32张图片

一路F7往下,这里有一个BLX函数:

360壳分析,手把手教你操作_第33张图片

F7往下,同步R1寄存器;发现有关键字眼;
360壳分析,手把手教你操作_第34张图片

再往下是一个循环,同时同步R3寄存器,是在解密字符串:

360壳分析,手把手教你操作_第35张图片
再往下,又一个亦或循环:通过R2寄存器

360壳分析,手把手教你操作_第36张图片

继续F7,

360壳分析,手把手教你操作_第37张图片
继续F8往下:来到这里:

360壳分析,手把手教你操作_第38张图片

继续F7往下;这里是一个循环,一直在读取,然后一直比较R0的值;

360壳分析,手把手教你操作_第39张图片

如果这里BEQ相等的话,就会直接跳到这里:

360壳分析,手把手教你操作_第40张图片

上面的是从linker到JNI_Load,说明在linker里面没有进行操作,所以,可以换一种,直接在libdvm哪里找到JNI_onload也行;

重新使用一种方法,使用open函数,往上回溯;
跳到open函数, 然后F2下断,然后F9运行,然后Ctrl+F7回溯:
同步R0窗口,出现这个,说明在遍历tracepid,

360壳分析,手把手教你操作_第41张图片
继续回溯:

360壳分析,手把手教你操作_第42张图片

继续回溯:
360壳分析,手把手教你操作_第43张图片

为什么之前又一次运行道这里程序就崩溃了?
原因是程序此时R0寄存器的值:
360壳分析,手把手教你操作_第44张图片

这个值什么意思?
我们先把4A24转化成10进制:‭18980‬
执行一个adb命令:这个就是当前as的进程;说明他当前已经检测到我们在调试该程序;
360壳分析,手把手教你操作_第45张图片

所以我们需要把这个反调试干掉:

360壳分析,手把手教你操作_第46张图片

也就是说,case26就是反调试的分支;
360壳分析,手把手教你操作_第47张图片

改了之后继续往上回溯:

360壳分析,手把手教你操作_第48张图片

继续回溯,此时来到这个位置;

360壳分析,手把手教你操作_第49张图片
继续 往上回溯:
此时R0和0进行比较,此时R0的值依然是as的进程号;

360壳分析,手把手教你操作_第50张图片

如果不相等,就跳转到这里

360壳分析,手把手教你操作_第51张图片

点进去,发现是kill:

360壳分析,手把手教你操作_第52张图片

会来,往上p一下,是一个函数,

360壳分析,手把手教你操作_第53张图片

进去:p一下:
明显和这个就是反调试的逻辑,这个分支代码比较多;
360壳分析,手把手教你操作_第54张图片

我们怎么修改呢,只需要让这个函数返回固定的值即可;
修改代码之前,先把这里置零;
360壳分析,手把手教你操作_第55张图片

同步一下反汇编窗口,点击前面的这里会显示下面对应的十六进制:
360壳分析,手把手教你操作_第56张图片

这个是arm指令,
执修改指令:第一条:

360壳分析,手把手教你操作_第57张图片
选取后8位,F2进行修改:

360壳分析,手把手教你操作_第58张图片

继续修改第二条:

360壳分析,手把手教你操作_第59张图片
修改后效果:

360壳分析,手把手教你操作_第60张图片

过掉反调试后,在mmap处下断:mmap尾部处也下一个断点;

360壳分析,手把手教你操作_第61张图片

好,F9运行程序:使其在mmap处函数段下来;
360壳分析,手把手教你操作_第62张图片

这里mmap如何查看呢?至二级F9运行到mmap函数尾部,然后F7进去下一步,就是不同的函数调用的地方、遇到libdvm.so的不用管,h直接F9继续在mmap处蹲下,只观察jiagu.so;

注意在mmap处的操作:不能直接F9从头部执行尾部断下,要单步跟一下,即将进去的so也要单步跟一半,然后在F9;
继续执行上面操作首先会在这里出现apk信息:

360壳分析,手把手教你操作_第63张图片
继续操作,出现了这个:
360壳分析,手把手教你操作_第64张图片

继续:下面R0窗口出现了dey036;

360壳分析,手把手教你操作_第65张图片

继续操作,这里出现了与dex有关的信息:

360壳分析,手把手教你操作_第66张图片

看他地址,我们来到他的区间:

过来后,这几就是他解密后的dex
360壳分析,手把手教你操作_第67张图片

这里是这个dex文件的大小:

360壳分析,手把手教你操作_第68张图片

知道起始地址和大小后,使用脚本:

360壳分析,手把手教你操作_第69张图片

dump可能需要时间;

也就是说,出现相关dex文件的时候,如果没有出现太多信息,我们可以ctrl+s查看模块信息,一般他会把dex相关信息放到其他区域;

一般会把解密后的dex放到内存里面,比如这个是放在debug里面:

360壳分析,手把手教你操作_第70张图片
好,找到dump出来的文件;

360壳分析,手把手教你操作_第71张图片

拖入jdax,这就是一些相关的代码;

360壳分析,手把手教你操作_第72张图片

点看看一下相关的逻辑,发现都有,说明脱壳挺成功的;

你可能感兴趣的:(Android逆向,360加固,脱壳)