APK在PC上面就被看作一个压缩格式文件,在手机上面它就算一个可执行格式文件。两种格式对它的读取要求也有区别,所以说利用这个区别来实现伪加密。对PC端来讲伪加密的APK没法被解包无法被反编译,但是对android系统来说它完全不会影响正常的安装运行(对4.2以前的系统)。
伪加密的原理:读取APK的字节,找到连续4位字节标记为”PK0102”的后第5位字节,如果是0表示不加密,如果是1就表示加密(伪加密就强行改成1反伪加密就是把1改成0就可以了)。
伪加密前和伪加密后的对比图如下:
伪加密前:
⑵ Android APK+Dex文件反编译及回编译工具的常见问题
1、被杀毒软件拦截误杀(安装前,关闭杀毒软件)
2、没有管理员权限(右键以管理员身份运行C:Apkdb安装.exe)或者,使用兼容模式 (右键-属性-兼容性-兼容模式[Windows XP SP3])以及 特权等级 勾选“以管理员身份运行此程序”
3、UAC限制 安装过程没有写入注册表提示,直接显示安装完成(右键 我的电脑-管理-本地用户和组-用户-Administrator(√ 密码永不过期)请在系统变量【path】里最前面添加 c:windows;c:windowssystem32;4、正常安装成功,安装过程有写入注册表提示,但是右键APK 没有菜单(检查是不是安装了PC版的手机管理工具,关联了APK文件)
5、安装后无法编译文件,提示JAVA 错误(未安装JAVA平台,或安装错误。请卸载后重启电脑,重装再次重启电脑)
6、安装成功后,编译文件提示 “Can't create the output directory \****smali”(这是文件夹 没有写入权限。检查是否直接在硬盘分区根目录编译了?Apktool不能在磁盘分区。如:C盘 D盘 根目录!如果不是根目录,请检查apk文件名称是不是有问题。如,文件名结尾空格。)
7、能反编译,但无法回编译(可能是被旧版本的Apktool编译过,试试用旧版的反编译,用新版的回编译)
8、回编译出错问题:(1.提示 strings.xml 最后一行错误,检查是否</string>符号错误;(2.提示 strings.xml 最顶部含中文代码首行错误,编码格式不对,转换成 UTF-8;(3.提示 public.xml 出错,检查改动过的 arrays.xml 是否代码有错误的地方;(4.其他错误,检查是否复制aapt.exe 文件到系统目录如:C:WindowsSystem32aapt.exe
9、安装过程提示 systeminfo 提示“不是内部或外部命令”请在系统变量【path】里最前面添加 c:windows;c:windowssystem32;或者手动添加这个变量,如果还是不行可能系统不完整,重装吧)
10、如果安装过程中,未显示【操作成功完成】只显示:....................请在系统变量【path】里最前面添加 c:windows;c:windowssystem32;
11、64位系统,如果JAVA出错,建议把32位和64位的JAVA一起装上。
12、Win8用户 需要注意一下,如果安装了手机助手,需要,手动关联APK文件apk文件鼠标右键,【打开方式】-【选择默认程序】-【APK安装器】
⑶ Android上,怎么用16进制加密apk的dex文件让别人无法反编译或进内部查看原代码
可以在Dex文件头隐藏另一个DEX数据并在运行时加载附带DEX数据。
构建非规范的Dex文件
通过反射调用DexFile类的方法加载附带DEX数据
通过反射实际调用DexFile的openDexFile方法
该种方式允许通过byte[]解析dex数据,而无须在再把DEX数据存储在设备的某个文件。
可以从安装APK文件、内存或dalvik-cache等读取dex数据。
该种方式将给自动化分析工具带来一个问题,自动化工具会按照dex格式处理DEX文件而不会处理附带的dex数据。需要特定的工具、16进制编辑器或手工提取嵌入的dex数据。
我们可以采用各种不同的方式增加嵌入数据的提取难度,比如:
对嵌入的DEX数据进行加密;
嵌入的DEX数据加密后在对其进行ZIP压缩;
使用native代码解密,直接从内存加载;
......等等
该种隐藏方式可以通过判断Dex文件头长度是否大于0x70检测。