吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14593|回复: 51
收起左侧

[Android 原创] 〖专业教程〗逆向一款清理工具 清浊 过签名校验和开启高级功能 dex分析 so修改

  [复制链接]
芽衣 发表于 2020-9-19 09:52
本帖最后由 417788939 于 2020-10-3 09:27 编辑

菜鸟写的帖子,标题只为吸引点击量,实际上是菜鸟教程不设阅读权限了,大神勿喷


清浊是一款非常优秀的清理类工具,真的找不到第二款比他更好的app了,软件虽小,但功能齐全。比如空文件夹扫描,你去看看谷歌市场的app,随便挑一款那个扫描速度慢的要死,完全比不上清浊。当前使用的软件样品为最新版1.5.4,请勿用于最新版1.5.5。此后的版本如果被检测到签名失败会格式化手机,请注意!如果你不确保完全去除签名校验请不要使用破解版。5块钱永久激活,建议支持正版。

逆向中发现的问题:


1、如下图,第一次启动这个提示不知道为什么偏移了,应该属于bug,不知道作者什么时候修复。

0.jpg

2、如果手机中没有安装QQ,点击设置→加入QQ群谈论,会导致程序崩溃的严重bug。


准备工具:
1、IDA,以64位so为例
2、反编译工具,自备



部分分析结果略过,直接说结果,有兴趣的可以举一反三。



首先重签名软件,安装后崩溃。根据DDMS的日志找到出问题的类,发现是验证MD5。所以反编译的时候全词匹配关键字〖MD5〗,看看会有什么发现。


1.png


如上图,有10个结果,这些结果我都看过了,关键的只有红色箭头的方法。文件位于com/farplace/qingzhuo/c/C。然后找一下调用,看看是什么地方调用了a方法,所以继续搜索com/farplace/qingzhuo/c/C;->a


1.png


如上图,只有2个调用,先看第二个。run()V在smali里面代表线程,而这个线程调用了签名校验,也就是说这个run线程在验证签名值是否正确,所以一启动就退出了。改法也很简单,图中红框代码全删他就不会执行签名校验了。这个和最新版share3.6.5一个逻辑,检测hook同样有线程。
至于第一个结果,有3个done方法,我还没搞清这个是干什么的,好像是验证版本,应该和联网升级有关,如果感觉心慌可以删掉。

0.gif





最后来看一下上图绿色箭头的类,文件位于com/farplace/qingzhuo/util/DataCheckUtil。

1.png

如上图,红框的方法中有个finish,会关掉app,get0oo00Md5应该就是获取md5了,不对的话就会关掉,如果低内存的话也会关掉。黄色箭头的方法checkPmProxy应该是检测自身是否被一键拦截工具hook了,如果你用了一键去除签名校验应该会出问题。但是现在据我所知,除了MT管理器,极少数逆向玩家开发出了各种强大的过签工具,比如无视PM检测应该是近期才出现的新型一键技术,方便快捷。还有hook原安装包也是强大的过签名技术,重定向以后基本上很难检测到自身是否被修改了。





接下来是开启高级版功能,也比较简单。如果直接修改smali是不是太简单了点,所以我打算修改so达到开启高级版的目的,也是为了让一些小白萌新学习一下思路。


1.png

随便点击一个高级版的功能,会弹出“需要升级到高级版”的提示,根据提示逆向寻找弹出来源。

第一步res文件夹搜索关键字,只有1个结果,复制英文名字not_pro_notice,如下图:


1.png


第二步接着在values文件夹寻找ID,只有1个结果,可以知道ID为0x7f0f00e1。这个id就是在dex里面的地址,如下图:


1.png


搜索dex里面的id,有几个结果,我随便找了一个,部分代码如下:
.method public synthetic n(Landroid/view/View;)V
    .locals 11

    invoke-static {}, Lcom/farplace/qingzhuo/util/EatMemory;->test()Z〖关键处〗

    move-result v0〖抽取上方test的值放入v0〗

    if-nez v0, :cond_0〖判断v0的值,如果等于1或者其他则跳转到:cond_0,反之继续运行〗

    const v0, 0x7f0f00e1〖需要升级到高级版〗

    const/4 v1, -0x1

    invoke-static {p1, v0, v1}, Lcom/google/android/material/snackbar/Snackbar;->h(Landroid/view/View;II)Lcom/google/android/material/snackbar/Snackbar;

    move-result-object p1

    invoke-virtual {p1}, Lcom/google/android/material/snackbar/Snackbar;->j()V

    return-void〖结束〗

    :cond_0〖高级版地址〗
    new-instance p1, Lcom/google/android/material/bottomsheet/BottomSheetDialog;
……
所以v0不能等于0,如果等于0就运行到非高级版的地方了,一般情况下赋值1即可开启高级版。通过跳转来到test方法,如下图这个方法在native-lib.c这个so里面加载,这时候需要祭出神器IDA 1.jpg

1.png




1.png
bool __fastcall Java_com_farplace_qingzhuo_util_EatMemory_test(__int64 *a1)
{
  __int64 v1; // x21
  __int64 *v2; // x19
  __int64 v3; // x0
  __int64 v4; // x20
  __int64 v5; // x0

  v1 = *a1;
  v2 = a1;
  v3 = (*(__int64 (**)(void))(*a1 + 48))();
  v4 = v3;
  v5 = (*(__int64 (__fastcall **)(__int64 *, __int64, const char *, const char *))(v1 + 1152))(v2, v3, "l1", "I");
  return (*(unsigned int (__fastcall **)(__int64 *, __int64, __int64))(v1 + 1200))(v2, v4, v5) == 1971;
}
如上图,加载完毕后打开输出窗口,双击Java_com_farplace_qingzhuo_util_EatMemory_test,这个其实就是输出路径。看到这里萌新可能已经感到某个地方开始隐隐作痛了吧 0.jpg

通过伪代码分析,return就是要返回的数据,v5=x0,最后返回的是v5,所以我们现在只需要对x0进行赋值1,让函数无条件输出1即可。需要用到的汇编指令为MOV,和smali的const类似,比如mov r0,r1,就是把r1的值放到r0里面去。
回到IDA视图,定位到CSET W0, EQ,把这个指令改成MOV W0, #2(40008052),然后再来看一下伪代码,如下图:


1.png


1.png


伪代码已经显示最后返回1了,然后把修改好的so放回去,试试看能不能开启高级版。



1.jpg


测试打开缓冲区内存,成功! 1.jpg




免费评分

参与人数 10威望 +1 吾爱币 +26 热心值 +10 收起 理由
zhuzhuxia111 + 1 + 1 我很赞同!
momo2021 + 1 + 1 用心讨论,共获提升!
qtfreet00 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
缘扬风星 + 1 谢谢@Thanks!
sunnylds7 + 1 + 1 热心回复!
殘心 + 1 热心回复!
独行风云 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
偶尔.c + 1 + 1 厉害👍
chinawolf2000 + 1 + 1 热心回复!
是随风啊 + 1 谢谢@Thanks!

查看全部评分

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

 楼主| 芽衣 发表于 2020-9-19 16:47
本帖最后由 417788939 于 2020-9-19 17:03 编辑
mitchzh 发表于 2020-9-19 14:37
我用IDA打开显示不太一样,请问是什么问题?


吐了……我以为是ida版本问题,仔细一看

1.png

2.png



都会打开ida了,应该能分清安卓安装包32位和64位了吧……



很早就发现这种情况了,只改一半不改另一半的,出问题了来问我……不知道事半功倍的想法是不是小白独有
 楼主| 芽衣 发表于 2020-9-21 12:50
shenyj 发表于 2020-9-21 12:01
没有破解版下载,只是分享思路,是吧??软件是还不错,但SD女佣 和 储存空间清理  加清浊,我都不知道用哪 ...

智友论坛有各种破解成品……
litianping 发表于 2020-9-19 10:11
阿巴阿巴阿巴 发表于 2020-9-19 10:17
感谢分享
xxjj999 发表于 2020-9-19 12:28
谢谢楼主
SourceWater 发表于 2020-9-19 13:35
感谢楼主,很好的教程
chuyun 发表于 2020-9-19 14:05
我比你还菜
mitchzh 发表于 2020-9-19 14:09
学习了,谢谢。
mitchzh 发表于 2020-9-19 14:37
我用IDA打开显示不太一样,请问是什么问题?
QQ截图20200919143542.png
klxn0-0 发表于 2020-9-19 17:17
.method public static test()Z
    .registers 6

    const/4 v0, 0x1

    return v0
.end method

我这个如何,省去修改so的步骤
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-28 11:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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