安卓应用二次打包

二次打包是什么

正常情况是开发者编写代码设计界面,然后使用Android Studio编译、打包成一个最终的APK。最后使用开发者签名为APK签名后就可以发布了,这个拥有原始开发者签名的APK就是正版应用。

二次打包是指通过技术手段对正版应用APK进行反编译、解包。在其中插入、修改或删除特定代码和资源后,重新打包APK并签一个伪造签名,从而制作出一个盗版、破解版的应用。

二次打包的作用

  • 植入恶意代码,窃取用户信息。
  • 篡改应用功能,进行非法牟利。
  • 伪造官方应用,进行钓鱼诈骗。

二次打包-篡改应用实践

目标

  1. 修改应用标题。
  2. 点击登录后,提示当前输入用户名和密码。
  3. 修改登录逻辑,任何用户名和密码都可以登录成功。

使用工具

  • apktool

流程

解包

执行 apktool d xxx.apk -o 1,进行apk反编译

修改逻辑

修改应用标题

打开res\values\strings.xml文件修改app_name节点值为Cracker

修改代码逻辑

打开smali\hfdcxy\com\myapplication\MainActivity.smali文件,修改check函数代码。

原始代码:


# virtual methods
.method public check(Ljava/lang/String;Ljava/lang/String;)V
  .locals 2
  .param p1, "name"   # Ljava/lang/String;
  .param p2, "pass"   # Ljava/lang/String;

  .prologue
  const/4 v1, 0x0

  .line 28
  const-string v0, "hfdcxy"

  invoke-virtual {p1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

  move-result v0

  if-eqz v0, :cond_0

  const-string v0, "1234"

  invoke-virtual {p2, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

  move-result v0

  if-eqz v0, :cond_0

  .line 30
  const-string v0, "\u767b\u5f55\u6210\u529f"

  invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

  move-result-object v0

  invoke-virtual {v0}, Landroid/widget/Toast;->show()V

  .line 34
  :goto_0
  return-void

  .line 33
  :cond_0
  const-string v0, "\u767b\u5f55\u5931\u8d25"

  invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

  move-result-object v0

  invoke-virtual {v0}, Landroid/widget/Toast;->show()V

  goto :goto_0
.end method

修改后:


# virtual methods
.method public check(Ljava/lang/String;Ljava/lang/String;)V
  .locals 4
  .param p1, "name"   # Ljava/lang/String;
  .param p2, "pass"   # Ljava/lang/String;

  .prologue

  goto :success_0

  const-string v0, "hfdcxy"

  invoke-virtual {p1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

  move-result v0

  if-eqz v0, :cond_0

  const-string v0, "1234"

  invoke-virtual {p2, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

  move-result v0

  if-eqz v0, :cond_0


  :success_0


  new-instance v0, Ljava/lang/StringBuilder;

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

  const-string v1, "user:"

  invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

  move-result-object v0

  invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

  move-result-object v0

  const-string v1, ", pass:"

  invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

  move-result-object v0

  invoke-virtual {v0, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

  move-result-object v0

  const-string v1, "\n"
   
  invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

  move-result-object v0

  const-string v1, "\u767b\u5f55\u6210\u529f"
   
  invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

  move-result-object v0

  invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

  move-result-object v0

  const/4 v1, 0x1

  invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

  move-result-object v0

  invoke-virtual {v0}, Landroid/widget/Toast;->show()V


  :goto_0
  return-void


  :cond_0
  const/4 v1, 0x1

  const-string v0, "\u767b\u5f55\u5931\u8d25"

  invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

  move-result-object v0

  invoke-virtual {v0}, Landroid/widget/Toast;->show()V

  goto :goto_0
.end method

修改后的逻辑为,不校验用户名和密码,并且在登录成功的提上是添加输入的用户名和密码。

重新打包

使用apktool b .\depack -o 1.apk命令重新打包apk。

重新签名

打开virbox Proetctor工具中的Keystore生成工具生成签名文件。

打开virbox Proetctor工具中的APK/ABB签名工具生成签名后的apk。

效果图

安全防范

Virbox Protector 为Android应用提供专业的二次打包防护,核心功能是签名与文件完整性校验,通过运行时动态验证APK签名和文件完整性,能有效阻止应用被非法二次打包。还提供函数虚拟化技术:将关键Java方法为自定义虚拟机指令集,通过专属虚拟机解释执行,使原始代码逻辑完全被虚拟化保护层包裹。虚拟化后的代码具有极高的抗分析强度,传统的反编译工具无法还原真实逻辑,即使攻击者获取到APK文件也难以理解和修改核心功能。

Virbox Protector 通过多种技术手段为 Android 应用提供全方位的安全防护,有效保障开发者的知识产权与商业利益。

滚动至顶部
售前客服
周末值班
电话

电话

13910187371