—————————————————————————————————
无壳无签。
原版:https://wwz.lanzouq.com/igyPU08n7qbg
成品:https://wwz.lanzouq.com/iXfPi08o2i3g
密码:xx
—————————————————————————————————
拿到软件包后,常规操作,先覆盖签名,安装看看能不能进去,进不去就是有签名效验,先尝试过签。能进去就不用管了,直接开始分析。
打开软件包,dex++编辑器全选所有dex打开。(只选classes3也可以)
搜方法名”vip”,发现搜出来很多,找带有”user”和”info”这种字符的类。
找到一个,进去分析一下。
在return上面赋值,const/4
v0,0x1
完后,保存一下,发起新搜索。
字符串搜“更新”。
搜出来很多,重点找带“dialog”和“update”字符的类。
发现两个可疑的类。(如果只选classes3那么将只有这两个结果)
进去分析一下。
把判断语句注释掉,不让它下去,直接退出。
return-void
是退出的意思
if-eqz
vA,
cond_xx
的意思是如果vA等于0则跳转到cond_xx
或者在判断语句上赋值,const/4
v0,0x1
或者把if-eqz改为if-nez(不等于0,则跳转)。
另一个类也是一样。
改完后保存,签名,安装。
这里的签名最好用V1+V2,只用V2会可能出现安装包已损坏的情况。
—————————————————————————————————
如果不爱动手,这里我放一个正则,一键pj会员。
iget-boolean
(.*),
.*,
Lcom/lm/components/subscribe/config/UserVipInfo;->flag:Z
搜代码,把正则表达式勾上。
然后点在结果中替换,全部替换为const/4
v0,0x1
一键去更新弹窗
iget-boolean
v0,
v0,
Lcom/meituan/robust/PatchProxyResult;->isSupported:Z
搜代码,不用开正则表达式。
结果全部替换为const/4
v0,0x1
—————————————————————————————————
解释一波:
类,就是那个蓝色小图标,上面写一个C的,就是一个类
第一步,为什么要搜方法名,因为这是一种套路
方法的格式一般就是.method
public
xxx
$$$$()&
这里的$$$$就是方法名。
通俗点解释原因,就是:直接修改方法要比挨个改判断语句更简单粗暴。而判断语句前都会有一个调用方法语句,这个调用方法语句会调用这个方法返回的v0值,如果是0,那么下面的判断语句就会给你传送到提示错误的地方。如果是1,就成了,下面的判断会让你进入会员。
为什么要选user和info的类呢?这是经验,没有为什么。
为什么要在return
v0前强行赋值呢?你猜。
—————————————————————————————————