吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

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

[Android 原创] 用户是new出来的! 热门变声器逆向教程<第九贴>

  [复制链接]
ywlYWL 发表于 2022-3-28 14:44
本帖最后由 ywlYWL 于 2022-3-28 14:58 编辑

本教程只提供学习,不提供成品!        如有违规联系删帖!


工具:
  armPro 脱壳用的
  mt管理器 修改dex用的


0x1 前言
和室友打吃鸡,室友突然拉了他对象{:301_1008:}   
这........不整一手!{:301_978:}
下载了一个变声器当个绿茶婊{:301_1010:}

哥哥----{:301_975:}哈哈哈哈.

不过要会员! 这不挑衅我么{:301_997:}


0x2 理论基础
大部分软件都是连接服务器,通过服务器返回的数据 来生成用户对象
在根据用户对象设置相应的功能
在Java中new出来的对象可以堆中长时间保存


0x3 奇思妙想
破解实路可以从很多角度出发
比如:
暴力破解功能限制的关键跳转
->优点:对于相对简单的软件无需分析,方便快捷
->缺点:而对于功能判断较多的就显得比较麻烦 要多次重复操作;
而且暗病多,稍有不慎,引起闪退等{:301_991:}
参考可以看我以前的帖子:红包助手 暴力破解登入限制 <第五次发帖>(新手学习) - 『移动安全区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

也可以
抓包发送假数据
用黄鸟等抓包软件注入发送假的数据包
->优点:可以免除脱壳等问题
->缺点:无法转移安装包给别人用{:301_973:}


修改登入代码,在Java层伪造用户
->优点:与正版无异,跳过QQ登入或者微信登入需要的签名验证,也就不会提示出盗版信息了
->缺点:难的分析,要瞻前顾后.只不过收藏应该在别的手机上用不了.{:301_980:}


0x4 实践出真理
进入实战状{:301_992:}



Screenshot_2022-03-28-13-15-58-948_com.vmos.pro.jpg



这个是360加固,而这个的更新日期是在2022年2月23日之前的 可以用armPro 来进行脱壳
由于armPro是收费的 所以给大家一个脱壳后的版本:
https://pan.baidu.com/s/1wAiXPhIFg6GqIQjHNY93Rw?pwd=v4v8
v4v8

已经有理论的分析
我们打开软件,使用打开小挂件功能会弹出登入,而登入过后就会弹出收费!妥妥的把我们当韭菜啊!!!!{:301_1006:}
那么我们就要逆向思维
构建这个软件的工程师在做项目的时候肯定会有一个函数判断是否登入
而一般的判断都放在了用户类里面
那我们直接搜索 类名:user
发现真的有用户类!
Screenshot_2022-03-28-13-27-34-713_com.vmos.pro.jpg


userinfobean这就是用户的基本数据类!!!打开它!
Screenshot_2022-03-28-13-28-00-612_com.vmos.pro.jpg


而这个类里面也有getlogin这个方法,翻译成中文也就是获取登入的意思
而我也很干脆 直接改掉这个返回值为 1
用const v0,0x1
这句代码来赋值 (赋值这个补没看明白的话建议看看我以前的贴子,这里只讲个大概,讲不了那么细了!)
修改后退出保存,安装打开发现并没有登入
那么我们思考一下,是不是这个判断没被调用?
是不是还有其他的判断?
接下来我们在导航里面长按getlogin,查看它的调用
看看是不是没有被调用
Screenshot_2022-03-28-13-28-35-921_com.vmos.pro.jpg Screenshot_2022-03-28-13-29-22-444_com.vmos.pro.jpg


找到了一处判断,这里在调用getlogin函数的同时还判断了j2是不是空!
而j2又是userinfobean 类型的数据, 而j2的值来源于j()这个方法
那么选择j()跳转到j()看看
Screenshot_2022-03-28-13-30-09-012_com.vmos.pro.jpg
与猜想的一样 这个j() 返回的就是用户数据
而这用户数据又调用了 k()方法
这个k() 方法里面(j()方法下面)有gson这个函数
这个函数是干嘛的? 是调用服务器里面的数据的
也就是与前面的理论相印证了


这里就要我们自己构造一个用户数据了


在Java里面 可以用new 在创建对象
于是就改成了这样
Screenshot_2022-03-28-13-33-26-042_com.vmos.pro.jpg




不管服务器怎样 自己在本地内存丰衣足食!


答案也哼理想,结果就是显示已经登入了,
为什么不改前面的函数的返回值?
改过,失败了,{:301_972:}
这个软件在一些关键代码上有so层的保护,修改后会出现出现异常然后闪退
学习so 就看看论坛芽衣大佬的文章吧


修改的smali代码我也放这了
.method public k()Lcom/intotherain/bean/UserInfoBean;
    .registers 5

    .line 1
    new-instance v0, Lcom/intotherain/bean/UserInfoBean;

    invoke-direct {v0}, Lcom/intotherain/bean/UserInfoBean;-><init>()V

    return-object v0
.end method

这就是k()方法的修改
接下来就是逆向会员功能了
而逆向会员无非就是修改会员相关的数据
而这个还是要改用户数据
而这里并没有isvip的判断方法
所以断定就是通过会员到期时间来判断是不是会员的
在用户数据类的修改放在这里了










method public getAvatarUrl()Ljava/lang/String;
.registers 2

.line 1
iget-object v0, p0, Lcom/intotherain/bean/UserInfoBean;->avatarUrl:Ljava/lang/String;

const-string v0, "https://t8.baidu.com/it/u=3257069087,320163745&fm=70&app=139&f=JPEG?w=690&h=690&s=A0F27327B38B64FC803C99990300C0A2"

return-object v0

.end method

.method public getBuySogouVoiceTime()I
.registers 2
.line 1
iget v0, p0, Lcom/intotherain/bean/UserInfoBean;->buySogouVoiceTime:I

const v0, 0x98967f

return v0

.end method

.method public getExpireLocalVipDate()Ljava/util/Date;
.registers 2

.line 1
new-instance v0, Ljava/util/Date;

invoke-direct {v0}, Ljava/util/Date;-><init>()V

return-object v0

.end method

.method public getExpireSogouVoiceDate()Ljava/util/Date;
.registers 2

.line 1
new-instance v0, Ljava/util/Date;

invoke-direct {v0}, Ljava/util/Date;-><init>()V

return-object v0

.end method

.method public getLogin()Z
.registers 2

.line 1
iget-boolean v0, p0, Lcom/intotherain/bean/UserInfoBean;->login:Z

const v0, 0x1

return v0

.end method

.method public getNickname()Ljava/lang/String;
.registers 2

.line 1
iget-object v0, p0, Lcom/intotherain/bean/UserInfoBean;->nickname:Ljava/lang/String;

const-string v0, "小杨破解"

return-object v0

.end method

.method public getOpenId()Ljava/lang/String;
.registers 2

.line 1
iget-object v0, p0, Lcom/intotherain/bean/UserInfoBean;->openId:Ljava/lang/String;

return-object v0

.end method

.method public getPostSpendSogouVoiceTime()I
.registers 2

.line 1
iget v0, p0, Lcom/intotherain/bean/UserInfoBean;->postSpendSogouVoiceTime:I

const v0, 0x0

return v0

.end method

.method public getSpendSogouVoiceTime()I
.registers 2

.line 1
iget v0, p0, Lcom/intotherain/bean/UserInfoBean;->spendSogouVoiceTime:I

const v0, 0x0

return v0

.end method

.method public getTotalSpendSogouVoiceTime()I
.registers 3

.line 1
const v0, 0x0

return v0

.end method



这里面的大部分方法直接翻译你就能知道它的意思
我大概讲一下,有购买的时间尽量调很长,还有使用时间尽量调低
有个oldvip这个没用不用管
通过一下午的分析 判断会员的标准还有个c()方法
Screenshot_2022-03-28-13-37-02-283_com.vmos.pro.jpg

在k()方法的那个类里面
在下面就能看到这里的判断了
在w()里就有判断c()方法的
我们只需吧c()长按 跳转过去 改返回值为0就大功告成了
而这个c()就应该是判断会员日期相关的

Screenshot_2022-03-28-13-20-43-059_net.wifi.po.jpg Screenshot_2022-03-28-14-41-54-088_com.tencent.mo.jpg
而登入只有两种方式
Screenshot_2022-03-28-14-41-51-314_com.tencent.mo.jpg

这种方式只要修改了的软件都不方便登入进去 或者有的是根本登入不了{:301_1000:}

免费评分

参与人数 9吾爱币 +7 热心值 +8 收起 理由
未来路 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
junjia215 + 1 + 1 用心讨论,共获提升!
撒旦の恶 + 1 + 1 逆向的过程分析讲的不错,有个疑问new那个用户基础类为什么就能实现本地登.
qing1zhe + 1 用心讨论,共获提升!
笙若 + 1 + 1 谢谢@Thanks!
imnobody + 1 谢谢@Thanks!
celester + 1 热心回复!
杨辣子 + 1 + 1 谢谢@Thanks!
prospect2005 + 1 + 1 谢谢大牛,收藏学习。。。。。。。。

查看全部评分

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

 楼主| ywlYWL 发表于 2022-3-28 18:14
qq173339443 发表于 2022-3-28 16:26
能不能放好改好的包

吾爱的目的可是让我们进行学术上的交流,这样的吾爱才能顺应时代发展,也许以后会开放,但现在还是不方便.
yuechaomax 发表于 2022-3-30 16:57
prospect2005 发表于 2022-3-28 14:50
syc88 发表于 2022-3-28 14:54
收藏了,有时间学习学习
ciker_li 发表于 2022-3-28 15:20
学习学习,可惜没有收费软件
torrent 发表于 2022-3-28 15:32
羡慕有Arm Pro会员的楼主
七月上H 发表于 2022-3-28 16:00
谢谢分享
yellosky 发表于 2022-3-28 16:01
学习一下,自己搞搞看看能不能成功
qq173339443 发表于 2022-3-28 16:26
能不能放好改好的包
封狼居胥l7l 发表于 2022-3-28 16:58
谢谢大佬分享,学习了
kgzly001 发表于 2022-3-28 17:41
老铁,有成品吗,app 安卓的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-4-27 03:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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