逆向某视频app(二)

本文为纯技术分享,适合对xposed有兴趣的读者
逆向某视频app(一)
逆向某视频app(二)

前言

距离上一篇文章逆向某视频app(一) 已经过去快两年了φ(* ̄0 ̄),我来填坑了,上一篇文章讲了如何使用xposed破解apk,但是xposed有诸多限制,所以这篇文章来讲一下怎样通过修改smali代码破解apk并重新打包。
由于年代有些久远,这次我选择了其他的app,但是技术和原理都是一样的。 注意本文章只是技术研究,侵权立删

步骤

其实如果app没有加固,我们只需要掌握一点smali的语法就可以直接修改并打包了,但是加固之后就会麻烦很多,首先需要脱壳拿到真正的dex文件,然后再反编译dex找到并修改smali文件,接着还要修改AndroidManifest.xml文件,因为加固的时候也会修改这里,最后再重新打包。

工具

1.反编译apk

使用jadx打开apk文件,发现源码如下:
在这里插入图片描述
可以看到这里使用了邦邦加固看不到真正的代码,这里就需要脱壳了,下面是脱壳后的文件
在这里插入图片描述
把其中的dex拖到jadx中,可以看到已经能够看到原来的代码了
在这里插入图片描述

2.获取smali源码

baksmali可以让dex转成smali源码,smali可以让smali源码转成dex。
找到你要修改的smali所在的dex,使用baksmali反编译dex拿到smali源码,这里我们修改一下UserInfo的nickname字段,通过jadx我们发现这个类在0x742539b000.dex中
在这里插入图片描述
执行下面的命令编译

java -jar baksmali-2.3.jar d classse.dex

在这里插入图片描述

smali代码会输出到out文件夹中,下面就是修改。

3.修改smali文件

通过类的路径找到smali文件通过文本编辑器打开,由于我们要修改nickname,那就让getNickname返回一个固定字符串就可以了,先看一下getNickname在smali中是什么样的,(smali的语法这里就不展开了,可以自行去百度)

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

    .line 74
    //获取当前对象的nickname字段
    iget-object v0, p0, Lcom/xiaoxigua/media/net/bean/UserInfo;->nickname:Ljava/lang/String;
    //返回nickname字段
    return-object v0
.end method

修改后:

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

    .line 74
    const-string v1, "hello world"

    return-object v1
.end method

我们这里直接返回一个字符串,smali文件到这里就已经改好了。

我们将改好的smali转换成dex文件,执行下面的命令:

java -jar smali-2.5.2.jar a out
在这里插入图片描述

4.修复AndroidManifest.xml

首先使用apktools将下载下来的原始apk进行反编译:

java -jar apktool_2.6.0…jar d apkName

在这里插入图片描述
使用文本编辑软件打开AndroidManifest.xml。

由于加固后AndroidManifest.xml文件中的android:appComponentFactory=“com.SecShell.SecShell.AP”android:name=“com.SecShell.SecShell.AW” 被修改了,这里我们要改成原来的application,找一下application的位置并不难,至于appComponentFactory改成androidx.core.app.CoreComponentFactory 就可以了。

全局搜索SecShell 关键字,将有关的模块全部删除。

5.重新打包

还是使用上面反编译后的目录,将smali文件夹删除,然后将之前的dex文件拷贝过来,并修改成如下的命名:
在这里插入图片描述

执行命令打包apk

java -jar apktool_2.6.0…jar b apkName

成功之后会在文件夹下生成一个disk目录,里面就是重打包之后的apk,但是这个apk没有签名,需要重新签名之后,才能安装。

执行下面的命令生成一个签名文件

keytool -genkey -alias abc.keystore -keyalg RSA -validity 20000 -keystore abc.keystore

使用下面的命令对重打包之后的apk进行签名

jarsigner -verbose -keystore abc.keystore -signedjar apprelease_signed.apk apprelease.apk abc.keystore

最后安装这个apk文件。

猜你喜欢

转载自blog.csdn.net/shanshui911587154/article/details/102551299
今日推荐