吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 22685|回复: 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] 纯文本查看 复制代码
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] 纯文本查看 复制代码
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, 下载次数: 1544, 下载积分: 吾爱币 -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, 2024-11-20 12:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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