㈠ JVM_字节码文件(ClassFile)详解
我们知道 javac 命令可以将 .java 文件编译成 .class 文件,而这个 Class 文件 中包含了 Java虚拟机 指令集、符号表以及若干其他辅助信息;最终将在 Java虚拟机 运行。
本文是以 JVM8 为例的。
每一个 Class文件 都有如下的 ClassFile 文件结构:
先简单介绍一下 ClassFile 文件结构各部分含义:
描述符是表示字段或方法类型的字符串。
字段描述符表示类、实例或局部变量的类型。
从上面文法可以看出,字段描述符中一共有三个类型:
方法描述符包含 0 个或者多个参数描述符以及一个返回值描述符。
看了描述符,可能大家有点疑惑,泛型信息怎么表示啊?
常量池的通用格式如下:
目前 JVM8 中一共用 14 种常量类型,分别如下:
我们知道要使用一个字段或者调用一个方法,就必须知道字段或者方法所属类符号引用,和字段的名字和类型,方法的名字和方法参数类型以及方法返回值类型。
但是我们知道类是能继承的,那么子类调用父类的方法或者字段,这里的所属类符号引用,到底是子类本身还是父类的呢?
我们知道类,方法,字段都有不同的访问标志,在 Class 文件 中使用一个 u2 类型数据项来存储,也就是最多可以有 16 个不同标志位。
在类,方法,字段中有相同的标志,也有不同的标志,总体规划,我们可以借助 Modifier 类的源码来了解:
在 Modifier 类中,类的访问标志:
我们知道在 java 中类可以用的修饰符有: public , protected , private , abstract , static , final , strictfp 。
但是我们再看 Class 文件 中类的访问标志:
仔细看,你会发现有些不同点:
在 Modifier 类中,字段的访问标志:
我们知道在 java 中字段可以用的修饰符有: public , protected , private , static , final , transient 和 volatile 。
但是我们再看 Class 文件 中字段的访问标志:
Class 文件 中字段的访问标志和 java 中字段的修饰符差不多,只是多了 ACC_SYNTHETIC 和 ACC_ENUM 两个标志。
在 Modifier 类中,方法的访问标志:
我们知道在 java 中方法可以用的修饰符有:
public , protected , private , abstract , static , final , synchronized , synchronized 和 strictfp 。
但是我们再看 Class 文件 中方法的访问标志:
字段详情 field_info 的格式如下:
方法详情 method_info 的格式如下:
关于 Class 文件 中属性相关信息,我们再后面章节介绍。
我们可以通过 javap 的命令来阅读 Class 文件 中相关信息。
这个是最简单的一个类,没有任何字段和方法,只继承 Object 类,我们来看看它编译后的字节码信息,通过 javap -p -v T.class 的命令:
我们重点关注常量池相关信息,会发现虽然 T.class 很干净,但是也有 15 个常量,来我们依次分析:
与之前的例子相比较,多了一个字段和方法,那么得到的字节码信息如下:
但是你会发现常量池中怎么没有这个字段 name 的 CONSTANT_Fieldref_info 类型的常量呢?
那是因为我们没有使用这个字段。
多写了一个方法 test1 来调用 name 字段和 test 方法,那么得到的字节码信息如下:
这里定义一个父类 TParent ,有一个公共字段 name 和方法 say 。子类
㈡ 安卓app应用制作好了 如何更改啊
一、制作好的 .apk 文件如果有源码,可以在源码中进行修改,修改完成后重新生成即可。
二、使用类似RE管理器之类的工具,但是如果存在以后两种情况是改不了的。
1、APP非自身开发创建。
2、签名已经生成,无修改签名的权限。
㈢ 什么是字节码文件
字节码文件是经过编译器预处理过的一种文件,是JAVA的执行文件存在形式,
Java源程序(.java)要先编译成与平台无关的字节码文件(.class),然后字节码文件再解释成机器码运行。解释是通过Java虚拟机来执行的。
它本身是二进制文件,但是不可以被系统直接执行,而是需要虚拟机解释执行,由于被预处理过,所以比一般的解释代码要快,但是仍然会比系统直接执行的慢。
(3)app中如何修改字节码文件扩展阅读:
在计算机中,数据只用0和1两种表现形式,(这里只表示一个数据点,不是数字),一个0或者1占一个“位”,而系统中规定8个位为一个字节,用来表示常用的256个字母、符号、控制标记,其中用一个位来进行数据校验,其他七个位用来记录数据。
按计算机中的规定,一个英文的字符占用一个字节,(如,."':;avcAVC都占用一个字节),而一个汉字以及汉字的标点符号、字符都占用两个字节,(如,。“”:;AVCavc他们就得占用两个字节)。
另外,他们是没有办法比较的,只能将一个字符占用一个字节,N个字符占用N个字节。
K是千 M是兆 G是吉咖 T是太拉 8bit(位)=1Byte(字节) 1024Byte(字节)=1KB 1024KB=1MB 1024MB=1GB 1024GB=1TB 1024TB=PB 1024PB=1EB 1024EB=1ZB 1024ZB=1YB 1024YB=1BB。
目前最大的计量单位是1BB (Brontobyte)= 1024 YB=10^27。
㈣ Android APP加密方法都有哪些
伪加密是Android4.2.x系统发布前的Android加密方式之一,通过java代码对APK(压缩文件)进行伪加密,其修改原理是修改连续4位字节标记为”P K 01 02”的后第5位字节,奇数表示不加密偶数表示加密。
Android APP加密方法都有哪些?
虽然伪加密可以起到一定防破解作用,但也会出现问题,首先使用伪加密对其 Android APK加密后市场无法对其进行安全检测,导致部分市场会拒绝这类APK上传;其次,伪加密的加密方式和解密方式也早已公布导致它的安全程度也大大降低;再次,Android4.2.x系统无法安装伪加密的APK;最后伪加密只是对APK做简单保护,在java层源码加壳保护、核心so库、资源文件、主配文件、第三方架包方面却没有任何保护处理。Android APP加密方法都有哪些?
混淆保护
把原来有具体含义的类名,变量名,方法名,修改成让人看不懂的名字,例如方法名getUserName编程了方法名。Android APP加密方法都有哪些?
混淆保护只是增加了代码阅读难度,对于破解基本上是没有实质性作用的!Android APP加密方法都有哪些?
运行时验证
运时验证,主要是指在代码启动的时候本地获取签名信息然后对签名信息进行检验来判断自己的应用是否是正版,如果签名信息不是正版则提示盗版或者直接崩溃。当然你可以把必要的数据放在服务器端。Android APP加密方法都有哪些?破解:找到smali文件中,判断是否相等的部分。改为常量true,即失效。
总之,反编译一些apk之后,只要是java代码写的总会有smil文件。对于smil文件,如果耐心读的话,还是可以查看到一些关键代码的。
相较于应用来说,游戏apk因为采用cocos2d-x或者 unity3D,采用的是c++和c# 编写的跨平台程序,在apk采用JNI的方式。所以没有smali,可以防止静态被破解apk包。Android APP加密方法都有哪些?
当然游戏包apk在运行的时候,会把.*so加载到内存中。动态也是可以在内存中抓取相应的数据。只不过NDK相对于smali破解来说,根部不是一个层级的关系。=
㈤ 如何修改apk游戏文件
修改的方法如下参考:
1.将需要修改的apk包复制到apktool路径中。注意:您需要将文件名更改为123apk。