- 浏览: 2146573 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
伪加密的apk有那么难么?了解原理就没啥可怕的。放出java代码,python的早就有了。
---------------
------------------
代码都是从jdk7修扣出来的。
jdk6的zip api是native的,没发绕过密码检测,jdk7倒是可以覆写绕过
jdk7用java实现了zipfilesystem,这代码就是从那里面扣出来的,简单修改下判断就ok了
package com.rover12421.apkutil; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.util.Arrays; import java.util.zip.ZipError; import static com.rover12421.apkutil.ZipConstants.*; public class ApkUtilTool { private FileChannel ch; // channel to the zipfile private FileChannel fc; /** * 修复zip伪加密状态的Entry * @param inZip * @param storeZip * @throws IOException */ public void FixEncryptedEntry(File inZip, File fixZip) throws IOException { changEntry(inZip, fixZip, true); } /** * 修复zip伪加密状态的Entry * @param inZip * @param storeZip * @throws IOException */ public void FixEncryptedEntry(String inZip, String fixZip) throws IOException { FixEncryptedEntry(new File(inZip), new File(fixZip)); } /** * 修改zip的Entry为伪加密状态 * @param inZip * @param storeZip * @throws IOException */ public void ChangToEncryptedEntry(File inZip, File storeZip) throws IOException { changEntry(inZip, storeZip, false); } /** * 修改zip的Entry为伪加密状态 * @param inZip * @param storeZip * @throws IOException */ public void ChangToEncryptedEntry(String inZip, String storeZip) throws IOException { ChangToEncryptedEntry(new File(inZip), new File(storeZip)); } /** * 更改zip的Entry为伪加密状态 * @param inZip * @param storeZip * @param fix ture:修复伪加密 false:更改到伪加密 * @throws IOException */ private void changEntry(File inZip, File storeZip, boolean fix) throws IOException { FileInputStream fis = new FileInputStream(inZip); FileOutputStream fos = new FileOutputStream(storeZip); byte[] buf = new byte[10240]; int len; while ((len = fis.read(buf)) != -1) { fos.write(buf, 0, len); } ch = fis.getChannel(); fc = fos.getChannel(); changEntry(fix); ch.close(); fc.close(); fis.close(); fos.close(); } // Reads zip file central directory. Returns the file position of first // CEN header, otherwise returns -1 if an error occured. If zip->msg != NULL // then the error was a zip format error and zip->msg has the error text. // Always pass in -1 for knownTotal; it's used for a recursive call. private void changEntry(boolean fix) throws IOException { END end = findEND(); if (end.cenlen > end.endpos) zerror("invalid END header (bad central directory size)"); long cenpos = end.endpos - end.cenlen; // position of CEN table // Get position of first local file (LOC) header, taking into // account that there may be a stub prefixed to the zip file. long locpos = cenpos - end.cenoff; if (locpos < 0) zerror("invalid END header (bad central directory offset)"); // read in the CEN and END byte[] cen = new byte[(int)(end.cenlen + ENDHDR)]; if (readFullyAt(cen, 0, cen.length, cenpos) != end.cenlen + ENDHDR) { zerror("read CEN tables failed"); } int pos = 0; int limit = cen.length - ENDHDR; while (pos < limit) { if (CENSIG(cen, pos) != CENSIG) zerror("invalid CEN header (bad signature)"); int method = CENHOW(cen, pos); int nlen = CENNAM(cen, pos); int elen = CENEXT(cen, pos); int clen = CENCOM(cen, pos); if (fix) { if ((CEN***(cen, pos) & 1) != 0) { byte[] name = Arrays.copyOfRange(cen, pos + CENHDR, pos + CENHDR + nlen); System.out.println("Found the encrypted entry : " + new String(name) + ", fix..."); //b[n] & 0xff) | ((b[n + 1] & 0xff) << 8 cen[pos+8] &= 0xFE; // cen[pos+8] ^= CEN***(cen, pos) % 2; // cen[pos+8] ^= cen[pos+8] % 2; // zerror("invalid CEN header (encrypted entry)"); } } else { if ((CEN***(cen, pos) & 1) == 0) { byte[] name = Arrays.copyOfRange(cen, pos + CENHDR, pos + CENHDR + nlen); System.out.println("Chang the entry : " + new String(name) + ", Encrypted..."); //b[n] & 0xff) | ((b[n + 1] & 0xff) << 8 cen[pos+8] |= 0x1; // zerror("invalid CEN header (encrypted entry)"); } } if (method != METHOD_STORED && method != METHOD_DEFLATED) zerror("invalid CEN header (unsupported compression method: " + method + ")"); if (pos + CENHDR + nlen > limit) zerror("invalid CEN header (bad header size)"); // skip ext and comment pos += (CENHDR + nlen + elen + clen); } writeFullyAt(cen, 0, cen.length, cenpos); if (pos + ENDHDR != cen.length) { zerror("invalid CEN header (bad header size)"); } } // Reads len bytes of data from the specified offset into buf. // Returns the total number of bytes read. // Each/every byte read from here (except the cen, which is mapped). final long readFullyAt(byte[] buf, int off, long len, long pos) throws IOException { ByteBuffer bb = ByteBuffer.wrap(buf); bb.position(off); bb.limit((int)(off + len)); return readFullyAt(bb, pos); } private final long readFullyAt(ByteBuffer bb, long pos) throws IOException { synchronized(ch) { return ch.position(pos).read(bb); } } final long writeFullyAt(byte[] buf, int off, long len, long pos) throws IOException { ByteBuffer bb = ByteBuffer.wrap(buf); bb.position(off); bb.limit((int)(off + len)); return writeFullyAt(bb, pos); } private final long writeFullyAt(ByteBuffer bb, long pos) throws IOException { synchronized(fc) { return fc.position(pos).write(bb); } } // Searches for end of central directory (END) header. The contents of // the END header will be read and placed in endbuf. Returns the file // position of the END header, otherwise returns -1 if the END header // was not found or an error occurred. private END findEND() throws IOException { byte[] buf = new byte[READBLOCKSZ]; long ziplen = ch.size(); long minHDR = (ziplen - END_MAXLEN) > 0 ? ziplen - END_MAXLEN : 0; long minPos = minHDR - (buf.length - ENDHDR); for (long pos = ziplen - buf.length; pos >= minPos; pos -= (buf.length - ENDHDR)) { int off = 0; if (pos < 0) { // Pretend there are some NUL bytes before start of file off = (int)-pos; Arrays.fill(buf, 0, off, (byte)0); } int len = buf.length - off; if (readFullyAt(buf, off, len, pos + off) != len) zerror("zip END header not found"); // Now scan the block backwards for END header signature for (int i = buf.length - ENDHDR; i >= 0; i--) { if (buf[i+0] == (byte)'P' && buf[i+1] == (byte)'K' && buf[i+2] == (byte)'\005' && buf[i+3] == (byte)'\006' && (pos + i + ENDHDR + ENDCOM(buf, i) == ziplen)) { // Found END header buf = Arrays.copyOfRange(buf, i, i + ENDHDR); END end = new END(); end.endsub = ENDSUB(buf); end.centot = ENDTOT(buf); end.cenlen = ENDSIZ(buf); end.cenoff = ENDOFF(buf); end.comlen = ENDCOM(buf); end.endpos = pos + i; if (end.cenlen == ZIP64_MINVAL || end.cenoff == ZIP64_MINVAL || end.centot == ZIP64_MINVAL32) { // need to find the zip64 end; byte[] loc64 = new byte[ZIP64_LOCHDR]; if (readFullyAt(loc64, 0, loc64.length, end.endpos - ZIP64_LOCHDR) != loc64.length) { return end; } long end64pos = ZIP64_LOCOFF(loc64); byte[] end64buf = new byte[ZIP64_ENDHDR]; if (readFullyAt(end64buf, 0, end64buf.length, end64pos) != end64buf.length) { return end; } // end64 found, re-calcualte everything. end.cenlen = ZIP64_ENDSIZ(end64buf); end.cenoff = ZIP64_ENDOFF(end64buf); end.centot = (int)ZIP64_ENDTOT(end64buf); // assume total < 2g end.endpos = end64pos; } return end; } } } zerror("zip END header not found"); return null; //make compiler happy } static void zerror(String msg) { throw new ZipError(msg); } // End of central directory record static class END { int disknum; int sdisknum; int endsub; // endsub int centot; // 4 bytes long cenlen; // 4 bytes long cenoff; // 4 bytes int comlen; // comment length byte[] comment; /* members of Zip64 end of central directory locator */ int diskNum; long endpos; int disktot; @Override public String toString() { return "disknum : " + disknum + "\n" + "sdisknum : " + sdisknum + "\n" + "endsub : " + endsub + "\n" + "centot : " + centot + "\n" + "cenlen : " + cenlen + "\n" + "cenoff : " + cenoff + "\n" + "comlen : " + comlen + "\n" + "diskNum : " + diskNum + "\n" + "endpos : " + endpos + "\n" + "disktot : " + disktot; } } }
---------------
/* * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of Oracle nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.rover12421.apkutil; /** * * @author Xueming Shen */ class ZipConstants { /* * Compression methods */ static final int METHOD_STORED = 0; static final int METHOD_DEFLATED = 8; static final int METHOD_DEFLATED64 = 9; static final int METHOD_BZIP2 = 12; static final int METHOD_LZMA = 14; static final int METHOD_LZ77 = 19; static final int METHOD_AES = 99; /* * General purpose big flag */ static final int FLAG_ENCRYPTED = 0x01; static final int FLAG_DATADESCR = 0x08; // crc, size and csize in dd static final int FLAG_EFS = 0x800; // If this bit is set the filename and // comment fields for this file must be // encoded using UTF-8. /* * Header signatures */ static long LOCSIG = 0x04034b50L; // "PK\003\004" static long EXTSIG = 0x08074b50L; // "PK\007\008" static long CENSIG = 0x02014b50L; // "PK\001\002" static long ENDSIG = 0x06054b50L; // "PK\005\006" /* * Header sizes in bytes (including signatures) */ static final int LOCHDR = 30; // LOC header size static final int EXTHDR = 16; // EXT header size static final int CENHDR = 46; // CEN header size static final int ENDHDR = 22; // END header size /* * Local file (LOC) header field offsets */ static final int LOCVER = 4; // version needed to extract static final int LOC*** = 6; // general purpose bit flag static final int LOCHOW = 8; // compression method static final int LOCTIM = 10; // modification time static final int LOCCRC = 14; // uncompressed file crc-32 value static final int LOCSIZ = 18; // compressed size static final int LOCLEN = 22; // uncompressed size static final int LOCNAM = 26; // filename length static final int LOCEXT = 28; // extra field length /* * Extra local (EXT) header field offsets */ static final int EXTCRC = 4; // uncompressed file crc-32 value static final int EXTSIZ = 8; // compressed size static final int EXTLEN = 12; // uncompressed size /* * Central directory (CEN) header field offsets */ static final int CENVEM = 4; // version made by static final int CENVER = 6; // version needed to extract static final int CEN*** = 8; // encrypt, decrypt flags static final int CENHOW = 10; // compression method static final int CENTIM = 12; // modification time static final int CENCRC = 16; // uncompressed file crc-32 value static final int CENSIZ = 20; // compressed size static final int CENLEN = 24; // uncompressed size static final int CENNAM = 28; // filename length static final int CENEXT = 30; // extra field length static final int CENCOM = 32; // comment length static final int CENDSK = 34; // disk number start static final int CENATT = 36; // internal file attributes static final int CENATX = 38; // external file attributes static final int CENOFF = 42; // LOC header offset /* * End of central directory (END) header field offsets */ static final int ENDSUB = 8; // number of entries on this disk static final int ENDTOT = 10; // total number of entries static final int ENDSIZ = 12; // central directory size in bytes static final int ENDOFF = 16; // offset of first CEN header static final int ENDCOM = 20; // zip file comment length /* * ZIP64 constants */ static final long ZIP64_ENDSIG = 0x06064b50L; // "PK\006\006" static final long ZIP64_LOCSIG = 0x07064b50L; // "PK\006\007" static final int ZIP64_ENDHDR = 56; // ZIP64 end header size static final int ZIP64_LOCHDR = 20; // ZIP64 end loc header size static final int ZIP64_EXTHDR = 24; // EXT header size static final int ZIP64_EXTID = 0x0001; // Extra field Zip64 header ID static final int ZIP64_MINVAL32 = 0xFFFF; static final long ZIP64_MINVAL = 0xFFFFFFFFL; /* * Zip64 End of central directory (END) header field offsets */ static final int ZIP64_ENDLEN = 4; // size of zip64 end of central dir static final int ZIP64_ENDVEM = 12; // version made by static final int ZIP64_ENDVER = 14; // version needed to extract static final int ZIP64_ENDNMD = 16; // number of this disk static final int ZIP64_ENDDSK = 20; // disk number of start static final int ZIP64_ENDTOD = 24; // total number of entries on this disk static final int ZIP64_ENDTOT = 32; // total number of entries static final int ZIP64_ENDSIZ = 40; // central directory size in bytes static final int ZIP64_ENDOFF = 48; // offset of first CEN header static final int ZIP64_ENDEXT = 56; // zip64 extensible data sector /* * Zip64 End of central directory locator field offsets */ static final int ZIP64_LOCDSK = 4; // disk number start static final int ZIP64_LOCOFF = 8; // offset of zip64 end static final int ZIP64_LOCTOT = 16; // total number of disks /* * Zip64 Extra local (EXT) header field offsets */ static final int ZIP64_EXTCRC = 4; // uncompressed file crc-32 value static final int ZIP64_EXTSIZ = 8; // compressed size, 8-byte static final int ZIP64_EXTLEN = 16; // uncompressed size, 8-byte /* * Extra field header ID */ static final int EXTID_ZIP64 = 0x0001; // ZIP64 static final int EXTID_NTFS = 0x000a; // NTFS static final int EXTID_UNIX = 0x000d; // UNIX static final int EXTID_EFS = 0x0017; // Strong Encryption static final int EXTID_EXTT = 0x5455; // Info-ZIP Extended Timestamp /* * fields access methods */ /////////////////////////////////////////////////////// static final int CH(byte[] b, int n) { return b[n] & 0xff; } static final int SH(byte[] b, int n) { return (b[n] & 0xff) | ((b[n + 1] & 0xff) << 8); } static final long LG(byte[] b, int n) { return ((SH(b, n)) | (SH(b, n + 2) << 16)) & 0xffffffffL; } static final long LL(byte[] b, int n) { return (LG(b, n)) | (LG(b, n + 4) << 32); } static final long GETSIG(byte[] b) { return LG(b, 0); } // local file (LOC) header fields static final long LOCSIG(byte[] b) { return LG(b, 0); } // signature static final int LOCVER(byte[] b) { return SH(b, 4); } // version needed to extract static final int LOC***(byte[] b) { return SH(b, 6); } // general purpose bit flags static final int LOCHOW(byte[] b) { return SH(b, 8); } // compression method static final long LOCTIM(byte[] b) { return LG(b, 10);} // modification time static final long LOCCRC(byte[] b) { return LG(b, 14);} // crc of uncompressed data static final long LOCSIZ(byte[] b) { return LG(b, 18);} // compressed data size static final long LOCLEN(byte[] b) { return LG(b, 22);} // uncompressed data size static final int LOCNAM(byte[] b) { return SH(b, 26);} // filename length static final int LOCEXT(byte[] b) { return SH(b, 28);} // extra field length // extra local (EXT) header fields static final long EXTCRC(byte[] b) { return LG(b, 4);} // crc of uncompressed data static final long EXTSIZ(byte[] b) { return LG(b, 8);} // compressed size static final long EXTLEN(byte[] b) { return LG(b, 12);} // uncompressed size // end of central directory header (END) fields static final int ENDSUB(byte[] b) { return SH(b, 8); } // number of entries on this disk static final int ENDTOT(byte[] b) { return SH(b, 10);} // total number of entries static final long ENDSIZ(byte[] b) { return LG(b, 12);} // central directory size static final long ENDOFF(byte[] b) { return LG(b, 16);} // central directory offset static final int ENDCOM(byte[] b) { return SH(b, 20);} // size of zip file comment static final int ENDCOM(byte[] b, int off) { return SH(b, off + 20);} // zip64 end of central directory recoder fields static final long ZIP64_ENDTOD(byte[] b) { return LL(b, 24);} // total number of entries on disk static final long ZIP64_ENDTOT(byte[] b) { return LL(b, 32);} // total number of entries static final long ZIP64_ENDSIZ(byte[] b) { return LL(b, 40);} // central directory size static final long ZIP64_ENDOFF(byte[] b) { return LL(b, 48);} // central directory offset static final long ZIP64_LOCOFF(byte[] b) { return LL(b, 8);} // zip64 end offset // central directory header (CEN) fields static final long CENSIG(byte[] b, int pos) { return LG(b, pos + 0); } static final int CENVEM(byte[] b, int pos) { return SH(b, pos + 4); } static final int CENVER(byte[] b, int pos) { return SH(b, pos + 6); } static final int CEN***(byte[] b, int pos) { return SH(b, pos + 8); } static final int CENHOW(byte[] b, int pos) { return SH(b, pos + 10);} static final long CENTIM(byte[] b, int pos) { return LG(b, pos + 12);} static final long CENCRC(byte[] b, int pos) { return LG(b, pos + 16);} static final long CENSIZ(byte[] b, int pos) { return LG(b, pos + 20);} static final long CENLEN(byte[] b, int pos) { return LG(b, pos + 24);} static final int CENNAM(byte[] b, int pos) { return SH(b, pos + 28);} static final int CENEXT(byte[] b, int pos) { return SH(b, pos + 30);} static final int CENCOM(byte[] b, int pos) { return SH(b, pos + 32);} static final int CENDSK(byte[] b, int pos) { return SH(b, pos + 34);} static final int CENATT(byte[] b, int pos) { return SH(b, pos + 36);} static final long CENATX(byte[] b, int pos) { return LG(b, pos + 38);} static final long CENOFF(byte[] b, int pos) { return LG(b, pos + 42);} /* The END header is followed by a variable length comment of size < 64k. */ static final long END_MAXLEN = 0xFFFF + ENDHDR; static final int READBLOCKSZ = 128; }
------------------
代码都是从jdk7修扣出来的。
jdk6的zip api是native的,没发绕过密码检测,jdk7倒是可以覆写绕过
jdk7用java实现了zipfilesystem,这代码就是从那里面扣出来的,简单修改下判断就ok了
发表评论
-
带你深入理解 FLUTTER 中的字体“冷”知识
2020-08-10 23:40 569本篇将带你深入理解 Flutter 开发过程中关于字体和文 ... -
Flutter -自定义日历组件
2020-03-01 17:56 1029颜色文件和屏幕适配的文件 可以自己给定 import ... -
Dart高级(一)——泛型与Json To Bean
2020-02-23 19:13 926从 Flutter 发布到现在, 越来越多人开始尝试使用 Da ... -
flutter loading、Progress进度条
2020-02-21 17:03 1037Flutter Progress 1 条形无固定值进度条 ... -
Flutter使用Https加载图片
2020-02-21 01:39 903Flutter使用Https加载图片 使用http加载图片出 ... -
flutter shared_preferences 异步变同步
2020-02-21 00:55 768前言 引用 在开发原生iOS或Native应用时,一般有判断上 ... -
Flutter TextField边框颜色
2020-02-19 21:31 859监听要销毁 myController.dispose(); T ... -
flutter Future的正确用法
2020-02-18 21:55 733在flutter中经常会用到异步任务,dart中异步任务异步处 ... -
记一次Flutter简单粗暴处理HTTPS证书检验方法
2020-02-18 14:13 828最近在做Flutter项目到了遇到一个无解的事情,当使用Ima ... -
flutter 获取屏幕宽度高度 通知栏高度等屏幕信息
2019-07-27 08:39 1225##MediaQuery MediaQuery.of(con ... -
关于flutter RefreshIndicator扩展listview下拉刷新的问题
2019-07-10 19:40 1000当条目过少时listview某些嵌套情况下可能不会滚动(条目 ... -
flutter listview 改变状态的时候一直无限添加
2019-07-10 16:01 679setstate的时候会一直无限的调用listview.bui ... -
Flutter Android端启动白屏问题的解决
2019-07-09 00:51 1404问题描述 Flutter 应用在 Android 端上启动时 ... -
Flutter中SnackBar使用
2019-07-08 23:43 683底部弹出,然后在指定时间后消失。 注意: build(Bui ... -
Flutter 之点击空白区域收起键盘
2019-07-08 18:43 1663点击空白处取消TextField焦点这个需求是非常简单的,在学 ... -
Flutter 弹窗 Dialog ,AlertDialog,IOS风格
2019-07-08 18:04 1294import 'package:flutter/mate ... -
flutter ---TextField 之 输入类型、长度限制
2019-07-08 14:30 2202TextField想要实现输入类型、长度限制需要先引入impo ... -
【flutter 溢出BUG】键盘上显示bottom overflowed by 104 PIXELS
2019-07-08 11:13 1449一开始直接使用Scaffold布局,body:new Colu ... -
解决Flutter项目卡在Initializing gradle...界面的问题
2019-07-07 12:53 796Flutter最近很火,我抽出了一点时间对Flutter进行了 ... -
关于android O 上 NotificationChannel 的一些注意事项
2019-07-04 11:47 889最近在适配android O,遇到个问题,应用中原本有设置界面 ...
相关推荐
将apk文件放到指定文件夹下,运行程序完成加密解密,生成到指定的文件夹下。 apk的存取和存放路径都可以自定义。
源码参考,欢迎下载
apk加壳和伪加密(防止反编译) 包括3个工程: 一个是加壳java工程; 一个是加壳安卓工程; 一个是apkdemo源程序; 直接运行Packers工程下面的build.xml文件后,在Packers的bin目录下查看Packers-release.apk即可...
Android高级应用源码-java 对apk 文件进行伪加密,然后进行字节码变换的工具,可运行的源代码,其中的apk的目录,需要自己修改成,你的自己的目录。.zip
JAVA语言,加密的可以反编译二开修改 源码说明: 系统通过对apk反编译,随机包名,随机签名,混淆代码等方式,回编译生成新的apk安装包 通过系统智能自动处理,间隔5分钟(可以自定义时间)生成一个新包,通过...
准备一个壳DEX文件(源码位置:shellApplicationSourceCode),将原APK的DEX文件加密保存到壳DEX尾部,然后将原APK文件中的原DEX文件替换为壳DEX,并修改原APK文件里AndroidManifest.xml的applicationandroid:name字段...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
压缩包内容:apk、jar、该项目的AndroidStudio源码、该项目的Eclipse源码、说明文档 项目包含的知识点如下: Eclipse(java):JSON的应用、JFileChooser的应用、sun.misc.BASE64Encoder在Eclipse的应用、 Andriod ...
典型的反编译流程包括,如何从apk反编译得到java源代码,如何从apk转换出dex文件,如何从dex文件转换出jar文件,如何从jar文件转换出java源代码等等原理和详细步骤。且总结了和安卓反编译、逆向工程、分析等相关的...
java桌面程序源码下载 APKMessenger 软件介绍 APK Messenger 是一款电脑端APK信息文件提取工具,由果核剥壳网站开发,本软件为基于JAVA GUI开发的桌面程序 目前JAVA版本实现了功能 获取应用名,支持提取多语言名称 ...
此为PHP源码(含前端),未加密 ,这只是一个demo 优点:安装简单,操作简单,自带JAVA环境(仅48.11M),集成证书 安装说明 请先导入ohltk.sql文件到数据库,然后修改sql.php文件里的数据库配置信息 安装完成后请使用电脑...
java系统源码 最让我没有想到的是,这种远古方法居然成功了 前言 因为最近要准备一些东西,所以决心把这个远古方法的加固给完成了,借此来了解一下基本的加固原理与实现 GitHub: 环境 真机:Zuk Z2 Pro, Android...
加载慢不说,还有很多bug,体验根本不能与原生想比。 后台是酷信的,包括linux、Windows、docker三种部署方式,后台开发语言主要是java, 部署较麻烦,但整体架构满足高并发场景,支持集群,有完整的部署教程。 ...
本例子是Android使用wifi连接控制的例子源码,这是android代码控制连接指定SSIDwifi,在输入框输入SSID名称和密码连接到wifi,javaapk.com以前也发布过很多关于wifi连接的例子需要更多关于wifi的源码可以在本站搜索...
用户只需要提供打包好的APK文件,可以集成DEX文件加密、SO文件壳、防二次打包和其他安全功能。 针对不同的应用安全需求,可以提供不同级别的安全防护功能,比如高强度的安全对抗,可以选择使用Java2C、代码混淆或者...
看不到源码气隙-覆盆子-apk-signer 修改 Raspberry Pi 映像,以最安全的方式(气隙)签署您的 Android APK。 想法/动机 在 AirGap 的开发过程中,我们得出的结论是,可能很多设备都会通过其他渠道接收应用程序,例如...
java版ss源码 某加密到牙齿的APP数据加密分析 在某特上关注了一点乱七八糟的东西,然后就看到了这么一款app。无聊业余时间的时候爬取了一些福利app的数据,于是就想顺便看下这个东西的数据是否也可以爬取。\ 目前...
java反编译泄露源码ARES - Android 逆向工程套件 构建状态: ARES 是用于分析 Android .apk 文件的安全套件。 核心分析技术基于很棒的 Androguard 代码库。 ##特征 从系统加载 .APK 或从连接的设备转储 Android ...
本项目是一个给安卓app加密码的软件源码。打开软件后直接勾选要加密码的软件,当别人...项目只有4个java文件,感兴趣的朋友可以下载研究一下,加密后的默认密码是javaapk。git地址https://github.com/jasmine8gu/Corgi
zxing.java源码解析 一、打包加固说明 1.多渠道打包加固 -> 爱加密: 2.腾讯乐固 gradle签名打包: V1:可对签名后的文件,作适当修改,并重新压缩。 V2:不能对签名后的 APK作任何修改,包括 zipalign。因为它是...