吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10892|回复: 83
收起左侧

[Android 原创] 〖实战破解2〗PowerAMP 补充破解 MOD 修复按钮消失问题

  [复制链接]
芽衣 发表于 2021-9-24 17:28
本帖最后由 芽衣 于 2021-10-6 06:49 编辑

上集+样品so:https://www.52pojie.cn/thread-1496553-1-1.html
上次展示了如何做到无限试用,即使是混淆过的Java和so代码也能找到蛛丝马迹。不过不得不说这软件防破解确实做的可以,就是音质每个版本都不一样,毕竟是通过调节软解来改善听感,器材每个人都不一样,哪个版本好用因人而异。

这次同样使用911版本,签名改变以后该软件hi-res播放功能消失,说实话我刚开始是看见那个函数有获取签名的,我以为能hook掉所有,结果是独立检测的,开发者为了不让你发现异常可谓是绞尽脑汁

来看一下他的RSA是藏在哪。


首先来看一下Jvav部分的签名校验,因为mt自带的一键过签可以kill掉这个,所以没必要再去手改了,不过也可以看一下。反编译前建议使用mt管理器对dex进行反混淆,因为里面有些特殊字符串很影响浏览。
反编译后搜索代码>signatures,看到最后一个。

1.png

这里虽然是混淆过的,但是像这类布尔值对比,一般结果在反编译后会放在开头,v0就是对比一致的结果,v1就是不一致返回的结果,值为0就会弹出盗版提示了。可以修改代码中的跳转逻辑,或者改寄存器的值都是可以的。实际上签名值就保存在当前类名的开头,拉到上面就能看到了。
dex并没有用太多的代码进行保护,就一个混淆和签名校验,因为开发者使用的是标准api接口,所以mt管理器可以轻松入侵。


但是上一个帖子hook了以后还有个问题,就是hi-res这个按钮不见了。
具体状况如下:
1、未hook签名时,我换回原始签名文件就正常了,重签名后按钮消失不见。
2、hook了以后,无论签名是否未原始,都不能显示按钮。


初步判断APP不但获取了签名值,而且还检测了自身是否被代{过}{滤}理。现在祭出神器ida加载so,为了方便理解以下都是静态地址。
ida加载完毕后搜索字符串toByteArray,进入sub_488E8,那么这里就是签名校验的一个部分,如果校验不通过会导致hi-res按钮不显示。

1.png

正确签名值如上图,红框分别获取了当前签名值和正确签名值,然后进行一个对比。

1.png


为什么是这里,用16进制编辑器对比一下就可以很清楚的看到so有一个签名文件。通过查找调用就能很快发现在哪里验证的。


  v4 = ((*env)->GetObjectClass)(env);
  v5 = (*env)->GetMethodID(env, v4, "getPackageManager", "()Landroid/content/pm/PackageManager;");
  v6 = sub_18D9F8(env, a2, v5);
  v7 = (*env)->GetMethodID(env, v4, "getPackageName", "()Ljava/lang/String;");
  sub_18D9F8(env, a2, v7);
  v8 = (*env)->GetObjectClass(env, v6);
  v9 = (*env)->GetMethodID(env, v8, "getPackageInfo", "(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");
  v10 = sub_18D9F8(env, v6, v9);
  v11 = (*env)->ExceptionOccurred(env);
  (*env)->ExceptionClear(env);
  if ( v11 )
    return 0;
  v13 = (*env)->GetObjectClass(env, v10);
  v14 = (*env)->GetFieldID(env, v13, "signatures", "[Landroid/content/pm/Signature;");
  v15 = (*env)->GetObjectField(env, v10, v14);
  v16 = (*env)->GetObjectArrayElement(env, v15, 0);
  v17 = (*env)->GetObjectClass(env, v16);
  v18 = (*env)->GetMethodID(env, v17, "toByteArray", "()[B");



函数获取签名后,再对比保存在so里面的值,对比不通过就偷偷地把按钮藏起来,让你用着不舒服。


1.png


r2是正确签名值,r3就是获取到的签名值,因为so已经混淆过了,所以它把r3+1字节数存入r12,r2+1的地址写入r1。要让对比的结果一致改法比较多,改判断或者改寄存器都是可以的。比如LR改成r3,让它自己和自己比。

1.png

上图是读取地址,可以试一下能不能过。
改好后按钮还是没有显示,因为上一层它做了hook检测,检测自身是否被代.理。

1.png


如上图16进制,一直卡那里走不下去,nop掉.text:0004960C就可以了。
实际上不需要修改签名值,因为之前已经hook了,这里只是做了一个检测而已,nop掉BNE loc_495EC之后那个hi-res按钮就显示出来啦。



1.jpg




免费评分

参与人数 10吾爱币 +13 热心值 +10 收起 理由
tkgguter88 + 1 + 1 支持你,有点蒙蔽~
一块砖头 + 2 + 1 用心讨论,共获提升!
chunfengchui520 + 1 热心回复!
z7138910 + 1 + 1 热心回复!
孺子韫 + 1 + 1 我很赞同!
独行风云 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
xhever + 1 + 1 我很赞同!
ZiGong77 + 1 + 1 我很赞同!
pty + 1 + 1 谢谢@Thanks!
正己 + 4 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

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

gunanyi 发表于 2021-10-5 01:00
好教程,啥时候更新下一个教程,一天不看都睡不着啊
 楼主| 芽衣 发表于 2021-9-24 21:00
jy04468108 发表于 2021-9-24 20:36
我积分高于100为什么还是看不到啊

我都没开始写你怎么看得到……
正己 发表于 2021-9-24 17:46
bjxiaoyao 发表于 2021-9-24 17:57
到底隐藏了啥?我要看看
ZiGong77 发表于 2021-9-24 18:05
感谢分享
小红小姐 发表于 2021-9-24 18:22
学习学习大佬的教程
xmtt2008 发表于 2021-9-24 18:56
支持 很好的教程
suko 发表于 2021-9-24 19:05
感谢分享!
祈愿啊 发表于 2021-9-24 19:06
支持 很好的教程
alanliujin 发表于 2021-9-24 19:30
现在浏览都要求这么高了吗?各种限制的。
anyucompany 发表于 2021-9-24 19:40
积分太低看不到
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 11:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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