Android脱壳圣战之---如何脱掉爱加密家的保护壳

 秒速赛车     |      2019-12-08 10:34

  即日咱们来看一下正在领略了破解三部曲之后,奈何初阶脱掉各个市集中的apk壳,合于破解三部曲正在之前仍然先容了:

  正在看完这三篇作品之后,咱们初阶操作奈何破解市集中的加壳计划,现正在市集中对比时兴的加壳平台就那么几个:爱加密,梆梆加固,360加固,腾讯加固等,所今后面会逐一先容奈何脱掉这些平台的壳。之前也说过现正在加固的计划大要思绪都是:把源apk举办加密拆分担束,然后正在套一个表部的壳Application做少少初始化操作,譬喻解密apk,动态加载运转即可。可是咱们仍然明白了奈何去破解那些加固的apk了,即是利用IDA给dvmDexFileOpenPartial函数下断点,然后dump出内存中的dex数据即可。由于内存中的dex一定是解密之后的,以是大要思绪明白了,可是这些加固平台也有对策,他们会把做少少反调试操作,对so文献举办殽杂加密等,让咱们的调试变得对比困穷。这才是咱们脱壳的阻挠地方。

  为了脱掉他家的壳,秒速赛车信誉平台咱们得起初有一个案例措施,这个对比纯粹,咱们我方弄一个demo措施,然后去他家的网站上加固一下,取得加固之后的apk,然后这时分咱们初阶破解了,遵守常例:第一步:解压apk,看看大要的目次,取得classes.dex文献,然后用dex2jar+jd-gui取得

  看到,这里唯有Application的壳,并且这个是爱加密加固之后的特征,都是这两个Application的。

  ###领会一下爱加密的加密流程也是国际常例,爱加密把咱们的源措施举办加密操作然后隐蔽到了一个地方,正在之前破解加固apk的那篇作品中也说过了,隐蔽的地方就那么几个:assets目次、libs目次、我方的dex文献中

  多了这个东东,猜念这个或许即是管束之后的源apk了。咱们正在AndroidManifest.xml中看到了入口的Application类,先来看这个类

  这里寻常都是正在attachBaseContext这个设施中举办操作的,这里的机缘对比早,咱们看到起初会移用loadLibs设施举办加载libs:

  这里咱们可能看到了,从assets目次下把爱加密添加的两个so文献:libexec.so和libexecmain.so拷贝到利用措施的files目次下,咱们可能去看看assets/ijm_lib目次下的so文献:

  到这里loadLibs设施就践诺完了,下面就初阶移用NativeApplication的load设施举办加载数据,连续看NativeApplication类:

  这里会初阶从利用措施的files目次中加载这两个so文献,并且load设施也是一个native设施,咱们连续看看这两个so文献实质:咱们起初用IDA翻开libexecmain.so文献,可是展现,他内部并没有什么主要消息,连JNI_OnLoad函数都没有东东

  擦,怜惜的是,翻开提示so文献样子谬误,到这里,咱们就猜到了,这个so或许被加密管束了,elf样子改了,合于so奈何举办加密操作的,不领略的同砚可能看这里:

  现正在可能百分百确实定,这个so文献被管束了,段样子被批改了。咱们没步骤领会so文献了,当然这里咱们可能正在dump出内存中的so文献,然后正在领会的,可是这个不是即日诠释的要点。咱们先领会到这里,也明白了爱加密的大要加密流程。

  好了,到这里,咱们差不多领会完了爱加密的加密流程了:1、遵守国际常例把源apk举办加密管束存放正在一个地方,通过领会猜念是assets目次下的ijiami.dat文献2、增添壳Application:SuperApplication类,正在这个壳的attachContext设施中,苛重做了两件事:1》第一件事是把assets/ijm_lib目次下的两个so文献copy到措施的files目次中;2》第二件事是移用NativeApplication的load设施,正在这个类中同时也把上面的两个so文献加载到内存中3、对apk的加密操作都是放正在底层的两个so文献中操作的,咱们通过IDA去领会这两个so文献之后,展现主题性能的so文献被加密了,IDA翻开是看不到整个消息了到这里,咱们明白爱加密加固之后的特征是:正在措施的assets目次下多了一个ijiami.dat文献和两个so文献,同时这两个so文献被加密管束了,添加破解难度。

  上面就纯粹领会了爱加密的道理和流程,可是咱们没有连续往下面领会了,由于这个不是咱们即日诠释的要点,咱们即日的要点是奈何脱掉爱加密的壳,那么仍然初阶说到的,脱壳的主题就一个:给dvmDexFileOpenPartial函数下断点,dump出内存的dex文献即可,那么下面咱们即是用IDA初阶脱壳操作了:

  这里的包名和入口Activity都可能正在上面反编译之后的AndroidManifest.xml中找到

  正在第三步取得相对地方:4777C+415BB000=4160277C 取得了dvmDexFileOpenPartial正在内存中的绝对地方

  咱们一同点击运转按钮,明白运转到dvmDexFileOpenPartial处的断点,可是怜惜的是,这里咱们碰到了谬误:

  咱们正在从头试验一次上面的流程,初阶调试,可是谬误是一律的,好了,到这里咱们就立马念到了,之前说的IDA调试so的那篇作品碰到的阿谁题目:当时咱们也是碰到这个情形,正在没有运转到咱们下的断点处,就退出了调试页面,原本这个是现正在加固平台需要采选的一种式样,原本反调试道理很纯粹,即是正在措施运转最早的机缘譬喻so加载的时分即:JNI_OnLoad设施中,读取本经过的status文献,查看TracerPid字段是否为0,借使不为0,那么就表现我方的经过被别人跟踪了,也即是attach了,那么这时分立马退出措施,下面咱们利用IDA正在attach经过得胜之后,查看本经过的status消息:

  看到这里的TracerPid为11340,不为0,表现被11340经过attach了,那么咱们可能查看一下这个经过是谁:

  好了到这里,咱们可能看到爱加密做了反调试检测,可是遵守之前的那篇作品中,咱们可能给JNI_OnLoad函数下断点,然后找到检测代码,把对应的arm指令改成空指令,检测失效了,可是这里咱们明白爱加密的两个so文献被管束了,IDA没法领会了,那么这里咱们该何如办呢?奈何应对反调试呢?原本咱们可能借帮IDA可能批改寄存器和内存数据的特征来做到?起初咱们上面领会了反调试的道理,寻常正在native代码去做检测的话,都是用fopen体系函数翻开status文献,然后用fgets函数读取一行的实质,这个是国际常例的,操作文献都是用的fopen函数的

  好了,那么这里思绪就有了:既然反调试一定用到了fopen和fgets这两个函数,那么咱们直接像给dvmDexFileOpenPartial下断点的式样一律,给这两个函数下断点,然后运转到fgets断点处的时分,展现借使是读取TracerPid这行实质的时分,就初阶批改内存实质,把TracerPid字段的值改成0,或者批改R0寄存器的实质,跳过反调试检测

  这两个函数是正在libc.so文献中的,咱们可能把筑造的/system/lib/libc.so利用adb pull到当地即可,然后用IDA取得他的相对地方,正在调试页面取得基地方,然表态加取得绝对地方,跳转即可,可是这里无须这种庞大的式样,有两种式样可能举办跳转:第一种式样:正在Modules界面,找到libc.so,然后正在找到这两个函数,就可能取得他们的绝对地方了

  好了到这里就给这两个函数下好了断点,当然这里还需求给dvmDexFileOpenPartial函数下断点,十足弄好了之后,这时分咱们再次运转:

  停正在了fopen断点处,咱们利用F8单步骤试,看到R7寄存器中的实质是/proc/...,咱们直接点击R7查看完全实质:

  实质有点长,大致的实质是:/proc/self/cmdline.debug.atrace.app_cmdlines,这个是干什么的?

  展现没有这个文献实质,唯有cmdline文献,可是这里先不管他了,咱们明白这个一定不是读取status文献的,那咱们直接略过这个断点,点击F9运转到下一个断点,中央历程先纰漏,一同F9,直到运转到了fopen这个断点:

  到这里,咱们明白了,初阶读取status文献的每行实质了,可是到TracerPid那行还要连续践诺5次fgets函数,以是还会进入5次断点,为了节俭时刻,这里点击5次F9,直接运转到读取TracerPid那行的实质的fgets断点处:

  看到了症结的实质了TracerPid字段了,这时分,咱们翻开Hex View 查看16进造的内存数据:

  这里即是TracerPid字段正在内存的地方,记载一下,然后正在Hex View页面中利用G键,举办跳转,这里必定要预防是正在HexView,而不是调试页面,调试页面利用G键跳转到的是指令地方了。

  好了,这里咱们看到了TracerPid的内存实质了,这里咱们就初阶批改吧,采选咱们要批改的实质:是11340那里:

  这里的值仍然被改成了0,以是这里就骗过去了。连续运转,咱们会展现,又进入了fopen函数的断点处,并且查看仍然读取status文献,这个也欠好奇,由于是反调试检测一定是一个轮训机造的,以是一定会再三的读取的这个文献,fopen走多次也是平常的,可是这个反调试一定是正在子线程的,以是只消到了主线程中解密dex文献就一定到了dvmDexFileOpenPartial,以是这里会多次反复上面的操作,批改多次TracerPid的值,这里就不正在演示了,我正在操作的历程中批改了三次,当没有正在走fopen函数的时分,碰到了这个谬误,这里分歧怀,直接点击ok就可能了。

  到底到了咱们念要的地方了,到这里就好办了,直接点击Shirt+F2,翻开剧本运转窗口,运转下面剧本:

  把内存中的dex保管到F:\dump.dex中,这里不再注释了,之前的一篇作品仍然先容过了,这里R0寄存器即是dex正在内存中的开始地方,R1寄存器即是dex文献的巨细:

  咱们取得了内存中的dex数据之后,可能利用baksmali器材转化成smali源码,查看代码逻辑即可,这里不再演示了。

  把这段实质删除,借使有我方的Application的话,就改成我方的Application即可,同时删除assets目次下面的文献。咱们把上面取得的dump.dex改成classes.dex然后直接用压缩软件,更换未签字的apk中的dex文献即可

  可是正在上面领会了爱加密的加固流程之后,展现他做了这些事:1、爱加密加固之后apk目次蜕变把源措施apk加密管束放到了assets目次下的ijiami.dat,也同时正在assets\ijm_lib目次下增添两个so文献:libexec.so和libexecmain.so,这里两个so文献用来管束统统apk解密,动态加载等逻辑,可是咱们用IDA查看得知,这两个so文献被加密管束了2、爱加密加上我方的壳Appliation增添我方的壳Application:SuperApplication类,这个类中的attachContext设施中,起初把assets目次中的两个so文献copy到利用的files目次下,然后正在利用System.load设施,加载这个files目次中的两个so文献

  3、下断点调试碰到反调试检测咱们正在给dvmDexFileOpenPartial下断点,举办调试的时分,展现有反调试检测,由于无法给JNI_OnLoad下断点来去除反调试性能的arm指令,以是只可去批改内存数据,把TracerPid的值形成0,骗过检测了。这里咱们的思绪即是给fopen和fgets这两个函数下断点,由于咱们明白反调试的道理即是读取本经过的status文献,然后获取TracerPid那行实质即可,以是这里一定用到了fopen和fgets函数,正在利用fgets这个函数的时分,会读取每行实质,那么咱们只消展现正在读取到TracerPid那行实质的时分,去批改内存值,把TracerPid字段的值改成0即可。4、给fopen和fgets函数下断点有了上面的反调试思绪之后,咱们就初阶举办操作了,可是正在操作的历程中展现多次践诺了fopen和fgets函数,并且咱们需求批改多次TracerPid的值,情由很纯粹,由于是反调试检测,一定是正在子线程中轮训去检测这个值,以是会践诺多次很平常,以是咱们要批改多次TracerPid的值,骗过检测,直到当正在主线程中,代码运转到领略密dex文献的时分,即到了dvmDexFileOpenPartial函数处的断点处为止5、批改TracerPid内存数据骗过检测结尾批改多次TracerPid值,骗过检测,到了dvmDexFileOpenPartial这里,这时分,正在践诺dump剧本,把内存中的dex数据dump到当地即可。通过上面的调试和破解流程原本不难展现,爱加密的流程是如此的:1》移用fopen翻开/proc/self/cmdline...2》移用fgets读取com.droider.crackme0201

  7》移用fgets读取调试经过pid这里除了dvmDexFileOpenPartial函数,尚有一个主要的函数dvmLoadNativeCode,它是加载和初始化so的函数,借使感兴致的同砚,可能去给这个函数下断点看看运转逻辑。以是咱们只消记住咱们的目标唯有一个:来到dvmDexFileOpenPartial函数处,dump出内存中的dex文献,就算是实行脱壳使命

  六、总结到这里咱们就领会完了奈何去脱掉爱加密的壳,原本正在之前说过,现正在各个加固平台的道理都差不多,结尾看到的即是各家的加固[url=]算法[/url]了,以是咱们正在脱壳的历程中标的也很显着,即是dump出内存中的dex文献即可。不管他上层再何如牛逼的加密拆分操作,到了内存一定是完备的dex文献了,以是现正在加固平台也是一个思念即是不让你dump出来,即是让你给dvmDexFileOpenPartial函数下断点铩羽,调试铩羽。

  楼主我一年多前领会的ijiami技巧点和你领会的险些一律。ijiami壳这一年多了技巧仍然如此?仍然第一代的合座 ...

  吾爱破解所宣布的十足破解补丁、注册机和注册消息及软件的解密领会作品仅限用于进修和咨询目标;不得将上述实质用于贸易或者不法用处,不然,十足后果请用户自夸。本站消息来自搜集,版权争议与本站无合。您必需不才载后的24个幼时之内,从您的电脑中彻底删除上述实质。借使您嗜好该措施,请赞成正版软件,添置注册,取得更好的正版办事。如有侵权请邮件与咱们合系管束。