首页
论坛
课程
招聘
[原创]重打包APK绕过签名校验(无ROOT无HOOK框架)
2020-7-23 15:27 7692

[原创]重打包APK绕过签名校验(无ROOT无HOOK框架)

2020-7-23 15:27
7692

事先声明:尊重软件版权,请勿盗版。

这里先提一种针对性校强但简单好理解的办法,纯Java实现,代码大概也就50行不到吧。

还有更强的并且能过各种保护(反调试反HOOK反内存修改等等)的万能方法,不过较复杂,长篇大论的,等有空整理出来再提

本文适用场景:

1.需要重打包APK给普通用户,没有root权限也没有HOOK框架

2.so很难脱壳修复分析修改,或者逆向时间会很长很长。

3.so中调用了this.getPackageManager().getPackageInfo来获取签名进行校验

故事开始,某天,你暗恋的女神需要某个app的VIP,怎奈你兜兜空空如也,根本买不起VIP,然后你发现这个app的VIP是本地判断的,于是……
经过一番折腾,很快就改好了APK,重打包安装运行。提示非法操作?
又一番折腾,发现程序主要逻辑在so中,so被混淆的面目全非还进行了加固,最后发现在so中进行了APK签名校验,于是用hook过了签名校验,正常运行,VIP到手。
可是这样怎么发给女神呢?女神的手机没有root也没有hook框架。分析so?实在太复杂了,一时半会根本来不及,要让女神等你三五十天?恐怕到时候是备胎都当不成了吧。
怎么办?

总体思路:

既然修改so不成,也无法使用hook框架,那么就从别处入手。

本文用本人曾经悬赏过的加固APK(悬赏期内没人破解成功,加固强度还可以)进行分析:

由于so非常复杂,时间关系直接放弃分析。通过HOOK发现so的中签名校验是通过this.getPackageManager().getPackageInfo来获取的,于是想法就来了——
这个this是MainActivity的实例,所以这个this是一个很大的突破口:
思路活跃的同学可能已经发现了,只要覆盖MainActivity的getPackageManager就行了。

具体过程如下:

1.写一个HookPackageManager,专门用来HOOK各种PM相关方法:

public class HookPackageManager extends PackageManager {

    private PackageManager mBase; //用来做适配,返回其他信息

    public HookPackageManager(PackageManager base) {
        mBase = base;
    }

    @Override
    public PackageInfo getPackageInfo(String packageName, int flags)
            throws NameNotFoundException {
        if (!"ywt.android.test6".equals(packageName)) {
            //如果不是目标APK,则返回原始数据
            return mBase.getPackageInfo(packageName, flags);
        }
        PackageInfo pkgInfo = new PackageInfo();
        pkgInfo.signatures = new Signature[] {
            new Signature(new byte[] {
                //这是填写原始APK中读到的签名,用来欺骗so,很长就不贴了,后面会给出APK,反编译看即可。
            })
        };
        return pkgInfo;
    }

    //下面还有很多需要implements的方法,太多了,就不写了,后面会给出APK,反编译看即可,只要用mBase一一调用返回即可。
}

2.写一个HookMainActivity,代码如下:

public class HookMainActivity extends Activity {

    @Override
    public PackageManager getPackageManager() {
        //由于调用的是this.getPackageManager(),所以只要重写getPackageManager,返回一个伪造的实例,就可以实现欺骗
        PackageManager pm = new HookPackageManager(super.getPackageManager());
        return pm;
    }
}

3.将写好的Java代码反编译为smali,将crackme.apk也反编译为smali,然后将crackme中的MainActivity.smali中的父类修改为继承HookMainActivity

4.重新打包APK,就可以绕过APK的签名校验啦。

5.向女神邀功,争取早日转正。

附件中包含了原始crackme.apk(重打包就会提示APK被修改)和过签名校验的crackme.apk(随便修改都不会提示APK被修改)


[看雪官方]《安卓高级研修班》线下班,网课(12月)班开始同步招生!!

上传的附件:
收藏
点赞6
打赏
分享
最新回复 (21)
雪    币: 195
活跃值: 活跃值 (273)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
初学小潘 活跃值 2020-7-23 16:57
2
0
感谢分享,这边下载不要分
雪    币: 1356
活跃值: 活跃值 (161)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
Amun 活跃值 2020-7-23 18:28
3
0
有全局替换PackageManager而且比较完善的方法,但是上一个搞完还放工具的,被LAW警告了。[滑稽]
雪    币: 570
活跃值: 活跃值 (353)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
血舞长空 活跃值 2020-7-24 10:00
4
0
Amun 有全局替换PackageManager而且比较完善的方法,但是上一个搞完还放工具的,被LAW警告了。[滑稽]
他是不是破解人家APP了。没事,我破解我自己的APK,毫无压力
雪    币: 1012
活跃值: 活跃值 (372)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
cnzzh 活跃值 2020-7-24 11:21
5
0
谢谢分享~
雪    币: 630
活跃值: 活跃值 (1224)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
supperlitt 活跃值 2020-7-25 09:52
6
0

感谢这个好人,女神给你发了一张:好人卡

最后于 2020-7-25 09:52 被supperlitt编辑 ,原因:
雪    币: 260
活跃值: 活跃值 (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
javashr 活跃值 2020-8-14 23:37
7
0
无法下载呀
雪    币: 2
活跃值: 活跃值 (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
疯子Tear 活跃值 2020-8-16 08:21
8
0
怎么获取apk签名
雪    币: 487
活跃值: 活跃值 (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
从未沦陷 活跃值 2020-8-16 17:17
9
0
爱加密的好像不行,有个kstool也是这个原理,还是一键的
雪    币: 789
活跃值: 活跃值 (300)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
lhxdiao 活跃值 2020-8-18 14:35
10
0
祝楼主早日从外围升级成备胎
雪    币: 53
活跃值: 活跃值 (118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wooyunking 活跃值 2020-8-18 16:32
11
0
最后女神嫁给了乡下的老实人
雪    币: 84
活跃值: 活跃值 (112)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tianhaoday 活跃值 2020-8-19 15:09
12
0
我在想这个在遇到混淆的情况下还管用吗
雪    币: 203
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_xphpvnkm 活跃值 2020-8-22 16:06
13
0
小白看不懂啊
雪    币: 93
活跃值: 活跃值 (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
呼吸24K纯氧 活跃值 2020-8-31 13:53
14
0
非常好的内容, 感谢非常.
雪    币: 15
活跃值: 活跃值 (67)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Necopy 活跃值 2020-8-31 20:57
15
0
学到了,感谢楼主
雪    币: 2196
活跃值: 活跃值 (112)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
VNRKDOEA 活跃值 2020-9-1 15:42
16
0
坚决不做舔狗,手动狗头
雪    币: 57
活跃值: 活跃值 (1008)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
珍惜Any 活跃值 2020-9-1 15:46
17
0
貌似只能在java层做做,动态代理一下pms就行了...native直接就凉了,. 一般绕过签名检测最好的办法还是把原来的包塞到新包里面,然后IO重定向
雪    币: 84
活跃值: 活跃值 (112)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tianhaoday 活跃值 2020-9-15 19:09
18
0

这样唯一不好的一点就是体积有点大,如果原包本身就大的话。。。

最后于 2020-9-15 19:09 被tianhaoday编辑 ,原因:
雪    币: 260
活跃值: 活跃值 (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
javashr 活跃值 2020-10-1 12:22
19
0
附件,有下载的朋友吗?能不能分享一下,谢谢
雪    币: 152
活跃值: 活跃值 (553)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
爱我佳鑫 活跃值 2020-10-1 14:33
20
0
wooyunking 最后女神嫁给了乡下的老实人
刷梗还可以如果是现实那想多了,  谁不想过更好的生活, 城里的福利待遇比农村好, 女人比鬼还精估计没人会想嫁到农村去. 
雪    币: 4383
活跃值: 活跃值 (497)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
GitRoy 活跃值 2020-10-1 22:44
21
0
珍惜Any 貌似只能在java层做做,动态代理一下pms就行了...native直接就凉了,. 一般绕过签名检测最好的办法还是把原来的包塞到新包里面,然后IO重定向
+1
雪    币: 1700
活跃值: 活跃值 (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
_雨化田 活跃值 2020-10-3 11:07
22
0
珍惜Any 貌似只能在java层做做,动态代理一下pms就行了...native直接就凉了,. 一般绕过签名检测最好的办法还是把原来的包塞到新包里面,然后IO重定向
有帖子或具体代码吗?谢谢!
游客
登录 | 注册 方可回帖
返回