本帖最后由 一块砖头 于 2021-12-22 20:28 编辑
写在前面:
如题,有好几种壳的脱修教程,后续也会继续更新(不更爱加密)
但是苦于没有样本,如果知道什么软件的壳是我还没出的,烦请告知软件名(不会帮你脱,但是会给教程)
脱壳修复部分均为我根据我找到的教程进行整合整理之后的,因为太多了所以无法一一列出原贴链接(基本来自吾爱和MT论坛以及其他渠道)
注:本文主要是写给小白看,此处讲的小白,是指有一点基础的那种,不是给那些完全什么都不会的小白看。如果连一些很基本的东西都不懂,学脱壳也没用啊
对于修复后闪退的情况:
- 操作失误
- 软件自己有签名验证
- 不是免费壳
- 实际壳与显示的不符,一些开发者为了安全会多加几种加固的特征来迷惑软件和破解者
工具:
MT管理器
arm pro
BlackDex(强烈安利,脱壳神器)
这是我自己做的加固样本以及按教程脱壳修复后的
样本
备用链接:
https://pan.baidu.com/s/19KgwV48HlRmywlZDKq4p0A 提取码:52pj
讲解: 1.如果脱壳修复后还是闪退,那就看看是不是操作原因,如果不是那就是软件自己的签名验证2.AndroidManifest.xml中的入口都在android:icon下面的android:name那一行
android:theme="@7f090000"
android:label="@7f080000"
android:icon="@7f030000"
android:name="要被替换的入口" #如果dex中入口为null就把这一行删除
android:hardwareAccelerated="true"
android:largeHeap="true"
3.dex文件中的入口就是引号中的文本
.field public static APPNAME:Ljava/lang/String; = "入口"
#如果是null就不用复制入口,把AndroidManifest.xml中的android:name那一行删除即可
4.脱出来的dex怎么删?
- 无法打开的
- 和原安装包中大小完全一致的
- 壳dex(找有没有stub)
- 最后再凭借自己的经验判断一下
5.脱出来的dex怎么处理?
先按4的步骤进行删除→用MT修复→批量重命名为classes{1}.dex→把那个“1”删除
6.教程中说的修复,就是用MT的dex修复功能进行修复
目录:
梆梆加固:
打开原dex文件中的com/SecShell/SecShell/H,进入复制入口
.field public static ACFNAME:Ljava/lang/String; = "###ACFNAME###"
.field public static APPNAME:Ljava/lang/String; = "i.app.applicationMain"#这就是我们要的入口
.field public static ISMPAAS:Ljava/lang/String; = "###MPAAS###"
.field public static PKGNAME:Ljava/lang/String; = "com.yanben"
.field public static cl:Ljava/lang/ClassLoader;
然后替换到AndroidManifest.xml中替换入口,下面是替换后的
android:theme="@7f090000"
android:label="@7f080000"
android:icon="@7f030000"
android:name="i.app.applicationMain"#这里就是要替换的地方
android:hardwareAccelerated="true"
android:largeHeap="true"
android:supportsRtl="true"
android:resizeableActivity="true">
搜索
如果有就把那一段删除,下面显示的就是要删的
<provider
android:name="com.secneo.apkwrapper.CP"
android:exported="false"
android:authorities="com.yanben.CP"
android:initOrder="2147483647" />
用小黑盒(BlackDex)脱壳,把壳dex和无法打开的dex删除(详见讲解)
然后修复→重命名→添加到apk中覆盖掉原dex即可
残留:- meta-data文件夹
- classes0.jar
- 文件名带libSecShell的
腾讯御安全:
打开原文件的dex,找到com/wrapper/proxyapplication/WrapperProxyApplication
进去复制入口后到AndroidManifest.xml中替换入口
这是dex中的入口
.field static baseContext:Landroid/content/Context; = null
.field static className:Ljava/lang/String; = "i.app.applicationMain"#这是入口
.field static mLoader:Ljava/lang/ClassLoader; = null
.field static shellApp:Landroid/app/Application; = null
.field static tinkerApp:Ljava/lang/String; = "tinker not support"
把脱出来的dex中的壳dex和无法打开的dex删除(详见讲解)
修复→重命名→直接加到apk中覆盖掉原dex即可
残留:
- tencent_stub
- tosversion
- 0OO00l111l1l
- o0oooOO0ooOo
- 文件名带有shell的
百度加固:
打开壳dex,找到appinfo类,进去复制入口到AndroidManifest.xml中替换入口
小黑盒脱壳,把需要删除的dex删除
最后就是修复→重命名→添加到apk中覆盖原dex
残留:
蛮犀加固: 蛮犀教程来源(正己)
进入原dex,找到com/mx/dA/dpa中的入口
复制到AndroidManifest.xml中替换入口(详见讲解)
再搜索
android:appComponentFactory="com.mx.dAC.dac" #把这行删除
如果这一行的末尾有个>,记得在这一行的上一行末尾加上一个>
然后把脱出来的dex,该删的都删了(详见讲解)
再修复→重命名→加到apk里覆盖掉原dex即可
残留:
数字加固:
先用cn过签
小黑盒把dex脱壳,然后把该删的dex删了(详见讲解)
修复→重命名→添加到assets中的Epic或者arm_dex文件夹中即可
残留:
(因为用的是过签,所以这里残留文件不能删)
文件名带jiagu的
.appkey
顶象加固: 打开壳dex,按路径com/security/shell/AppStub1打开
.class public Lcom/security/shell/AppStub1;
.super Landroid/app/Application;
.annotation runtime Lcom/security/mobile/annotation/Config;
app = "com.one.tinker.MyApplication"#这个就是入口
appFactory = "android.support.v4.app.CoreComponentFactory"
versionStr = "dd2d09b486e704b2f124c173fbe65d37"
.end annotation
复制入口,打开AndroidManifest.xml进去替换
android:icon="@7f0d0005"
android:name="com.security.shell.AppStub1"#复制的入口替换到这里
android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:resizeableActivity="false"
android:networkSecurityConfig="@7f120007"
android:appComponentFactory="com.security.shell.AppComponentFactory0">
#删除这行↑,然后在这行的上一行加个">"
最后就是用小黑盒脱壳→删掉该删的→修复→重命名→直接添加到包里覆盖原dex即可
残留:
arm:
先看看官方介绍,官方都说是伪加固了,所以我不打算写出来,我把一般的脱壳方法写在了文末,大家就当是一次练习吧(arm的样本上面也有)
残留:
随风加固:
教程来源—柒末雪
还是惯例,用小黑盒脱壳,然后删除该删的→修复→重命名
接下来的步骤和其他壳不太一样,所以讲细一点
在原dex中正则搜索invoke-static(.*), .*;->exit\(I\)V替换为空(去除虚拟机检测什么的)
然后导入虚拟机,用反射大师打开,搜索getapp,就可以得到入口(具体的我晚上回去会帖图)
最后,到xml里替换一下入口,再把弄好的dex加进去即可
随缘更...
后记:
其实你多脱几种壳就会发现,好像步骤都一样,在某个路径里找到真实入口,然后到axml里替换一下,再回填dex就可以了。
所以在最后讲一下一个基本的脱壳方法,跟着axml中android:name里字符串的内容,到壳dex里找真实入口,如果没有找到,那就按随风教程里说的用反射大师去查看入口,至于像梆梆那种还需要去多删一些内容的,在axml里多找找就好了
怎么看要不要替换入口?
找到android:icon下面的android:name这一行,看看里头的文本就知道了
怎么找真实的入口路径?
还记得上面说的文本吗?那段文本其实就是真实入口在壳dex中的路径
如:文本是"com.security.shell.AppStub1",那就打开dex然后一层一层打开进去慢慢看看哪个是入口
顶象的我没去找教程,就是跟着这一套标准方案来的,亲测有效,只是因为样本不够,又懒得看所以残留文件还没写罢了
如果对你有所帮助的话,可以给个免费的评分支持一下
虽然是随缘更,但是目前主流的壳都有了,建议收藏一下免得找不到(收藏这么多,顺便给个评分也是可以的) |