您的当前位置:首页>全部文章>文章详情

APK篡改与重新打包

发表于:2026-05-01 23:56:22浏览:9次TAG: #apk #信息篡改

这里分享的是安全技术,切忌,破解属于侵权行为(毕竟这个技术必然会被人用于破解他人软件),这里只做技术分享和说说最简单的反编译APK思路。示例软件不公开,也不用找我要,只是普通APK,没有什么破解价值。(这里的示例是一个未加固的APK,若APK已加固则处理起来会很麻烦,这里不做过多解释,避免被别有用心之人利用,毕竟市面上其实大部分APK都加固了)

  • 先准备好今天的主角,一个待篡改的APK安装包文件。(此APK未加固)
    图片alt

  • 在此之前,我们需要准备好几个工具。

    • apktool
      用于反编译apk文件为smali
    • Android Build Tools
      这个在安装安卓SDK时会附带,在你的sdk文件夹下的build-tools文件夹下,加入PATH即可
      后面提到的jarsignerzipalign等全部出自这个包
    • APK Editor Studio
      如果你只是想改名称、logo等基础内容,这个软件足够你用

下面正式开始

  • 解包APK

    • 在apk文件所在文件夹下,打开CMD,执行如下指令:

      apktool d base.apk -o base
      
    • 输出
      图片alt

    • 这样,我们就得到的反编译的结果(位于base文件夹下)
      图片alt
      图片alt
    • 这里面有所有的安装包下的文件,至于已被编译的class.dex等dex文件,则位于smali文件夹及其他两个以此开头的文件夹内,是一堆类似汇编的源代码(我也没学过这个,看着像汇编,所以大致其实可以看懂,并进行修改)。我们这里使用vscode打开它。

篡改apk

  • 实现免登录
    直接搜索isLogin发现这里有个方法实现。打开它(方法名不一定,基本靠猜,若加固了,这里全是混淆过的,猜不出来的)
    图片alt
    图片alt
    这里有个return v0,很简单嘛,直接在最后,把true赋值给v0不就好了,新增一行(放在return前面即可):

      const/4 v0, 0x1
    
  • 改永久会员
    这里就得靠猜了,我试了半天,发现有一个isLifetime的方法,看看:
    图片alt

    • 这里发现还有里面的一个isVip方法里的被调用方法is_expired方法,顺着找
      图片alt
      果然有这个方法
      图片alt
      这里直接把返回值赋值为0
      图片alt
  • 增加登录数据
    这里都已经免登录了,为了避免bug,所以我们得伪造一个登录信息出来。这个就容易猜了,直接搜userInfo,发现里面有个getuid方法,我们给他直接赋值返回一个数字(类型是字符串,但是为了确保安全,还是用数字型字符串吧)。
    图片alt

  • 到这里,所有的篡改都差不多结束了,接下来我们试验下吧,第一步,当然是把它重新打包回apk,在终端下执行命令:

    apktool b base -o new.apk
    

这里编译有点慢,需要等一会儿。
图片alt
图片alt
此时,我们就得到了一个已经篡改好的apk文件了,当然,到这里远没有结束,篡改后的apk是没有签名的,需要先签名。

APK签名

  • 先生成一个jks签名文件:

    keytool -genkey -v -keystore release.jks -alias myapp -keyalg RSA -keysize 2048 -validity 36500
    

    跟着流程走完,我们就得到了一个release.jks签名文件了。
    图片alt
    这里需要设置口令,务必记住,这是后面签名所需的,信息可以随便填,之后是否正确输入y即可。

  • 这里先科普一个坑,我们的apk是篡改的,如果直接签名的话,安装时会报packageInfo is NULL,后来发现,这里需要先对齐,所以第一步,当然是对齐。

  • 执行APK对齐操作

    zipalign -p -f -v 4 new.apk aligned.apk
    

    图片alt
    最后输出Verification succesful就成功了,如果不放心,可使用zipalign -c -p -v 4 aligned.apk验证对齐。

  • 最后一步,执行签名,这里小心,建议使用apksigner进行签名,否则还是容易报前面那个报错。

    apksigner sign --ks release.jks --out app.apk aligned.apk
    

    按照要求输入签名的签名文件的口令,即可完成签名。
    图片alt
    我们便得到了最终的安装包:app.apk文件

接下来就可以安装测试了,再根据具体情况做调整修复即可。