二次打包是什么
正常情况是开发者编写代码设计界面,然后使用Android Studio编译、打包成一个最终的APK。最后使用开发者签名为APK签名后就可以发布了,这个拥有原始开发者签名的APK就是正版应用。
二次打包是指通过技术手段对正版应用APK进行反编译、解包。在其中插入、修改或删除特定代码和资源后,重新打包APK并签一个伪造签名,从而制作出一个盗版、破解版的应用。
二次打包的作用
- 植入恶意代码,窃取用户信息。
- 篡改应用功能,进行非法牟利。
- 伪造官方应用,进行钓鱼诈骗。
二次打包-篡改应用实践
目标

- 修改应用标题。
- 点击登录后,提示当前输入用户名和密码。
- 修改登录逻辑,任何用户名和密码都可以登录成功。
使用工具
- 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 应用提供全方位的安全防护,有效保障开发者的知识产权与商业利益。