精华内容
下载资源
问答
  • 郁金香游戏辅助汇编代码注入工具,文件CodeinEX.exe
  • 代码注入器

    2018-01-29 00:27:25
    一个不错的汇编线程注入工具,在调试程序CALL或者游戏CALL的时候这个工具非常的强大,可以直接带参数测试CALL是否正确,实现相应的功能
  • 汇编代码注入器(无毒),游戏找call,有利工具.
  • 为您提供莫离汇编代码注入器下载,莫离汇编代码注入器,不仅仅是一个x86/x64注入器,还是一个汇编编写工具,它可以编写x64或x86汇编,它还可以把x64或x86汇编代码转成机器码或16进制文本亦或是x64或x86机器码转成...
  • 代码注入器别名(ASM汇编CALL测试器)可测试游戏函数CALL,这个工具非常的好用,但是使用的时候请注入汇编书写和堆栈平衡否则游戏会崩溃。还有这个工具必须配合OD调试器使用,因为汇编代码是从OD里面分析出来 ,哈哈。
  • x86 x64 注入工具 .zip

    2019-05-14 22:32:20
    32/64 代码注入器 里边包含一个 32位x86进程用的代码注入器 包含一个 x64进程用的 dll注入器
  • 用Electron,Vue,TypeScript和C ++制成的DLL注入器。 它功能实用,方便,快速,美观,现代且易于使用。 总览 HEX-EN是第一个用Node编写的公共DLL注入器。 我决定将Vue和Electron的功能与C ++结合使用,因此创建了此...
  • lua的代码覆盖率工具https://github.com/esrrhs/clua​github.com特性数据采集用C++编写,性能更高,对宿主进程影响更小简单require即可使用,或通过hookso注入解析用go编写,通过解析lua语法,精确计算文件及函数...

    lua的代码覆盖率工具

    https://github.com/esrrhs/cluagithub.com

    特性

    • 数据采集用C++编写,性能更高,对宿主进程影响更小
    • 简单require即可使用,或通过hookso注入
    • 解析器用go编写,通过解析lua语法,精确计算文件及函数的覆盖率
    • 支持输出lcov格式,进而输出html结果

    编译

    • 编译libclua.so
    # cmake .
    # make
    • 编译clua解析工具
    # go get "github.com/milochristiansen/lua" 
    # go build clua.go

    使用

    • 直接嵌入lua脚本中使用,lua文件里使用如下
    -- 加载libclua.so
    local cl = require "libclua"
    -- 开始记录执行过程,生成结果文件
    -- 第一个参数为结果文件的文件名
    -- 第二个参数为定时生成结果文件的间隔(秒),0表示关闭
    cl.start("test.cov", 5)
    
    -- 执行某些事情
    do_something()
    
    -- 结束记录
    cl.stop()
    • 或者使用hookso注入到进程中(假设进程id为PID),手动开启
    a) 首先获取进程中的Lua_State指针,比如进程调用了lua_settop(L)函数,那么就取第一个参数
    # ./hookso arg $PID liblua.so lua_settop 1 
    123456
    
    b) 加载libclua.so
    # ./hookso dlopen $PID ./libclua.so
    
    c) 执行libclua.so的start_cov手动开启,等价于start_cov(L, "./test.cov", 5)
    # ./hookso call $PID libclua.so start_cov i=123456 s="./test.cov" i=5
    
    c) 执行libclua.so的stop_cov手动关闭,等价于stop_cov(L)
    # ./hookso call $PID libclua.so stop_cov i=123456
    • 执行完上述两种方法的任一一种,用clua解析test.cov查看结果。clua更多参数参考-h
    # ./clua -i test.cov

    示例

    • 运行test.lua
    # lua5.3 ./test.lua
    • 查看目录下,已有test.cov文件
    # ll test.cov
    • 查看结果,每行前面的数字表示执行的次数,空表示没被执行,方便定位潜在bug。最后几行显示了总体覆盖率,以及每个函数的覆盖率
    # ./clua -i test.cov     
    total points = 27, files = 1
    coverage of /home/project/clua/test.lua:
        local cl = require "libclua"
        cl.start("test.cov", 5)
        
    1   function test1(i)
    10      if i % 2 then
    10          print("a "..i)
            else
                print("b "..i)
            end
    11  end
        
    1   function test2(i)
    40      if i > 30 then
    19          print("c "..i)
            else
    21          print("d "..i)
            end
    41  end
        
    1   function test3(i)
        
    51      if i > 0 then
    51          print("e "..i)
            else
                print("f "..i)
            end
        
    52  end
        
        test4 = function(i)
        
            local function test5(i)
    12          print("g "..i)
    15      end
        
    15      for i = 0, 3 do
    12          test5(i)
            end
        
    4   end
        
    102 for i = 0, 100 do
    101     if i < 10 then
    10          test1(i)
    91      elseif i < 50 then
    40          test2(i)
            else
    51          test3(i)
            end
        end
        
    4   for i = 0, 2 do
    3       test4(i)
        end
        
    1   cl.stop()
        
    /home/project/clua/test.lua total coverage 78% 22/28
    /home/project/clua/test.lua function coverage [function test1(i)] 66% 2/3
    /home/project/clua/test.lua function coverage [function test2(i)] 100% 3/3
    /home/project/clua/test.lua function coverage [function test3(i)] 66% 2/3
    /home/project/clua/test.lua function coverage [test4 = function(i)] 75% 3/4
    /home/project/clua/test.lua function coverage [local function test5(i)] 100% 1/1
    • 也用lcov查看
    # ./clua -i test.cov -lcov test.info
    • 此时目录下已有test.info文件,然后用lcov的工具输出html
    # genhtml test.info
    • 打开目录下的index.html如下

    b06453a28bf3a3e913b9d93aecd1d134.png
    • 点击进入test.lua

    8fb9df847d7b14b6b82010b91841b229.png
    • lcov还可以对info文件进行合并,更多操作参考官方文档

    其他

    lua的性能分析工具pLua

    展开全文
  • 由于当初设计的问题,用户的信息没有存在Redis中,而是由请求头携带的,因此需要在用户首次访问的时候缓存用户信息到Redis中,但是redisTemplate却无法注入到拦截其中,核心代码如下所示: SessionInterceptor.java ...

    最近在做微服务间用户权限打通的时候,由于当初设计的问题,用户的信息没有存在Redis中,而是由请求头携带的,因此需要在用户首次访问的时候缓存用户信息到Redis中,但是redisTemplate却无法注入到拦截其中,核心代码如下所示:
    SessionInterceptor.java

    
    package cn.lz.conf.auth;
    
    import java.util.concurrent.TimeUnit;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.core.ValueOperations;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import cn.hutool.json.JSONUtil;
    import cn.lz.dh.common.utils.effi.PipelineUtil;
    import cn.lz.dh.feign.dragon.dto.User;
    
    
    /**
     * 
    * Copyright: Copyright (c) 2019 Jun_Zhou
    * 
    * @ClassName: SessionInterceptor.java
    * @Description: Session拦截器,当用户首次访问的时候,
    * 				根据用户名或者Id查询用户详情并缓存于Redis中[k(用户Id)->V(用户详情)];
    * 
    * @version: v1.0.0
    * @author: JunZhou
    * @Email: 1769676159@qq.com
    * @Site: CERNO
    * @date: 2019年5月14日 上午10:25:38
     */
    public class SessionInterceptor implements HandlerInterceptor
    {
    	@Autowired
    	RedisTemplate<String, String>	redisTemplate;
    	
    	//设置默认的额过期时间为15分钟;
    	private Long					timeout				= (long) (15 * 60);
    	
    	//缓存空间名称;
    	private static final String		CACHE_NAME_SPACE	= "efffi:user:";
    	
    	@Override
    	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception
    	{
    		//当前服务不存在登陆请求,因此不用考虑登陆请求造成的死循环问题;
    		String userId = request.getHeader("userid");
    		String userName = request.getHeader("userName");
    		Boolean hadCachedCurrentUserInfo = hadCachedCurrentUserInfo(userName, userId);
    		if (!hadCachedCurrentUserInfo)
    		{
    			//当没有缓存当前用户详情的时候调用第三方服务查询用户详情;
    			User userDetail = PipelineUtil.parseUserInfoFromResEntity(userId);
    			ValueOperations<String, String> opsForValue = getValueOperations();
    			if (userDetail != null)
    			{
    				String jsonPrettyStr = JSONUtil.toJsonPrettyStr(userDetail);
    				//缓存用户信息到redis中;
    				opsForValue.set(CACHE_NAME_SPACE + userId, jsonPrettyStr, timeout, TimeUnit.SECONDS);
    			}
    		}
    		return true;
    	}
    	
    	/**
    	 * 该方法将在Controller执行之后,返回视图之前执行,modelAndView表示请求Controller处理之后返回的Model和View对象,所以可以在
    	 * 这个方法中修改modelAndView的属性,从而达到改变返回的模型和视图的效果。
    	 */
    	@Override
    	public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception
    	{}
    	
    	@Override
    	public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception
    	{}
    	
    	/**
    	 *  判断当前用户信息是否被缓存,用于加快访问效率;
    	 * @param userName:用户名;
    	 * @param userid : 用户Id;
    	 * @return:用户信息是否被缓存的标志【true/false】;
    	 */
    	public Boolean hadCachedCurrentUserInfo(String userName, String userid)
    	{
    		Boolean hadCachedCurrentUserInfo = true;
    		//从Redis中获取指定key的值;
    		ValueOperations<String, String> opsForValue = getValueOperations();
    		Object object = opsForValue.get(CACHE_NAME_SPACE + userid);
    		//根据请求头信息中的用户信息判断session中是否存在有效的用户信息;
    		if (null == object)
    		{
    			hadCachedCurrentUserInfo = false;
    		}
    		return hadCachedCurrentUserInfo;
    	}
    	
    	/**
    	 * 获取redis中的对象操作句柄;
    	 * @return
    	 */
    	public ValueOperations<String, String> getValueOperations()
    	{
    		ValueOperations<String, String> opsForValue = redisTemplate.opsForValue();
    		return opsForValue;
    	}
    }
    
    

    SessionConfiguration.java

    
    package cn.lz.conf.auth;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    
    
    /**
     * 
    * Copyright: Copyright (c) 2019 Jun_Zhou
    * 
    * @ClassName: SessionConfiguration.java
    * @Description: 用户信息Redis缓存相关的配置类;
    * 
    * @version: v1.0.0
    * @author: JunZhou
    * @Email: 1769676159@qq.com
    * @Site: CERNO
    * @date: 2019年5月14日 下午12:38:53
    */
    @Configuration
    public class SessionConfiguration extends WebMvcConfigurerAdapter
    {
      【-->
    		@Bean
    		public SessionInterceptor getSessionInterceptor()
    		{
    			return new SessionInterceptor();
    		}
    	<--】
    	@Override
    	public void addInterceptors(InterceptorRegistry registry)
    	{
    		registry.addInterceptor(getSessionInterceptor()).addPathPatterns("/**");
    	}
    }
    
    

    最终调试发现,由于拦截器加载的时间点在springcontext之前,所以在拦截器中注入自然为null 。
    因此解决方法在配置拦截器链的类中先注入这个拦截器,代码如下:

    【-->
    		@Bean
    		public SessionInterceptor getSessionInterceptor()
    		{
    			return new SessionInterceptor();
    		}
    	<--】
    

    这样,就相当于将当前拦截器交给了Spring的IOC容器管理,因此拦截器中的属性注入自然就不会发生问题了。

    参考文章:
    记录解决一个springboot拦截器无法注入redisTemplate操作工具类问题
    Spring boot整合redis过程中,发现自定义的拦截器注入不了redis接口service。

    展开全文
  • 代码: import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import ...

    代码:

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    import com.cache.CacheUtil;
    
    /**
     * 类名: ValidateInterceptor
     * 描述: 校验拦截器
     */
    public class ValidateInterceptor implements HandlerInterceptor {
    
    	private static UnLogger logger = UnLogger.getLogger(ValidateInterceptor.class);
    	
    	@Autowired
    	CacheUtil cacheUtil;
    	
    	@Override
    	public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
    		boolean checkResult=true;
    		//指定允许其他域名访问  
    		response.addHeader("Access-Control-Allow-Origin", "*");
    		//响应类型  响应方法
    		response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS"); 
    		response.setHeader("Access-Control-Allow-Headers", "Content-Type");  
    		response.addHeader("Access-Control-Max-Age", "30");   
                    //省略
    		String token = request.getParameter("token");
                    //位置1
    		//校验
    		if(StringUtils.isNotEmpty(token)){
    			try{
    				if(StringUtils.isNotEmpty(cacheUtil.get(token))){ //报错,空指针异常
    					cacheUtil.expire(token, Constant.TOKEN_EFFECTIVE_TIME);
    					checkResult = true;
    				}
    			}catch(Exception e){
    				logger.error("redis异常!");
    				e.printStackTrace();
    				sessionVerify(request, response, checkResult);
    			}
    		}else{
    			sessionVerify(request, response, checkResult);
    		}
    		return checkResult;
    	}
            //省略
    }

     

    解决办法,在位置1加上下面的代码就可以了:

     

    //注入失败
    if(cacheClusterUtil == null){
    	WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
    	cacheUtil = wac.getBean(CacheUtil.class);
    }
    引入:
    import org.springframework.web.context.WebApplicationContext;
    import org.springframework.web.context.support.WebApplicationContextUtils;

     

     

    展开全文
  • 远程注入代码

    千次阅读 2013-05-23 14:02:59
    近日在做一软件汉化工作时,由于原软件的标题在程序内部会根据运行状态发生变化,且其中的Tab Contrl控件的标签也是由代码写死的,无法使用资源编辑进行修改,而且当时没有找到合适的工具来对PE文件进行修改,而且...
       近日在做一软件汉化工作时,由于原软件的标题在程序内部会根据运行状态发生变化,且其中的Tab Contrl控件的标签也是由代码写死的,无法使用资源编辑器进行修改,而且当时没有找到合适的工具来对PE文件进行修改,而且这种方法由于没有做过没有经验,难以保证原有系统的稳定性,所以就采用了在原有程序外面挂接一个程序,来修改原有软件的这部分文字。 

           对于程序的标题栏,在外接程序中使用FindWindowSetWindowText等函数很快就解决问题,但是在修改Tab Control的标签时,却遇上了极大的麻烦,问题描述如下:Tab Control控件本身提供了数种操纵消息,而针对这些消息,微软又提供了一套宏,以方便操作,例如使用TabCtrl_GetItemCount宏来获得Tab Control上的页数,使用TabCtrl_GetItem来获得其中某一页的内容,使用TabCtrl_SetItem来设置某一页的内容。鉴于以上信息,很自然的想到了在外接程序种使用TabCtrl_SetItem来修改Tab Control上某一页的标题,而且很快的,我也在其中写出了代码。然而,问题出现了,该宏并不工作。 

           后来,几经查找,终于找到了原因:外接程序和目标程序,在运行时分别属于两个进程,而TabCtrl_SetItem宏使用SendMessage发送消息,其中一个比较重要的参数是一个TCITEM结构的指针,而此结构种pszText又是一个TCHAR的指针,存储着要设置的字符串资源,然而该TCITEM结构的指针,只在外接程序中有效,到了目标进程中就成了一个野指针。 

           归结起来,这个问题又落到了进程间通信,然而,由于目标程序是已经固定了的,没有源代码,难以修改,所以即使解决了进程间的通信问题,那么问题也仍然难以解决。于是想到了,在目标进程中,注入一段代码,来完成这个工作。首先想到的是DLL注入,但是由于这个问题似乎比较简单,懒得重新开个项目,做个DLL出来,也就是说使用一个比较简单的方法往目标进程中注入一段代码,完成任务即可,于是想到了使用CreateRemoteThread来往目标进程中注入一个线程,在此线程中修改界面的标题,并调用TabCtrl_SetItem等函数来完成任务。 

           于是,很快又参考MSDN中关于CreateRemoteThread函数的规范,写出了线程函数和创建该线程的代码,在VC6中,F5,期望着出现结果,然而,再次,令人失望的是,线程并没有跑起来,使用任务管理器查看,发现目标进程中的线程数并没有任何变化,也就是说,线程创建失败,然而,在外接程序代码中,单步跟踪后,发现线程成功创建,那么,问题出在哪里呢?      

           经过一再的详细阅读MSDN中的说明,忽然发现,原来是远程线程的启动函数的地址出了问题,该函数要求,线程函数的地址要是在目标进程中的地址,而我直接传递的是本地进程中的地址,这样在目标进程中肯定找不到可执行的代码,于是使用VirtuAllocEx函数在目标进程分配控件,使用WriteProcessMemory函数往目标进程拷贝资源,几经周折后,终于让线程跑了起来,并完成了任务。 

           这里是使用CreateRemoteThread函数时的步骤:

        ① 使用VirtualAllocEx函数在目标进程中分配空间,用以容纳线程函数代码。   

        ② 使用WriteProcessMemory函数把本地进程中线程函数的代码拷贝到目标进程中。

        ③ 在目标进程中分配线程参数的空间。

        ④ 把本地进程中设置好的线程参数拷贝到目标仅此中。这里要注意的是,线程参数中最好不要有指针。

        ⑤ 使用CreateRemoteThread函数创建远程线程。

        ⑥ 等待远程线程结束。

        ⑦ 当远程线程结束后,使用VirtualFreeEx函数释放前面所分配的空间。并使用CloseHandle关闭线程句柄。

     

        还有几点值得注意的是:

        ① 在远程进程中使用到的函数,例如SetWindowTextSendMessage等,都需要是目标进程空间中地址。也就是说,要使用LoadLibraryGetProcAddress函数来获得函数的地址。——这里要说明的一点是,LoadLibraryGetProcAddress函数的地址,来自与Kernel32.dll库,而这个库,在Windows平台中,是被映射到相同的地址空间的,所以在本地进程中找到的地址可以在目标进程中使用。

        线程参数中如果涉及到指针,则自己要保证这些指针在目标进程中有效。

        ③ 给代码空间和参数空间分配的空间大小,一定要足够容纳代码和参数。

    展开全文
  • 非常基础的代码审计练习的cms系统,适合有php基础的审计新手练习,当然了该套cms还有不少的其他漏洞,这里该篇文件只是介绍Union注入。 准备环境: phpstudy工具 BlueCms1.6源码 Sublime编辑安装了Ctags插件 代码...
  • 它是一个代码生成,并不是一个框架。我们只需要在一个特殊的go文件中告诉wire类型之间的依赖关系,它会自动帮我们生成代码,帮助我们创建指定类型的对象,并组装它的依赖。 使用 1. 简单例子: 一个普通的符合依赖...
  • Go的基于反射的依赖项注入工具箱。 适用于: 为应用程序框架(例如供电。 在流程启动期间解析对象图。 不利于: 用于代替应用程序框架,例如 。 在过程开始后解决依赖关系。 公开给用户区域代码作为。 安装 ...
  • 向数据库插入代码 绕过验证登录 工具参数获取 工具思路 验证sql注入是否存在 基于错误base_error You have an error in SQL syntax; 获取测试url,对指定参数进行模糊测试FUZZ 工具参数设置 测试...
  • DLL劫持技术,是一个被微软公司封印了的超强注入技术。如果DLL劫持设计不合理,被注入之后,程序在调用原被...使用这个工具,可以帮你自动创建你要劫持的DLL,并且在程序调用原系统DLL的时候,依然正常工作,毫无影响。
  • 部门在完善安全工具中间件来加固项目,其中就有包括基于Mybatis拦截实现数据脱敏的工具工作原理如图:问题在调用时加密敏感数据时发现报空指针异常,经Debug发现为注入的EncryptManager为空拦截部分代码@...
  • 开发工具:Visual Studio 2017 C#版本:C#7.1 最有效的防止SQL注入的方式是调用数据库时使用参数化查询。 但是如果是接手一个旧的WebApi项目,不想改繁多的数据库访问层的代码,应该如何做。 我的解决方案是加一个...
  • 您将要创造的 介绍 ... 在Xcode 7之前,可以在运行时将代码注入Xcode以创建插件。 可以通过一个名为Alcatraz的出色应用程序来提交和分发插件。 在Xcode 8中不再可能。 Xcode 8会验证每个库和捆绑软件,以防止...
  • 简单,只需几行代码,即可输出结果,或通过注入,不用修改代码 准确,评分lua hook,定时采样的方式更能准确捕获lua执行的热点 轻量,因为是采样的,直接直接行行lua hook,能最小程度影响宿主程序的运行 直观,输出...
  • 代码生成 通用的CURD 条件构造 自定义SQL语句 分页插件、性能分析插件 公共字段自动填充 特性 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本 CURD,性能基...
  • 我在用springbbot+jwt 做token效验的时候,把token放到redis中,直接从redis里取token,但是实际开发的时候发现,redis的操作类对象 无法注入到jwt的拦截中。 解决代码: 拦截类 @Configuration public ...
  • 风越ASP代码生成 2.4

    2009-05-26 21:22:40
    《风越ASP代码生成 [FireAsp Creator]》是一款采用.Net FrameWork2.0框架,基于Microsoft SQL Server及Microsoft Access数据库的ASP代码生成软件,可快速建立数据信息的:添加、编辑、查看、列表、搜索页面。...
  • 服务端模版注入(Server-side Template Injection,SSTI),影响组件Widget Connector(小工具连接)。 影响版本: 6.6.12版本之前所有版本 6.7.0-6.12.2版本 6.13.3之前的所有6.13.x版本 6.14.2之前的所有6.14.x...
  • 《风越代码生成 [FireCode Creator]》是一款采用.Net FrameWork2.0框架、基于多种数据库的程序代码生成软件,可快速建立数据信息的:添加、编辑、查看、列表、搜索功能。默认提供asp、aspx WEB程序、.net普通三层...
  • 开发工具:Visual Studio 2017C#版本:C#7.1 最有效的防止SQL注入的方式是调用数据库时使用参数化查询。但是如果是接手一个旧的WebApi项目,不想改繁多的数据库访问层的代码,应该如何做。 我的解决方案是加一个...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 370
精华内容 148
关键字:

代码注入器工具