android向byte插入字节

  public static byte[] sendSocketData(byte[] buff){

        int len=buff.length;
        byte [] sendData=new byte[len+12];

        byte phb1=(byte)0xBF;
        byte phb2=(byte)0xBF;
        byte phb3=(byte)0xBF;
        byte phb4=(byte)0xBF;
        byte phb5=(byte)0xBF;


        byte peb1=(byte)0xDE;
        byte peb2=(byte)0xDE;
        byte peb3=(byte)0xDE;
        byte peb4=(byte)0xDE;
        byte peb5=(byte)0xDE;


        sendData[0]=phb1;
        sendData[1]=phb2;
        sendData[2]=phb3;
        sendData[3]=phb4;
        sendData[4]=phb5;



        sendData[5]=(byte)((len >>8) & 0xff);
        sendData[6]=(byte)((len) & 0xff);

        System.arraycopy(buff, 0, sendData, 7 ,len);

        sendData[len+7]=peb1;
        sendData[len+8]=peb2;
        sendData[len+9]=peb3;
        sendData[len+10]=peb4;
        sendData[len+11]=peb5;
        return  sendData;

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio 中修改字节码需要使用字节码操作库,例如 ASM (Java 字节码操作框架)。 以下是基本的步骤: 1. 添加 ASM 依赖项到项目中。在 app 模块的 build.gradle 文件中添加以下代码: ``` dependencies { implementation 'org.ow2.asm:asm:9.1' } ``` 2. 创建一个 ClassVisitor 子类来访问要修改的类的字节码。该子类必须实现 visitMethod 方法,该方法将返回一个 MethodVisitor 子类,该子类将访问类的方法字节码。 ``` public class MyClassVisitor extends ClassVisitor { public MyClassVisitor(ClassVisitor classVisitor) { super(Opcodes.ASM7, classVisitor); } @Override public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { MethodVisitor mv = super.visitMethod(access, name, descriptor, signature, exceptions); return new MyMethodVisitor(mv); } } ``` 3. 创建一个 MethodVisitor 子类来访问要修改的方法的字节码。该子类必须实现 visitInsn 方法,该方法将返回一个 InsnList,该列表将包含要插入到方法中的操作码。 ``` public class MyMethodVisitor extends MethodVisitor { public MyMethodVisitor(MethodVisitor methodVisitor) { super(Opcodes.ASM7, methodVisitor); } @Override public void visitInsn(int opcode) { if (opcode == Opcodes.RETURN) { InsnList list = new InsnList(); list.add(new FieldInsnNode(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;")); list.add(new LdcInsnNode("Hello, World!")); list.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false)); super.visitFieldInsn(Opcodes.RETURN); } else { super.visitInsn(opcode); } } } ``` 4. 在 AndroidManifest.xml 文件中将应用程序的启动活动指定为要修改的类。 5. 创建一个应用程序类,该类将使用 ASM 库读取和修改要修改的类的字节码。 ``` public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); try { ClassReader reader = new ClassReader("com.example.MyClass"); ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); ClassVisitor visitor = new MyClassVisitor(writer); reader.accept(visitor, ClassReader.EXPAND_FRAMES); byte[] modifiedClass = writer.toByteArray(); // 将修改后的字节码写回到应用程序的 dex 文件中 // ... } catch (IOException e) { e.printStackTrace(); } } } ``` 注意:修改字节码可能会导致应用程序的崩溃或不稳定。如果您不熟悉字节码操作和 Java 虚拟机的工作原理,请先进行充分的学习和测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值