精华内容
下载资源
问答
  • XXX号)文件的有关规定,参照《城市轨道交通地下工程建设风险管理规范》(GB50652-2011)、《XXX轨道交通地下工程质量安全风险控制指导书》的有关标准,同时结合XXX地铁以往的地下工程经验,制定标准。二、 风险分类...

    XXX地铁建设工程

    安全风险等级划分指导标准

    一、 编制依据

    依据XXX下发的《XXX城市轨道交通工程重点建设环节质量安全管理办法(试行)》(建技[XXX]XXX号)文件的有关规定,参照《城市轨道交通地下工程建设风险管理规范》(GB50652-2011)、《XXX轨道交通地下工程质量安全风险控制指导书》的有关标准,同时结合XXX地铁以往的地下工程经验,制定本标准。

    二、 风险分类及分级

    城市轨道交通地下工程设计风险因素应从地下工程自身风险以及周边环境两方面等考虑,归纳为自身风险和环境风险两类。

    根据风险事件发生的可能性和风险损失、社会影响等,将风险源的等级由高至低分为Ⅰ、Ⅱ、Ⅲ、Ⅳ级。

    三、 自身风险

    地下工程的自身风险是指由于地下工程自身建设要求或施工活动所导致的风险。自身风险等级主要考虑地质条件、工程埋深、工艺特点、结构特性(如地下结构层数、跨度、断面形式、覆土厚度)等风险因素。其中,明挖法和盖挖法可按地质条件、基坑深度作为分级参考依据;盾构法以隧道相互之间的空间位置关系、连续掘进长度等作为分级参考依据;暗挖结构根据隧道的长度、地质复杂程度、环境条件等作为分级参考依据。

    (一)基坑工程安全风险分级:Ⅰ、Ⅱ、Ⅲ、Ⅳ级

    Ⅰ级 : 明(盖)挖法基坑开挖深度H≥25m;

    Ⅱ级 : 明(盖)挖法的基坑开挖深度20m≤H<25m;

    Ⅲ级 : 明(盖)挖法的基坑开挖深度14m≤H<20m;

    Ⅳ级 :明(盖)挖法的基坑开挖深度5m≤H<14m。

    注:当水文地质和工程地质条件复杂时,风险等级可上调一级。

    (二)盾构隧道安全风险分级:Ⅰ、Ⅱ、Ⅲ级

    1、Ⅰ级

    (1)处于非常接近状态(距离≤0.3D)的并行或交叠盾构隧道;

    (2)较长范围(长度≥100m)浅埋(盾构覆土厚度≤0.7D)的盾构隧道;

    (3)连续掘进长度超过1.5km的盾构隧道;

    (4)较长范围(长度≥150m)内开挖断面70%以上存在密实承压水砂层;

    (5)超长(长度大于18m)盾构区间联络通道;上方有重要建(构)筑物、河流等的盾构区间联络通道。

    2、Ⅱ级

    (1)处于接近状态(0.3D<距离≤0.7D)的并行、交叠盾构隧道;

    (2)较长范围(长度≥100m)覆土厚度为0.7D<H≤1.0D的盾构隧道;

    (3)开挖断面范围内粉土、砂土层超过50%的盾构区间联络通道。

    (4)进出洞加固区内存在厚层(厚度≥4m)的承压水粉土、砂土含水层的盾构始发到达区段。

    3、Ⅲ级

    (1)一般的盾构法隧道;

    (2)一般盾构区间的联络通道;

    (3)一般盾构始发到达区段(一个区间共两处,分别在两站端位置)。

    四、 环境设施重要性类别

    城市轨道交通地下工程环境影响的风险主要指建设活动导致周边区域的建(构)筑物发生影响或破坏,地下工程环境影响的分级需根据城市轨道交通地下工程与工程影响区域范围内环境设施的重要性、位置关系、地下结构类型与施工方法等因素划分。

    (一)根据风险事件发生的可能性和风险损失、社会影响等,将环境设施重要性类别的等级由高至低分为Ⅰ、Ⅱ、Ⅲ类。

    1、Ⅰ类环境设施

    省级以上历史文物建筑、对沉降变形特殊敏感建筑(如有精密仪器设备的厂房等)、110kV及以上高压线铁塔、高速铁路、铁路站场、运营地铁盾构区间、高架桥立交桥的主桥、海河等。

    2、Ⅱ类环境设施

    标志性建筑、无桩基的多层住宅楼,高耸建(构)筑物(如水塔、烟囱),35KV及以上变电站,油库、加油站、加气站、地下道路和交通隧道、地下商业街及重要人防工程、普速铁路、铁路专用线、运营地铁车站、明挖区间、

    一般河道桥梁、匝道桥、人行天桥、中压以上的煤气管、自来水主干管(直径大于600mm),大型水源管,使用时间较长的铸铁管、承插式接口钢筋混凝土管,220kV以上电力管沟、军用电(光)缆等。

    3、Ⅲ类环境设施

    有桩基的多层住宅楼、多层商业、办公楼,一般的厂房、车库、地下人行过街通道、人工湖、煤气支管、自来水支管、雨污水管、普通电力管沟、通信管沟等。

    (二) 新建地铁工程与其他环境设施(如建筑物、桥梁、管线、道路、水体)相互邻近程度及相对位置关系用接近度表示。接近度分为四个范围:Ⅰ(非常接近)、Ⅱ(接近)、Ⅲ(较接近)、IV(不接近)。

    1、基坑周边影响分区

    2、盾构隧道周边影响分区

    (三)环境风险分级

    环境风险分级参考表

    环境风险源

    接近度

    风险

    等级

    备注

    环境设施

    类别

    建筑物

    省级以上历史文物建筑、对沉降变形特殊敏感建筑(如有精密仪器设备的厂房等)、110kV及以上高压线铁塔等

    Ⅰ类

    Ⅰ级

    1、 已按腾迁处理的建筑物风险等级降低一级。

    2、 超浅埋(≦0.7D)盾构区间工点相应的环境风险等级提高一级。

    3、 建筑物对于车站主体基坑和附属结构环境风险等级不一致时,按最高等级执行。

    Ⅱ级

    Ⅲ级

    Ⅳ级

    标志性建筑、无桩基的多层住宅楼,高耸建(构)筑物(如水塔、烟囱),35KV及以上变电站,油库、加油站、加气站等

    Ⅱ类

    Ⅱ级

    Ⅲ级

    Ⅳ级

    有桩基础的多层住宅楼,多层商业、办公楼,一般的厂房、车库等

    Ⅲ类

    Ⅲ级

    Ⅳ级

    既有地下构筑物

    地下道路和交通隧道、地下商业街及重要人防工程等

    Ⅱ类

    Ⅱ级

    建设过程中已预留安全措施的风险等级降低一级。

    Ⅲ级

    Ⅳ级

    地下人行过街通道等

    Ⅲ类

    Ⅲ级

    Ⅳ级

    环境风险源

    接近度

    风险

    等级

    备注

    环境设施

    类别

    铁路

    高速铁路、铁路站场等

    Ⅰ类

    Ⅰ级

    1、 铁路建设过程中已预留安全措施的风险等级降低一级。

    2、超浅埋(≦0.7D)盾构区间工点相应的环境风险等级提高一级。

    3、道岔区风险等级提高一级。

    Ⅱ级

    Ⅲ级

    Ⅳ级

    普速铁路、铁路专用线等

    Ⅱ类

    Ⅱ级

    Ⅲ级

    Ⅳ级

    既有地铁运营线路

    盾构区间

    Ⅰ类

    Ⅰ级

    1、 地铁建设过程中已预留安全措施的风险等级降低一级。

    2、 超浅埋(≦0.7D)盾构区间工点相应的环境风险等级提高一级。

    3、 隧道上穿风险等级降低一级。

    4、 地面、高架线路参照铁路及高架桥相关标准。

    Ⅱ级

    Ⅲ级

    Ⅳ级

    车站、明挖区间

    Ⅱ类

    Ⅱ级

    Ⅲ级

    Ⅳ级

    环境风险源

    接近度

    风险

    等级

    备注

    环境设施

    类别

    道路桥梁隧道

    高架桥立交桥的主桥等

    Ⅰ类

    Ⅰ级

    1、 桥梁建设过程中已预留条件、措施的风险等级降低一级。

    2、 超浅埋(≦0.7D)盾构区间工点相应的环境风险等级提高一级。

    Ⅱ级

    Ⅲ级

    Ⅳ级

    一般河道桥梁、匝道桥、人行天桥等

    Ⅱ类

    Ⅱ级

    Ⅲ级

    Ⅳ级

    环境风险源

    接近度

    风险

    等级

    备注

    环境设施

    类别

    地下管线

    中压以上的煤气管、自来水主干管(直径大于600mm),大型水源管,使用时间较长的铸铁管、承插式接口钢筋混凝土管,220kV以上电力管沟、军用电(光)缆

    Ⅱ类

    Ⅱ级

    1、一个区间或车站的地下管线按照风险级别统计数量,一个级别风险源列为一个风险源。

    2、管底距盾构顶大于0.5D时,风险等级降低一级。

    3、管线与基坑围护结构边缘净距大于5m时,风险等级降低一级。

    Ⅲ级

    Ⅳ级

    煤气支管、自来水支管、雨污水管、普通电力管沟、通信管沟

    Ⅲ类

    Ⅲ级

    Ⅳ级

    备注:位于明(盖)挖法基坑外边线3H,隧道外边线30m或3Hi、3D(取大值)范围以外环境设施不作为风险源。

    H—基坑开挖深度;

    Hi—隧道设计底板埋深;

    D—盾构隧道设计外径。

    展开全文
  • ——调整分类安全物理环境、安全通信网络、安全区域边界、安全计算环境、安全管理中心、安全管理制度、安全管理机构、安全管理人员、安全建设管理、安全运维管理。 ——调整各个级别的安全要求为安全通用要求、...
  • 1 概述 燃气服务评价综合管理系统,其开发主要包括后台数据库的建立和维护以及应用程序的开发两个方面。对于数据库要求建立起数据一致性和完整性强、数据安全...燃气产品管理:该模块实现的功能有产品分类、添加分类.

    1 概述

     

    燃气服务评价综合管理系统,其开发主要包括后台数据库的建立和维护以及应用程序的开发两个方面。对于数据库要求建立起数据一致性和完整性强、数据安全性好的数据库,而对于后者则要求应用程序功能完备,易使用等特点。该燃气服务评价综合系统实现的功能有:系统管理、燃气产品管理、客户管理、服务信息管理、电话咨询管理。

    本系统采用B/S模式,主要实现的功能如下:

    系统管理:该模块实现的功能有系统属性、管理员维护、修改密码。主要是对系统的维护信息的分析;

    燃气产品管理:该模块实现的功能有产品分类、添加分类、燃气产品管理、添加产品。产品分类主要是对分类管理的添加、删除修改;燃气产品管理主要是对产品信息进行添加、删除、修改等,如类别、名称、产地、单位 、规格等;

    客户管理:该模块实现的功能有客户管理、添加客户。主要是对客户信息的添加、删除、修改,如姓名、性别、年龄、联系电话、住址;

    服务管理:该模块实现的功能有故障维修登记、服务登记、故障量统计。故障维修管理主要是对服务信息的添加、删除、修改。如单据号、故障维修时间、总金额、经手人、明细等;服务登记主要是对服务登记信息的添加、删除、修改,如单据号、登记者时间、总金额等;故障量统计主要是对故障信息的统计,如产品名称、统计数量;

    电话咨询管理:该模块实现的功能有电话咨询管理、添加电话咨询。电话咨询管理主要是对电话咨询信息进行添加、删除、修改,如电话咨询产品、到期时间、电话咨询费用、支付方式、顾客姓名等;

    2 数据库表

     

    实体描述:

    管理员信息:说明、编号、名称、密码、类型;

    分类信息:说明、编号、名称、介绍

    服务信息:说明、编号、单据号、时间、价格、经手人、备注

    服务明细信息:说明、编号、服务编号、商品编号、数量、备注

    电话咨询信息:说明、编号、咨询内容、地址、联系人、电话、QQ、座机、邮箱

    燃气信息:说明、编号、分类编号、词典、单位 、规格、备注、图片

    客户信息:说明、编号、名称、性别、年龄、电话、地址、职务

    3 关键代码

     

    package com.action;
    
    import java.io.IOException;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import org.directwebremoting.WebContext;
    import org.directwebremoting.WebContextFactory;
    
    import com.dao.DB;
    import com.orm.TAdmin;
    import com.orm.zhixun;
    
    public class zhixun_servlet extends HttpServlet
    { 
    	public void service(HttpServletRequest req,HttpServletResponse res)throws ServletException, IOException 
    	{
    		String type=req.getParameter("type");
    		
    		if(type.endsWith("zhixunMana"))
    		{
    			zhixunMana(req, res);
    		}
    		if(type.endsWith("zhixunAdd"))
    		{
    			zhixunAdd(req, res);
    		}
    		
    		if(type.endsWith("zhixunDel"))
    		{
    			zhixunDel(req, res);
    		}
    		if(type.endsWith("zhixunEdit"))
    		{
    			zhixunEdit(req, res);
    		}
    	/*	if(type.endsWith("zhixunSearch"))
    		{
    			zhixunSearch(req, res);
    		}*/
    		if(type.endsWith("zhixunXinxi"))
    		{
    			zhixunXinxi(req, res);
    		}
    	}
    
    	public void zhixunAdd(HttpServletRequest req,HttpServletResponse res)
    	{
    		String mingcheng=req.getParameter("mingcheng");
    		String dizhi=req.getParameter("dizhi");
    		String lianxiren=req.getParameter("lianxiren");
    		String dianhua=req.getParameter("dianhua");
    		String youbian=req.getParameter("youbian");
    		String chuanzhen=req.getParameter("chuanzhen");
    		String youxiang=req.getParameter("youxiang");
    		
    		String sql="insert into t_zhixun (`mingcheng`, `dizhi`, `lianxiren`, `dianhua`, `youbian`, `chuanzhen`, `youxiang`, `kahuhang`, `zhanghao`, `type`, `del`)  values(?,?,?,?,?,?,?,?,?,?,?)";
    		Object[] params={mingcheng,dizhi,lianxiren,dianhua,youbian,chuanzhen,youxiang,"","","zhixun","no"};
    		DB mydb=new DB();
    		mydb.doPstm(sql, params);
    		mydb.closed();
    		
    		req.setAttribute("message", "操作成功");
    		req.setAttribute("path", "zhixun?type=zhixunMana");
    		
            String targetURL = "/common/success.jsp";
    		dispatch(targetURL, req, res);
    	}
    	public void zhixunEdit(HttpServletRequest req,HttpServletResponse res)
    	{
    		String mingcheng=req.getParameter("mingcheng");
    		String dizhi=req.getParameter("dizhi");
    		String lianxiren=req.getParameter("lianxiren");
    		String dianhua=req.getParameter("dianhua");
    		String youbian=req.getParameter("youbian");
    		String chuanzhen=req.getParameter("chuanzhen");
    		String youxiang=req.getParameter("youxiang");
    		
    		String sql="update  t_zhixun set mingcheng='"+mingcheng+"',dizhi='"+dizhi+"',lianxiren='"+lianxiren+"',dianhua='"+dianhua+"',youbian='"+youbian+"',chuanzhen='"+chuanzhen+"',youxiang='"+youxiang+"' where id="+Integer.parseInt(req.getParameter("id"));
    		Object[] params={};
    		DB mydb=new DB();
    		mydb.doPstm(sql, params);
    		mydb.closed();
    		
    		req.setAttribute("message", "操作成功");
    		req.setAttribute("path", "zhixun?type=zhixunMana");
    		
            String targetURL = "/common/success.jsp";
    		dispatch(targetURL, req, res);
    	}
    	public void zhixunMana(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException
    	{
    		String page1=req.getParameter("page");
    		if(page1==null){
    			page1="1";
    		}
    		//分页设置
    		int EVERYPAGENUM=10;//每页条数
    		int page=Integer.parseInt(page1);   //传递过来的当前页
    		int cou = 1;//得到信息总数	
    		int pagecount=1;  //总页数
    		String sql1="select count(*) as cou from t_zhixun where type='zhixun' and del='no'";
    		if(req.getParameter("mingcheng")!=null) sql1+="  and mingcheng like '%"+req.getParameter("mingcheng").trim()+"%'";
    		Object[] params1={};
    		DB mydb1=new DB();
    		try
    		{
    			mydb1.doPstm(sql1, params1);
    			ResultSet rs=mydb1.getRs();
    			while(rs.next())
    			{
    			cou= rs.getInt("cou");
    			}
    			rs.close();
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    		mydb1.closed();
    		
    		
    		
    		if (cou % EVERYPAGENUM == 0) {
    			pagecount= cou / EVERYPAGENUM;
            } else {
            	pagecount=cou / EVERYPAGENUM + 1;
            }	
    		
    		
    		
    		
    		
    		
    		req.setAttribute("EVERYPAGENUM", EVERYPAGENUM);	
    		req.setAttribute("page", page);
    		req.setAttribute("cou", cou);
    		req.setAttribute("pagecount", pagecount);
    		
    		
    		
    		List zhixunList=new ArrayList();
    		String sql="select * from t_zhixun where type='zhixun' and del='no'";
    		if(req.getParameter("mingcheng")!=null) sql+="  and mingcheng like '%"+req.getParameter("mingcheng").trim()+"%'";Object[] params={};
    		DB mydb=new DB();
    		try
    		{
    			mydb.doPstm(sql, params);
    			ResultSet rs=mydb.getRs();
    			 for (int i = 0; i < (page - 1) * EVERYPAGENUM; i++) {
    	                rs.next();
    	            }
    	            for (int t = 0; t < EVERYPAGENUM; t++) {
    	                if (rs.next()) {
    				zhixun zhixun=new zhixun();
    				zhixun.setId(rs.getInt("id"));
    				zhixun.setMingcheng(rs.getString("mingcheng"));
    				zhixun.setDizhi(rs.getString("dizhi"));
    				zhixun.setLianxiren(rs.getString("lianxiren"));
    				zhixun.setDianhua(rs.getString("dianhua"));
    				zhixun.setYoubian(rs.getString("youbian"));
    				zhixun.setChuanzhen(rs.getString("chuanzhen"));
    				zhixun.setYouxiang(rs.getString("youxiang"));
    				zhixunList.add(zhixun);
    	                } else {
    	                    break; //减少空循环的时间
    	                }
    	            }
    			rs.close();
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    		mydb.closed();
    		
    		req.setAttribute("zhixunList", zhixunList);
    		req.getRequestDispatcher("admin/zhixun/zhixunMana.jsp").forward(req, res);
    	}
    
    	public void zhixunDel(HttpServletRequest req,HttpServletResponse res)
    	{
    		int id=Integer.parseInt(req.getParameter("id"));
    		
    		String sql="update t_zhixun set del='yes' where id=?";
    		Object[] params={id};
    		DB mydb=new DB();
    		mydb.doPstm(sql, params);
    		mydb.closed();
    		
    		req.setAttribute("message", "操作成功");
    		req.setAttribute("path", "zhixun?type=zhixunMana");
    		
            String targetURL = "/common/success.jsp";
    		dispatch(targetURL, req, res);
    	}
    	
    	
    	/*public void zhixunEdit(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException
    	{
    		int id=Integer.parseInt(req.getParameter("id"));
    		String sql="update t_zhixun set mingcheng=?,dizhi=?,lianxiren=?,dianhua=?,youbian=?,chuanzhen=?,youxiang=? where id="+id;
    		
    		String mingcheng=req.getParameter("mingcheng");
    		String dizhi=req.getParameter("dizhi");
    		String lianxiren=req.getParameter("lianxiren");
    		String dianhua=req.getParameter("dianhua");
    		String youbian=req.getParameter("youbian");
    		String chuanzhen=req.getParameter("chuanzhen");
    		String youxiang=req.getParameter("youxiang");
    		
    		Object[] params={mingcheng,dizhi,lianxiren,dianhua,youbian,chuanzhen,youxiang};
    		DB mydb=new DB();
    		mydb.doPstm(sql, params);
    		mydb.closed();
    		
    		req.setAttribute("message", "操作成功");
    		req.setAttribute("path", "zhixun?type=zhixunMana");
    		
            String targetURL = "/common/success.jsp";
    		dispatch(targetURL, req, res);
    	}
    	public void zhixunSearch(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException
    	{
    		List zhixunList=new ArrayList();
    		String sql="select * from t_zhixun where type='zhixun' and del='no' and mingcheng like '%"+req.getParameter("mingcheng").trim()+"%'";
    		Object[] params={};
    		DB mydb=new DB();
    		try
    		{
    			mydb.doPstm(sql, params);
    			ResultSet rs=mydb.getRs();
    			while(rs.next())
    			{
    				zhixun zhixun=new zhixun();
    				zhixun.setId(rs.getInt("id"));
    				zhixun.setMingcheng(rs.getString("mingcheng"));
    				zhixun.setDizhi(rs.getString("dizhi"));
    				zhixun.setLianxiren(rs.getString("lianxiren"));
    				zhixun.setDianhua(rs.getString("dianhua"));
    				zhixun.setYoubian(rs.getString("youbian"));
    				zhixun.setChuanzhen(rs.getString("chuanzhen"));
    				zhixun.setYouxiang(rs.getString("youxiang"));
    				zhixunList.add(zhixun);
    			}
    			rs.close();
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    		mydb.closed();
    		
    		req.setAttribute("zhixunList", zhixunList);
    		req.getRequestDispatcher("admin/zhixun/zhixunMana.jsp").forward(req, res);
    	}
    	*/
    	
    	public void zhixunXinxi(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException
    	{System.out.println("%%%%");
    		List zhixunList=new ArrayList();
    		int id=Integer.parseInt(req.getParameter("id"));
    		String sql="select * from t_zhixun where id="+id;
    		Object[] params={};
    		DB mydb=new DB();
    		try
    		{
    			mydb.doPstm(sql, params);
    			ResultSet rs=mydb.getRs();
    			while(rs.next())
    			{
    				zhixun zhixun=new zhixun();
    				zhixun.setId(rs.getInt("id"));
    				zhixun.setMingcheng(rs.getString("mingcheng"));
    				zhixun.setDizhi(rs.getString("dizhi"));
    				zhixun.setLianxiren(rs.getString("lianxiren"));
    				zhixun.setDianhua(rs.getString("dianhua"));
    				zhixun.setYoubian(rs.getString("youbian"));
    				zhixun.setChuanzhen(rs.getString("chuanzhen"));
    				zhixun.setYouxiang(rs.getString("youxiang"));
    				zhixunList.add(zhixun);
    			}
    			rs.close();
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    		mydb.closed();
    		
    		req.setAttribute("zhixunList", zhixunList);
    		req.getRequestDispatcher("admin/zhixun/zhixunXinxi.jsp").forward(req, res);
    	}
    	
    	
    	
    	public void dispatch(String targetURI,HttpServletRequest request,HttpServletResponse response) 
    	{
    		RequestDispatcher dispatch = getServletContext().getRequestDispatcher(targetURI);
    		try 
    		{
    		    dispatch.forward(request, response);
    		    return;
    		} 
    		catch (ServletException e) 
    		{
                        e.printStackTrace();
    		} 
    		catch (IOException e) 
    		{
    			
    		    e.printStackTrace();
    		}
    	}
    	public void init(ServletConfig config) throws ServletException 
    	{
    		super.init(config);
    	}
    	
    	public void destroy() 
    	{
    		
    	}
    }
    

    4 效果演示

     

    idea或eclipse开发,mysql数据库

     

     

    展开全文
  • C)全部信息:显示站的所有信息,可以对信息进行修改/删除/审核/查看信息来源IP地址/等功能; (D)首页显示:操作方法,选择信息进行修改,在"是否首页显示"处,点上"是" (E)付费信息:操作方法,选择信息...
  • Android安全攻防战,反编译与混淆技术完全解析(上) 标签: android反编译安全技术混淆 2016-02-18 09:09 47061人阅读 评论(150) ...文章已收录于: ...分类: ...•Android新特性介绍,C

    Android安全攻防战,反编译与混淆技术完全解析(上)

    标签: android反编译安全技术混淆
    47061人阅读 评论(150) 收藏 举报
    本文章已收录于:

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/49738023
    之前一直有犹豫过要不要写这篇文章,毕竟去反编译人家的程序并不是什么值得骄傲的事情。不过单纯从技术角度上来讲,掌握反编译功能确实是一项非常有用的技能,可能平常不太会用得到,但是一旦真的需要用到的了,而你却不会的话,那就非常头疼了。另外既然别人可以反编译程序,我们当然有理由应该对程序进行一定程度的保护,因此代码混淆也是我们必须要掌握的一项技术。那么最近的两篇文章我们就围绕反编译和混淆这两个主题来进行一次完全解析。


    反编译

    我们都知道,Android程序打完包之后得到的是一个APK文件,这个文件是可以直接安装到任何Android手机上的,我们反编译其实也就是对这个APK文件进行反编译。Android的反编译主要又分为两个部分,一个是对代码的反编译,一个是对资源的反编译,我们马上来逐个学习一下。
    在开始学习之前,首先我们需要准备一个APK文件,为了尊重所有开发者,我就不拿任何一个市面上的软件来演示了,而是自己写一个Demo用来测试
    这里我希望代码越简单越好,因此我们建立一个新项目,在Activity里加入一个按钮,当点击按钮时弹出一个Toast,就这么简单,代码如下所示:

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button button = (Button) findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this, "you clicked button", Toast.LENGTH_SHORT).show();
                }
            });
        }
    
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    activity_main.xml中的资源如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin">
    
        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"/>
    
    </RelativeLayout>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    save_snippets.png
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    然后我们将代码打成一个APK包,并命名成Demo.apk,再把它安装到手机上,结果如下所示:


    好的,到这里准备工作就已经基本完成了,接下来就让我们开始对这个Demo程序进行反编译吧。

    反编译代码

    要想将APK文件中的代码反编译出来,我们需要用到以下两款工具:

    将这两个工具都下载好并解压,然后我们就开始对Demo程序进行反编译。解压dex2jar压缩包后,你会发现有很多个文件,如下图所示:


    其中我们要用到的是d2j-dex2jar.bat这个文件,当然如果你是linux或mac系统的话就要用d2j-dex2jar.sh这个文件。
    然后我们将Demo.apk文件也进行解压,如果不知道怎么直接解压的可以先将文件重命名成Demo.zip,然后用解压软件打开。解压之后你会发现里面有一个classes.dex文件,如下图所示:

    这个classes.dex文件就是存放所有java代码的地方了,我们将它拷贝到dex2jar解压后的目录下,并在cmd中也进入到同样的目录,然后执行:

    d2j-dex2jar classes.dex
    • 1
    save_snippets.png
    • 1

    执行结果如下图所示:


    没有报任何错误,这就说明我们已经转换成功了。现在观察dex2jar目录,你会发现多了一个文件,如下图所示:

    可以看到,classes-dex2jar.jar这个文件就是我们借助工具之后成功转换出来的jar文件了。但是对于我们而言,jar文件也不是可读的,因此这里还需要再借助一下jd-gui这个工具来将jar文件转换成java代码。
    下面就很简单了,使用jd-gui工具打开classes-dex2jar.jar这个文件,结果如下图所示:
    20160204162548914

    OK,由此可见,我们的代码反编译工作已经成功了,MainActivity中的代码非常清晰,基本已经做到了90%以上的还原工作。但是如果想要做到100%的代码还原还是非常有难度的,因为像setContentView()方法传入的参数,其实就是一个资源的id值而已,那么这里反编译也就只能将相应的id值进行还原,而无法变成像R.layout.activity_main这样直观的代码展示。
    另外,除了MainActivity之外,还有很多其它的代码也被反编译出来了,因为当前项目有引用support-v4和support-v7的包,这些引用的library也会作为代码的一部分被打包到classes.dex文件当中,因此反编译的时候这些代码也会一起被还原。
    好的,学完了反编译代码,接下来我们看一下如何反编译资源。

    反编译资源

    其实细心的朋友可能已经观察到了,刚才Demo.apk的解压目录当中不是已经有资源文件了吗,有AndroidManifest.xml文件,也有res目录。进入res目录当中,内容如下图所示:


    这不是所有资源文件都在这里了么?其实这些资源文件都是在打包的时候被编译过了,我们直接打开的话是看不到明文的,不信的话我们打开AndroidManifest.xml文件来瞧一瞧,内容如下图所示:

    可以看到,这代码是完全没法阅读的。当然如果你去打开activity_main.xml看看,结果也不会好到哪儿去:

    由此可见,直接对APK包进行解压是无法得到它的原始资源文件的,因此我们还需要对资源进行反编译才行。
    要想将APK文件中的资源反编译出来,又要用到另外一个工具了:

    关于这个工具的下载我还要再补充几句,我们需要的就是apktool.bat和apktool.jar这两个文件。目前apktool.jar的最新版本是2.0.3,这里我就下载最新的了,然后将apktool_2.0.3.jar重命名成apktool.jar,并将它们放到同一个文件夹下就可以了,如下图所示:


    接下来的工作就很简单了,我们将Demo.apk拷贝到和这两个文件同样的目录当中,然后cmd也进入到这个目录下,并在cmd中执行如下命令:

    apktool d Demo.apk
    • 1
    save_snippets.png
    • 1

    其中d是decode的意思,表示我们要对Demo.apk这个文件进行解码。那除了这个基本用法之外,我们还可以再加上一些附加参数来控制decode的更多行为:

    • -f 如果目标文件夹已存在,则强制删除现有文件夹(默认如果目标文件夹已存在,则解码失败)。
    • -o 指定解码目标文件夹的名称(默认使用APK文件的名字来命名目标文件夹)。
    • -s 不反编译dex文件,也就是说classes.dex文件会被保留(默认会将dex文件解码成smali文件)。
    • -r 不反编译资源文件,也就是说resources.arsc文件会被保留(默认会将resources.arsc解码成具体的资源文件)。

    常用用法就这么多了,那么上述命令的执行结果如下图所示:


    这就说明反编译资源已经成功了。
    当然即使你在和我执行一模一样的操作,也有可能会在这里反编译失败,比如说会报如下错误:
    这里写图片描述

    出现这个错误的原因很有可能是你之前使用过apktool的老版本进行过反编译操作,然后apktool就会在你系统的C:\Users\Administrator\apktool\framework这个目录下生成一个名字为1.apk的缓存文件,将这个缓存文件删除掉,然后再重新执行反编译命令应该就可以成功了。
    现在你会发现在当前目录下多了一个Demo文件夹,这个文件夹中存放的就是反编译的结果了。我们可以打开AndroidManifest.xml来瞧一瞧,如下图所示:

    怎么样?这样就完全能看得懂了吧,然后可以再到res/layout中看一下activity_main.xml文件,如下图所示:

    可以看到,activity_main.xml中的内容基本和源代码中的内容是一致的,外层是一个RelativeLayout,里面则是一个Button。你可以再到其它目录中去看一看别的资源,基本上都是可以正常还原的,这样我们就把反编译资源的方法也已经掌握了。

    重新打包

    那么对于反编译出来的文件夹,我们能不能重新把它打包成APK文件呢?答案是肯定的,只不过我实在想不出有什么义正言辞的理由可以让我们这么做。有的人会说汉化,没错,汉化的方式确实就是将一个APK进行反编译,然后翻译其中的资源再重新打包,但是不管怎么说这仍然是将别人的程序进行破解,所以我并不认为这是什么光荣的事情。那么我们就不去讨论本身这件事情的对或错,这里只是站在技术的角度来学习一下重新打包的相关知识。
    首先我们来看一下通过apktool反编译后的包目录情况,如下图所示:


    其中,original文件夹下存放的是未经反编译过、原始的AndroidManifest.xml文件,res文件夹下存放的是反编译出来的所有资源,smali文件夹下存放的是反编译出来的所有代码,AndroidManifest.xml则是经过反编译还原后的manifest文件。这里值得一提的是smali文件夹,如果你进入到这个文件夹中你会发现它的目录结构和我们源码中src的目录结构是几乎一样的,主要的区别就是所有的java文件都变成了smali文件。smali文件其实也是真正的源代码,只不过它的语法和java完全不同,它有点类似于汇编的语法,是Android虚拟机所使用的寄存器语言,语法结构大概如下所示:

    看上去有点晕头转向是吗?但是如果你一旦能够看得懂smali文件的话,那么你就可以做很恐怖的事情了——你可以随意修改应用程序内的逻辑,将其进行破解!
    不过我对这种黑技术并没有什么太大的兴趣,因此我也没有去做具体研究,但即使是这样,也已经可以对程序的逻辑做一定程度的修改了。比如说当我们点击按钮时会弹出you clicked button这样一句Toast,逻辑是写在MainActivity按钮点击事件的匿名类当中的,因此这段代码反编译之后一定就会在MainActivity$1.smali这个文件当中,让我们打开瞧一瞧,部分代码如下所示:
    20160209154620278

    虽说多数的代码我是看不懂的,但其中第47行实在太明显了,Toast显示的内容不就是在这里定义的么,那么如果我们想把Demo程序hack掉,就可以将这段字符串给改掉,比如说我把它改成Your app is been hacked
    关于smali的语法,网上的资料也非常多,如果你对这门技术十分感兴趣的话可以直接上网去搜,这里我只是简单介绍一下,就不再深入讲解相关知识了。
    改了一处代码后我们再来改一处资源吧,比如这里想要把Demo的应用图标给换掉,那么首先我们要准备好一张新的图片,如下图所示:

    然后从AndroidManifest.xml文件中可以看出,应用图标使用的是ic_launcher.png这张图片,那么我们将上面篮球这张图片命名成ic_launcher.png,然后拷贝到所有以res/mipmap开头的文件夹当中完成替换操作。
    在做了两处改动之后,我们现在来把反编译后的Demo文件夹重新打包成APK吧,其实非常简单,只需要在cmd中执行如下命令:

    apktool b Demo -o New_Demo.apk
    • 1
    • 1

    其中b是build的意思,表示我们要将Demo文件夹打包成APK文件,-o用于指定新生成的APK文件名,这里新的文件叫作New_Demo.apk。执行结果如下图所示:


    现在你会发现在同级目录下面生成了一个新的APK文件:

    不过不要高兴得太早了,目前这个New_Demo.apk还是不能安装的,因为它还没有进行签名。那么如果这是别人的程序的话,我们从哪儿能拿到它原来的签名文件呢?很显然,这是根本没有办法拿到的,因此我们只能拿自己的签名文件来对这个APK文件重新进行签名,但同时也表明我们重新打包出来的软件就是个十足的盗版软件。这里大家学学技术就好了,希望不要有任何人去做什么坏事情。
    那么这里我就用一个之前生成好的签名文件了,使用Android Studio或者Eclipse都可以非常简单地生成一个签名文件。
    有了签名文件之后在cmd中执行签名命令就可以进行签名了,命令格式如下:

    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 签名文件名 -storepass 签名密码 待签名的APK文件名 签名的别名
    • 1
    • 1

    其中jarsigner命令文件是存放在jdk的bin目录下的,需要将bin目录配置在系统的环境变量当中才可以在任何位置执行此命令。
    签名之后的APK文件现在已经可以安装到手机上了,不过在此之前Android还极度建议我们对签名后的APK文件进行一次对齐操作,因为这样可以使得我们的程序在Android系统中运行得更快。对齐操作使用的是zipalign工具,该工具存放于<Android SDK>/build-tools/<version>目录下,将这个目录配置到系统环境变量当中就可以在任何位置执行此命令了。命令格式如下:

    zipalign 4 New_Demo.apk New_Demo_aligned.apk
    • 1
    save_snippets.png
    • 1

    其中4是固定值不能改变,后面指定待对齐的APK文件名和对齐后的APK文件名。运行这段命令之后就会生成一个New_Demo_aligned.apk文件,如下所示:


    这个New_Demo_aligned.apk就是我们重新打包签名对齐后的文件了,现在把它安装到手机上,效果如下图所示:

    可以看到,应用图标已经成功改成了篮球,另外点击按钮后弹出的Toast的提示也变成了我们修改后的文字,说明重新打包操作确实已经成功了。


    好的,我们把反编译代码、反编译资源、重新打包这三大主题的内容都已经掌握了,关于反编译相关的内容就到这里,下篇文章会介绍Android代码混淆方面的相关技术,感兴趣的朋友请继续阅读: Android安全攻防战,反编译与混淆技术完全解析(下)

    关注我的技术公众号,每天都有优质技术文章推送。关注我的娱乐公众号,工作、学习累了的时候放松一下自己。

    微信扫一扫下方二维码即可关注:

    20160507110203928         20161011100137978

    151
    8

    我的同类文章

    展开全文
  • 资源分类: 建筑工程标准规范 其他简介:JGJ254-2011 建筑施工竹脚手架安全技术规范 【资源下载】 链接:https://pan.baidu.com/s/1GfFIGvi0k87Ga5sLw5tDXg 提取码:qb1c 【资源截图】 【免责申明】 站提供的资源...

    【资源介绍】

    资源名称:JGJ254-2011 建筑施工竹脚手架安全技术规范

    资源分类: 建筑工程标准规范

    其他简介:JGJ254-2011 建筑施工竹脚手架安全技术规范

    【资源下载】

    链接:https://pan.baidu.com/s/1GfFIGvi0k87Ga5sLw5tDXg

    提取码:qb1c

    【资源截图】
    在这里插入图片描述

    【免责申明】

    本站提供的资源下载链接均来自互联网,仅供学习研究之用,不得用于商业,请在24小时内删除!资源版权归原作者及其公司所有,如果你喜欢,请购买正版。

    展开全文
  • C日志函数库zlog.zip

    2019-07-16 06:17:58
    zlog是一个高性能、线程安全、灵活、概念清晰的纯C日志函数库。 事实上,在C的世界里面没有特别好的日志函数库(就像JAVA里面的的log4j,或者C 的log4cxx)。C程序员都喜欢用自己的轮子。printf就是个挺好的轮子...
  • 文章用于自学和分享)   攻击分类   非对称密钥(常用来加密或解密小段信息) RSA密码系统 P:明文 C:密文 任选两素数 p q , 计算 n = p *q 和m = (p-1)*(q-1) 然后选择 e和d 这样 (e*d) mod...
  • [网络安全自学篇] 十五.Python攻防之多线程、C段扫描和数据库编程(二) 2019-10-05 11:44:11Eastmount阅读数 91更多 分类专栏:网络安全Web安全Python学习系列 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA...
  • 2.shell的分类(1)bash bash shell 是 Bourne shell 的一个免费版本,它是最早的 Unix shell,包括许多附加的特点。Bash 有可编辑的命令行,可以回查历史命令,支持 tab 键补齐以使用户避免输入长的文件名。(2)...
  • 4.5.3 JamieButler、PeterSilberman和C.H.A.O.S创建的FU和FUTo123 4.5.4 SherriSparks和JamieButler创建的ShadowWalker124 4.5.5 He4Team?建的He4Hook126 4.5.6 Honeynet项目创建的Sebek129 4.6 小结129 第5章 ...
  • 日期:2020.02.01博客期:140星期六【博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)】所有相关跳转:a.【简单准备】c.【拓扑数据】d.【数据修复】(本期博客)i . 【App制作】j . 【安全性...
  • 日期:2020.02.02博客期:141星期日【博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)】所有相关跳转:a.【简单准备】c.【拓扑数据】d.【数据修复】e.【解释修复+热词引用】(本期博客)i . ...
  • 随着物联网、大数据、人工智能等技术的快速发展与应用,给传统的云计算模式带来了巨大的挑战,这也催生出了计算模式的变革,边缘计算由此诞生。 所谓边缘计算,是指在靠近物或数据源头的...安全性:原始数据...
  • 简单、面向对象、可移植性、健壮性、安全、分布式、多线程 2、java版本分类: JavaME:微缩版;嵌入式设备移动设备软件开发(手机机顶盒导航) JavaSE:标准版;C/S架构软件开发 JavaEE:企业版; B/S架构软件开发...
  • 日期:2020.01.27博客期:135星期一【博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)】所有相关跳转:a.【简单准备】(本期博客)c.【拓扑数据】d.【数据修复】i . 【App制作】j . 【安全性...
  • 网上日记

    2013-12-30 21:34:33
    在这个系统中我们设计了两个数据库表即基本信息库和数据中心库,当用户一开始进入日记系统时为了其安全性就要对用户进行身份验证。因而就要对基本信息库进行调用并查询,而修密就要对该数据库进行修改。 在基本...
  • 随着物联网、大数据、人工智能等技术的快速发展与应用,给传统的云计算模式带来了巨大的挑战,这也催生出了计算模式的变革,边缘计算由此诞生。 所谓边缘计算,是指在靠近物或数据源头的...安全性:原始数据...
  • 《轻轻松松配交换 V2.7》,新增:常用配置2篇(包含V5交换机和V7交换机Console口安全配置方法) 2019-12-31 《轻轻松松配交换 V2.6》,新增:常用配置2篇(包含V5交换机和V7交换机使用XMODE协议升级软件版本方法)...
  • H3C S5000E-X轻轻松松配交换 V2.8 更新说明 《轻轻松松配交换 V2.8》,新增:常用配置1篇(V7交换机基本QINQ配置方法) 2019-1-17 《轻轻松松配交换 V2.7》,新增:常用配置2篇(包含V5交换机和V7交换机...
  • 第1 章 欢迎来到比特币世界  什么是比特币  比特币的历史  比特币的使用、用户,以及他们的故事  新手入门  第2 章 比特币是如何工作...附录C pycoin、ku 和tx  附录D sx工具集可用命令  关于作者  结语 
  • 系统支持栏目无限级分类,并可对系统栏目进行一级或N级栏目的排序操作,对栏目之间的内容进行复制(CTRL C),粘贴(CTRL V)操作,对栏目的内容进行合并,对栏目或文章进行批量的绑定模板或设置文章的属性,点击次数...
  • Android-android-open-project.zip,Android开源项目的分类集合,更强大的Web版本:,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,CC 的核心组件。它是在linux内核之上构建的,具有安全性优势。
  • SVM

    2020-04-25 16:26:50
    线性可分SVM 硬间隔,完全分成两类(上图实线) 线性SVM 软间隔,分成两类,...想要取到最安全分类线,则需要距离最近的样本能够远一些, 即离样本的最小距离取最大 在约束条件下的极值问题:拉格朗日乘子法 ...
  • 分类管理,支持增加、删除、修改分类 友情链接 1.支持增加友情链接 2.支持删除友情链接 反馈信息管理,可查看用户反馈信息 安装部署需求 可以使用docker方式部署,也可支持-jar方式 使用springboot自带方式...
  • 结合JWT和RSA非对称加密,自定义Feign过滤器实现自动化服务间鉴权,解决服务对外暴露的安全问题 基于阿里大于实现SMS功能,解决电商短信通知问题 基于RabbitMQ实现可靠消息服务,解决服务间通信问题 基于...
  • 目录口诀解释口诀磁盘分区有必要,文件最好分类存。软件安装前思考,安装路径也讲究。能用键盘不用鼠,电脑桌面须简洁。安装软件要谨慎,官网下载才安全。软件也非全必要,安全视频不要装。首选国外非国产,垃圾广告...
  • 膨胀系数高,根据:(a)基于可塑性指数的土壤分类,(b)基于液体极限和塑性指数的分类图表,(c)基于粘土含量和活性的分类图表,(d)土壤分类, (e)确定安全系数的膨胀压力。 此外,扩展分类法评估了埃斯纳...
  • LED筒灯性能规范

    2021-01-20 06:06:57
     技术要求主要针对LED筒灯照明产品,规定了LED筒灯的技术要求,其中包括产品的规格分类、初始光通量、初始光效和光通维持率等基本光学性能指标,电气安全要求及无线电骚扰特性等。  技术要求适用于类似三星...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 311
精华内容 124
关键字:

安全c本分类