吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 23495|回复: 196
收起左侧

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

    [复制链接]
wyatton 发表于 2020-7-23 15:34
本帖最后由 wyatton 于 2020-7-23 18:16 编辑

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

这里先提一种针对性校强但简单好理解的办法,纯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相关方法:
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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,代码如下:
[Java] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
9
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被修改)

pass.zip

1.54 MB, 下载次数: 1559, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 66威望 +1 吾爱币 +82 热心值 +58 收起 理由
astonlew + 1 + 1 我很赞同!
一块砖头 + 1 + 1 我很赞同!
Readmy + 1 + 1 用心讨论,共获提升!
AItechnology + 1 + 1 我很赞同!
SkipQWE + 1 我很赞同!
Rz18356839463 + 1 + 1 我很赞同!
小马过河007 + 1 我很赞同!
hexio + 1 + 1 用心讨论,共获提升!
叶子-ZG + 1 + 1 谢谢@Thanks!
CokkeizigenDAR + 1 + 1 谢谢@Thanks!
yaqud + 1 我很赞同!
caleb110 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
柏林961 + 1 + 1 热心回复!
slikechen + 1 用心讨论,共获提升!
d412404 + 1 + 1 用心讨论,共获提升!
吾爱Po解啊 + 1 + 1 用心讨论,共获提升!
qtfreet00 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Divery + 1 + 1 用心讨论,共获提升!
NGUlyb + 1 + 1 我很赞同!
gorilla019 + 1 谢谢@Thanks!
canghx + 1 + 1 我很赞同!
死萝卜 + 1 + 1 我很赞同!
顺丰到付 + 1 用心讨论,共获提升!
wuaipojie + 1 + 1 谢谢@Thanks!
schedule + 1 用心讨论,共获提升!
9324 + 1 我很赞同!
白爵帝丶 + 1 + 1 我很赞同!
blcpu + 1 + 1 我很赞同!
hyhyx + 1 + 1 谢谢@Thanks!
zyh040718 + 1 + 1 我很赞同!
大地不动 + 1 + 1 谢谢@Thanks!
jone110 + 1 + 1 我很赞同!
yangyang51 + 1 + 1 谢谢@Thanks!
falsestar + 1 我很赞同!
hfvip888 + 1 谢谢@Thanks!
古风圈 + 1 + 1 经验+3
-Paimon- + 1 谢谢@Thanks!
kornKobe + 1 + 1 用心讨论,共获提升!
lzero89 + 1 我很赞同!
黄色土豆 + 1 谢谢@Thanks!
FF1002 + 1 + 1 感谢分享
w爱 + 1 + 1 我很赞同!
victy + 1 + 1 我很赞同!
Psyber + 1 谢谢@Thanks!
超然台上 + 1 可能这就是大佬吧
linklin + 1 热心回复!
洪冼象 + 1 + 1 我很赞同!
Amaterasu + 1 + 1 谢谢@Thanks!
回荡 + 1 + 1 用心讨论,共获提升!
为之奈何? + 1 + 1 我很赞同!
zqguang3708 + 1 + 1 热心回复!
HAOPP + 1 谢谢@Thanks!
阿巴阿巴阿巴 + 1 我很赞同!
leigedehao + 1 + 1 谢谢@Thanks!
thenow + 1 + 1 谢谢@Thanks!
xiaxin12345 + 1 + 1 谢谢@Thanks!
Deng-13148 + 1 + 1 用心讨论,共获提升!
kingaero + 2 + 1 谢谢@Thanks!
笙若 + 1 + 1 谢谢@Thanks!
风绕柳絮轻敲雪 + 4 + 1 你们也太吝啬了吧
onihot + 2 + 1 谢谢@Thanks!
正己 + 2 + 1 思路八错
hengogo + 1 用心讨论,共获提升!
芽衣 + 3 + 1 很不错的思路,直接给3币
涛之雨 + 2 + 1 打破1评分惨案
sunshineos + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

chishingchan 发表于 2020-7-23 15:57
没有一步一步的教学,我等新人难弄明白。
xxslsp 发表于 2020-7-23 15:43
 楼主| wyatton 发表于 2020-7-23 16:08
涛之雨 发表于 2020-7-23 15:58
原理就和mt的一键hook签名差不多吧
不知道能不能hook住so层的或是其他形式的签名检测

有点不一样吧,HOOK大部分都需要root权限。
这个方法说是伪装欺骗更确切些。关键是不需要root权限,而且就几行java代码就搞定了,过掉的也是so中的签名检测。只是有一些局限性,不是很通用。
cocodayo 发表于 2020-7-23 15:38
学废了学废了,谢谢大佬分享
Silent-War 发表于 2020-7-23 15:46
一看就会,一学就废。感谢大佬
findgood 发表于 2020-7-23 15:48
非常感谢您的分享!
塞米亚特 发表于 2020-7-23 15:53
谢谢大佬分享!上次重签名想骗过吃鸡没成功
神祈 发表于 2020-7-23 15:55
道理我都懂,女朋友哪里领?[doge]
涛之雨 发表于 2020-7-23 15:58
原理就和mt的一键hook签名差不多吧
不知道能不能hook住so层的或是其他形式的签名检测
 楼主| wyatton 发表于 2020-7-23 16:03
chishingchan 发表于 2020-7-23 15:57
没有一步一步的教学,我等新人难弄明白。

这已经一步步啦,代码都全贴出来了,如果还有哪步不懂的可以留言提问。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-4-10 18:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表