安卓逆向实战——录音达人

前言

这是从mt论坛的一篇教程帖子而来的,算是比较简单的入门级逆向了,但我觉得可以很好地体现逆向思路,于是便记录了下来。

正文

首先观察这个软件的会员截图

6553C67F466E40634ACD981A30B238A7

提示有VIP,而且需要登陆才可以使用。

然后果断放到mt里面看看情况。

这款软件逆向起来比较简单,没有加壳,但有签名验证。所以首先是用mt管理器对它进行去签处理,就用v1+v2+v3的版本就行了。

41B41AA72F1CB66E5CD92DAE30C18619

去签了之后就可以对dex文件进行逆向操作了。

这种简单的app直接搜方法名就行了。搜索isvip,进入第一个方法。

07AFEB63A5F7BD1E848BBD002C38A582

然后就开始分析smial语法就行了。我就直接把smile语法贴出来了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.method public isVip()Z
.registers 2 //申请寄存器,提示需要两个变量

.line 1
sget-object v0, Lf4/e$b;->a:Lf4/e;

.line 2
invoke-virtual {v0}, Lf4/e;->d()Z //传递进v0变量到d函数中,并且返回一个布尔变量

move-result v0 //将上一步返回的变量储存到v0中

const/4 v0, 0x1 //逆向代码,这是我编辑上去的

return v0 //结束方法,返回v0
.end method

分析可知,这是一个判断是否为vip的方法,就是通过d函数的返回值来判断是否为vip,这里mt论坛上的原帖是再次进入d函数中,针对d函数所返回的值进行逆向,也是可行的,我就直接在下面加了一行代码,将v0强行赋值为1,一样可以实现逆向。

效果如下,可以看到已经成为VIP了。

7ECCE2F26292E5245074751E230D3106

然后就是关于文字转语音的时长破解。

在isvip的方法往上翻,可以找到这个方法getUserTimeS

1
2
3
4
5
6
7
8
9
10
11
12
13
.method public getUserTimeS()J
.registers 3

.line 1
sget-object v0, Lj4/l$c;->a:Lj4/l;

.line 2
invoke-virtual {v0}, Lj4/l;->d()J

move-result-wide v0

return-wide v0
.end method

这个就是控制可语音转文字时长的关键代码。修改原理跟上面的类似,也是直接在返回v0的值前给v0赋值。

这里我用的论坛给的数据。

1
const-wide v0, 0x4102369980000L

这样对v0进行赋值就可以了。

34919DE19662CA990A24BEF675F28A3E

逆向成功,可以正常使用语音转文字功能。帖子里的逆向方法是继续进入d函数里面,对d函数的返回值进行修改,大同小异,也可以最终实现功能

后记

至此,所有的逆向已经结束。附上原帖:https://bbs.binmt.cc/thread-142642-1-1.html