精华内容
下载资源
问答
  • 五位手
    千次阅读
    2022-02-24 10:57:51

    mcu一般用atitiny13A,可以使用arudino编写,自己考虑使用stc8G1K08A开发,但是还不会。

    原理图:

    工作原理

    1、 二极管D1与电容C1组成单片机MCU电源,其作用是用于电筒断电后,能给单片机提供几秒的连续应急电源,D1于用断电后防止MCU电源上的电反向流出;C1调节断电维持时间,增大C1,可以延长手电筒断电换档时间。4脚用于断电检测,R1是其下拉电阻,6脚控制n个AM7135。

    2、电路工作过程:当K1开关接通时,4脚为高电位,MCU正常工作在第一档功能,在K1快速断开,接通时,MCU的4脚在开关断开时,检测到低电位,(由于C1上的电被D1二极管反向截止,通过R1下拉电阻到负极);当4脚为低电位,单片机MCU关闭输出,LED不亮,进入睡眠模式。

    当K接通时,MCU的4脚被单片机内部上拉电阻接通到电池正极,为高电位,MCU被唤醒,通过MCU程序被执行下一档功能(对6脚进行控制);再按开关,MCU如此循环工作

    3、如果要把MCU脚位全部利用起来,可以增加档位选择功能,如把2脚接负极,则手电筒只有2档,如3脚接负极,则手电筒有3档功能,7脚接负极,手电筒为4档,所有3个脚不接负极,为默认5档功能,

    更多相关内容
  • 拆分5位整数

    2013-12-08 09:53:30
    输入位数,把每数字拆开写一个应用程序获得一包含张的扑克牌组。 然后编写类DeckofCard里面有实例方法判断一手牌中是否包含
  • 脱64UPX壳

    千次阅读 2019-08-03 22:54:00
    脱64UPX壳 背景 近期舍友不知道为啥忽然要汉化一个GTA的外挂,第一次听说他要汉化,问了我一堆关于逆向的东西。由于外挂加了upx的壳(也是peid说的,我感觉是一个很奇怪的壳),他搞不定于是发来给我。 我平时也...

    手脱64位UPX壳

    背景

    近期舍友不知道为啥忽然要汉化一个GTA的外挂,第一次听说他要汉化,问了我一堆关于逆向的东西。由于外挂加了upx的壳(也是peid说的,我感觉是一个很奇怪的壳),他搞不定于是发来给我。

    我平时也是逆向linux的elf文件多一些,windows的而且还是64位的几乎没搞过,平时也没脱过什么壳,也就是听说过原理而已(感觉不难),再加上我之前的电脑坏掉了返厂修了,新电脑刚到手,什么环境都没有,需要现搭建,虽然比较麻烦,不过毕竟就是脱个壳而已,原理啥的我也听说过,正好到了周末也可以试试。

    分析软件

    拿到程序之后我下了个52破解的虚拟机,发现是32位的,由于程序是64位的,导致里面的工具都用不了…哭。不过也没事,就是脱个壳,直接下一个动态调试的工具就行,属实没弄过64位的windows程序,下了个x64dbg,之前没用过,打开之后发现界面还有快捷键和od几乎一样,小开心一波。

    看了下程序,打开直接就弹窗,说我没有打开GTA5游戏…不过也不是破解软件,就没必要下载GTA了,直接开始脱壳吧:
    在这里插入图片描述
    然后打开x64dbg,虽然知道加了壳,但还是有点诧异,代码有丶奇怪:
    在这里插入图片描述
    由于64位进程没有pushad和popad,但按理说也应该开始的时候有那么4、 5个push吧,这个程序开具就是个ret给我搞蒙了。导致直接没办法通过栈平衡(ESP定律法)来找到入口点。但这并难不倒我,虽然不能通过快捷方法,但无论如何他也只是壳程序,最后肯定要将原程序解压缩完毕装载入内存的,我一步一步执行还不信了。

    脱壳过程

    脱壳过程有点容易…我先一直单步执行,执行到一个向上跳转的地方,按照单步执行的原则,我需要直接执行到它的下一句,于是我在下一句下断点然后点运行:
    在这里插入图片描述
    结果它停到了一个奇怪的地方:
    在这里插入图片描述
    代码忽然变得好看了,然后程序中关于段的名字也变成了程序原本的名字modest-menu,而不是之前的ntdll而且地址段也从之前的7ff9…变为了1400…跨度相当大。
    在这里插入图片描述
    ​ 图:之前程序中关于地址段描述都是ntdll

    我有丶理由相信这里是oep,然后我记得我应该将这个程序从内存中dump下来然后导入IAT输入表等操作,查看了一下我只有这么个插件:
    在这里插入图片描述
    打开看了下基本能满足需求:在这里插入图片描述

    点了下转储,然后点IAT自动搜索和获取输入表,一个也没找到…在这里插入图片描述

    这说明我OEP找错了,这么好看的地方都不是OEP,那我只能继续向后找。因为这是第一次跳到这里,在这之前一直都在ntdll的地方执行,OEP肯定不会只在那里,所以我只能向后找。我知道这个程序刚打开由于我没有GTA进程,他会弹窗告诉我没有找到GTA,所以我一句一句执行到弹窗的代码,那么者之间就会存在OEP,而且说不定OEP也很明显就会被发现:
    在这里插入图片描述
    直行道方框代码处就会弹窗,其实OEP就在折页的上方圆圈的地方,只是当时我没有发现,不过也确实没有发现,这种操作确实很少见(可能我经验比较少吧,也可能是这个程序很奇怪,比较整个程序刚进去就是一个ret)。

    确定了OEP的区段之后我又重新的在这一段中执行了一遍,我发现了一个大跳转:
    在这里插入图片描述
    这里就是这个软件坑的地方了,这句代码是从别的地方跳过来的,它直接把光标放在了第一行,我也不知道上文是什么内容,导致我第一遍忽略了。换一种方式看这句代码绝对不会被忽略:
    在这里插入图片描述
    这么一看,这句代码确实意义非凡,直接跳到了OEP:
    在这里插入图片描述
    现在我选择导出,然后搜索IAT,获取输入表就发现了,但第一次有几个无效选项,我以为是工具用的不对,又下了CHimpREC,最后搞了好久还缺VS运行库什么的。(新环境好麻烦)最后又回到这个插件忽然发现没有无效选项了…(神奇)或许和我装了VS的运行库有关…
    在这里插入图片描述
    最后成功脱壳,脱壳后的程序可以执行,并且在IDA里看到了原来程序的字符串:
    在这里插入图片描述
    然后交给我舍友去汉化了。

    感触

    也没啥感触,感觉脱个64位壳也不过如此嘛。

    展开全文
  • 环境:小米手环5NFC版 + CH340+...写入的号码为 扇区0前8 4. 模拟门卡,在小米手环上模拟门卡 将空白卡贴在手环上 5.模拟成功后,把手环放到写卡器上,再次写入CUID,选择步骤2保存的文件,写入成功 ...

    环境:小米手环5NFC版 + CH340+PN532芯片
    需求:模拟加密卡

    解法:使用mifareonetool,先自行下载驱动和软件 MifareOneTool

    步骤如下

    1.检测设备

     

     

    2.扫描卡片并一键破解,保存文件

     

    3.格式化空白卡后UID写号

     

    写入的号码为 扇区0前8位

     

    4. 模拟门卡,在小米手环上模拟门卡 将空白卡贴在手环上

     

    5.模拟成功后,把手环放到写卡器上,再次写入CUID,选择步骤2保存的文件,写入成功

     

    6.把手环拿到门禁机上测试或者使用比对软件测试

    加载密钥-选择步骤2另存的文件-选择已知密钥读-读取手环内容,另存为手环卡文件

    7、选择高级-差异比较,比较步骤2的文件和步骤6的文件,一般0扇区最后几位不让写,索引会有不同

     

     

     

    展开全文
  • 本次上传的『Delphi XE5移动开发入门手册』比上次发的更清晰 效果更好 欢迎下载学习:) 本书『Delphi XE5移动开发入门手册』的目的是说明如何学习使用Delphi XE5来开发iOS和Android的App 本书的内容并不是说明iOS ...
  • 分钟,撸一个Spring容器

    千次阅读 多人点赞 2022-03-01 22:05:14
    分钟,撸一个Spring容器,原来Spring最核心的部分就这些……

    大家好,我是老三,Spring是我们最常用的开源框架,经过多年发展,Spring已经发展成枝繁叶茂的大树,让我们难以窥其全貌。

    这节,我们回归Spring的本质,五分钟手撸一个Spring容器,揭开Spring神秘的面纱!

    从什么是IOC开始?

    Spring——春天,Java编程世界的春天是由一位音乐家——Rod Johnson带来的。

    Rod Johnson先后编写了两本巨著《Expert One-on-One J2EE Design and Development》、《Expert One-on-One J2EE Development without EJB》,拉起了挑战正统Java EE框架EJB的大旗。

    Rod Johnson两大著作-来自百度百科

    Rod Johnson不仅是一名旗手,更是开发了Spring这一轻量级框架,像一名勇敢的龙骑兵一样,对EJB发动了冲锋,并最终战胜了EJB,让Spring成为Java EE事实上的标准。

    Spring Logo

    Spring的两大内核分别是IOC和AOP,其中最最核心的是IOC。

    所谓的IOC(控制反转):就是由容器来负责控制对象的生命周期和对象间的关系。以前是我们想要什么,就自己创建什么,现在是我们需要什么,容器就给我们送来什么。

    引入IOC之前和引入IOC之后

    也就是说,控制对象生命周期的不再是引用它的对象,而是容器。对具体对象,以前是它控制其它对象,现在所有对象都被容器控制,所以这就叫控制反转

    控制反转示意图

    也许你还听到另外一个概念DI(依赖注入),它指的是容器在实例化对象的时候把它依赖的类注入给它,我们也可以认为,DI是IOC的补充和实现。

    工厂和Spring容器

    Spring是一个成熟的框架,为了满足扩展性、实现各种功能,所以它的实现如同枝节交错的大树一样,现在让我们把视线从Spring本身移开,来看看一个萌芽版的Spring容器怎么实现。

    Spring的IOC本质就是一个大工厂,我们想想一个工厂是怎么运行的呢?

    工厂运行

    • 生产产品:一个工厂最核心的功能就是生产产品。在Spring里,不用Bean自己来实例化,而是交给Spring,应该怎么实现呢?——答案毫无疑问,反射

      那么这个厂子的生产管理是怎么做的?你应该也知道——工厂模式

    • 库存产品:工厂一般都是有库房的,用来库存产品,毕竟生产的产品不能立马就拉走。Spring我们都知道是一个容器,这个容器里存的就是对象,不能每次来取对象,都得现场来反射创建对象,得把创建出的对象存起来。

    • 订单处理:还有最重要的一点,工厂根据什么来提供产品呢?订单。这些订单可能五花八门,有线上签签的、有到工厂签的、还有工厂销售上门签的……最后经过处理,指导工厂的出货。

      在Spring里,也有这样的订单,它就是我们bean的定义和依赖关系,可以是xml形式,也可以是我们最熟悉的注解形式。

    那对应我们的萌芽版的Spring容器是什么样的呢?

    mini版本Spring IOC

    订单:Bean定义

    Bean可以通过一个配置文件定义,我们会把它解析成一个类型。

    Bean定义

    • beans.properties

      为了偷懒,这里直接用了最方便解析的properties,用一个<key,value>类型的配置来代表Bean的定义,其中key是beanName,value是class

      userDao:cn.fighter3.bean.UserDao
      
    • BeanDefinition.java

      bean定义类,配置文件中bean定义对应的实体

      public class BeanDefinition {
      
          private String beanName;
      
          private Class beanClass;
           //省略getter、setter  
       }   
      

    获取订单:资源加载

    接下订单之后,就要由销售向生产部门交接,让生产部门知道商品的规格、数量之类。

    资源加载器,就是来完成这个工作的,由它来完成配置文件中配置的加载。

    public class ResourceLoader {
    
        public static Map<String, BeanDefinition> getResource() {
            Map<String, BeanDefinition> beanDefinitionMap = new HashMap<>(16);
            Properties properties = new Properties();
            try {
                InputStream inputStream = ResourceLoader.class.getResourceAsStream("/beans.properties");
                properties.load(inputStream);
                Iterator<String> it = properties.stringPropertyNames().iterator();
                while (it.hasNext()) {
                    String key = it.next();
                    String className = properties.getProperty(key);
                    BeanDefinition beanDefinition = new BeanDefinition();
                    beanDefinition.setBeanName(key);
                    Class clazz = Class.forName(className);
                    beanDefinition.setBeanClass(clazz);
                    beanDefinitionMap.put(key, beanDefinition);
                }
                inputStream.close();
            } catch (IOException | ClassNotFoundException e) {
                e.printStackTrace();
            }
            return beanDefinitionMap;
        }
    
    }
    

    订单分配:Bean注册

    对象注册器,这里用于单例bean的缓存,我们大幅简化,默认所有bean都是单例的。可以看到所谓单例注册,也很简单,不过是往HashMap里存对象。

    public class BeanRegister {
    
        //单例Bean缓存
        private Map<String, Object> singletonMap = new HashMap<>(32);
    
        /**
         * 获取单例Bean
         *
         * @param beanName bean名称
         * @return
         */
        public Object getSingletonBean(String beanName) {
            return singletonMap.get(beanName);
        }
    
        /**
         * 注册单例bean
         *
         * @param beanName
         * @param bean
         */
        public void registerSingletonBean(String beanName, Object bean) {
            if (singletonMap.containsKey(beanName)) {
                return;
            }
            singletonMap.put(beanName, bean);
        }
    
    }
    

    生产车间:对象工厂

    好了,到了我们最关键的生产部门了,在工厂里,生产产品的是车间,在IOC容器里,生产对象的是BeanFactory。

    BeanFactory

    • 对象工厂,我们最核心的一个类,在它初始化的时候,创建了bean注册器,完成了资源的加载。

    • 获取bean的时候,先从单例缓存中取,如果没有取到,就创建并注册一个bean

      public class BeanFactory {
      
          private Map<String, BeanDefinition> beanDefinitionMap = new HashMap<>();
      
          private BeanRegister beanRegister;
      
          public BeanFactory() {
              //创建bean注册器
              beanRegister = new BeanRegister();
              //加载资源
              this.beanDefinitionMap = new ResourceLoader().getResource();
          }
      
          /**
           * 获取bean
           *
           * @param beanName bean名称
           * @return
           */
          public Object getBean(String beanName) {
              //从bean缓存中取
              Object bean = beanRegister.getSingletonBean(beanName);
              if (bean != null) {
                  return bean;
              }
              //根据bean定义,创建bean
              return createBean(beanDefinitionMap.get(beanName));
          }
      
          /**
           * 创建Bean
           *
           * @param beanDefinition bean定义
           * @return
           */
          private Object createBean(BeanDefinition beanDefinition) {
              try {
                  Object bean = beanDefinition.getBeanClass().newInstance();
                  //缓存bean
                  beanRegister.registerSingletonBean(beanDefinition.getBeanName(), bean);
                  return bean;
              } catch (InstantiationException | IllegalAccessException e) {
                  e.printStackTrace();
              }
              return null;
          }
      }
      

    生产销售:测试

    • UserDao.java

      我们的Bean类,很简单

      public class UserDao {
      
          public void queryUserInfo(){
              System.out.println("A good man.");
          }
      }
      
    • 单元测试

      public class ApiTest {
          @Test
          public void test_BeanFactory() {
              //1.创建bean工厂(同时完成了加载资源、创建注册单例bean注册器的操作)
              BeanFactory beanFactory = new BeanFactory();
      
              //2.第一次获取bean(通过反射创建bean,缓存bean)
              UserDao userDao1 = (UserDao) beanFactory.getBean("userDao");
              userDao1.queryUserInfo();
      
              //3.第二次获取bean(从缓存中获取bean)
              UserDao userDao2 = (UserDao) beanFactory.getBean("userDao");
              userDao2.queryUserInfo();
          }
      }
      
    • 运行结果

      A good man.
      A good man.
      

    至此,我们一个萌芽版的Spring容器就完成了。

    考虑一下,它有哪些不足呢?是否还可以抽象、扩展、解耦……

    细细想想这些东西,你是不是对真正的Spring IOC容器为何如此复杂,有所理解了呢?




    参考:

    [1]. 《Spring揭秘》

    [2].小傅哥 《手撸Spring》

    [3].《精通Spring4.X企业应用开发实战》


    更多干货文章👇👇👇
    展开全文
  • 给一个不多于5位的正整数,要求: ①求出它是几位数②分别输出每一位数③按逆序输出各位数字,例如原数为123,应输出321 这是我根据网上的代码,然后自己理解之后写的,比较通俗易懂。 int main() { int i,a,b,c,d,...
  • 生成5位序列号

    千次阅读 2015-08-18 22:52:47
    String xlh = code.substring(code.length()-5, code.length()); System.out.println("数据库原有的最大序列号:"+xlh); if(xlh!=null){ System.out.println("累加的新生成的序列号:"+AddOne(xlh)); }else{ ...
  • 【技巧总结】运算装逼指南

    万次阅读 多人点赞 2019-11-18 13:34:09
    算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用运算这些技巧,当然,采用运算,也是...
  • 游SDK知识详析

    千次阅读 2021-09-17 17:02:33
    除此之外,为了响应国家政策,实名认证与防沉迷模块也是必不可少,同时为了更好地服务玩家,还相应地衍生出找回密码、在线客服、留言咨询等功能点 四、游SDK包含的功能模块 游SDK主要包含大模块:登录模块、...
  • gg修改器64插件补丁最新版是2020升级的一款gg修改器64框架插件辅助器,GG修改器拥有海量脚本辅助、内存修改、物理外挂、脚本挂机等功能,定制灵活,可玩性极高,深受有安卓游玩家喜爱!gg修改器64插件补丁最新...
  • 7-12 我是升旗 (10 分)

    千次阅读 2019-09-27 20:31:34
    一年一度的升旗选拔又要到了,学校要求每个班级选出一同学做升旗的候选人。因 为升旗对身高有严格的要求,所以班主任决定选班级里个子最高的同学(如果两同学 一样高,则选任意一)。你能很快地给老师答案...
  • 通过以上所给,我明知道五位选手每个人刚好说对一半,但是是哪一半我们不知道。我们知道在我们的计算机中,对为1,不对为0,只要我们每选手的两个预测相加都恰好等于1,那条件就成立了,接下来我们动手写程序。 #...
  • 使命召唤游无法连接服务器是什么原因,相信大家在玩使命召唤游的过程中,经常会遇到这样的问题,下面ourplay小编就简单为大家介绍几种常见的解决方案。使命召唤游游戏简介《使命召唤游》是一款由动视和腾讯...
  • Java 手写 MD5验证

    万次阅读 2018-01-31 17:12:42
    package site.cnkj.util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Random; public class MD5Util { ... public static String md5str(String data)
  • 传奇游战神引擎架设教程

    千次阅读 2021-01-13 03:28:39
    DBSERVICE 2: D盘 → mud2.0 → GATESERVER → GAMEGATE → MIRGATE 3: D盘 → mud2.0 → GATESERVER → LOGINGATE → LOGINGATE 4: D盘 → mud2.0 → LOGINCENTER → LOGINCENTER-WIN → CONFIG → SERVER.JSON 5: ...
  • 题目描述:ABCDE个人传球,由A开始第一次传球,经5次传球后传回到A的上。其中A与B不会相互传球,C只会传给D,E不会传给C,共有多少种传法?解题思路:由于就5个人传球,人数比较少,可以定义枚举类型ABCDE,...
  • 运算各种方法总结

    千次阅读 2020-09-16 17:09:28
    运算1、按与2、按或3、按取反4、按异或5、按同或6、左移7、带符号右移8、无符号右移9、python实现各种运算操作 \quad \quad现代计算机中,几乎都是二进制计算机(三进制计算机仅有少量),所有的数据...
  • 数据手套的设计与实现

    万次阅读 热门讨论 2017-06-14 18:39:45
    最近因为参加比赛做了一个数据手套,话不多说,先上图: ...蓝牙发送任务(发送的姿态数据) 弯曲度传感器应用的原理就是串联分压,通过弯曲弯曲度传感器,改变它的电阻,从而改变它的电压
  • 5、计算机网络 一、计算机组成原理 计算机组成原理这门课很好地向我们阐述了计算机是如何工作的,妹子咨询你电脑问题的时候,答案就藏在这门课程里面(大雾)。 推荐书籍:《深入理解计算机系统》 这本书是从程序员...
  • 十分全面的传奇游搭建教程

    万次阅读 多人点赞 2020-03-20 04:04:24
    自打自己开始弄游之后,确实遇到了各种各样的问题。各种坑居多,不过也都算顺利,借助搜索引擎以及各大论坛,差不多都算解决了,还有很多bug,倒也不是短时间内能修复的,而且倒也无关痛痒,也就懒得再深究了。 在...
  • 3.2各部分程序的设计(1)公用程序公用程序如图5所示,左限位开关X12、上限开关X10的常开触点和表示机械松开的Y4的常开触点的串联电路接通时,辅助继电器M0变为ON,表示机械在原位。公用程序用于自动程序和手动...
  • Java运算

    千次阅读 多人点赞 2019-06-06 17:47:01
    Java定义了运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节类型(byte)等类型。 Java包含了七种运算符 运算符 说明 >> 右移运算符,符号左侧数值 按右移 ...
  • 5.PMAC下机-下机编程基础

    千次阅读 2015-03-18 16:53:36
    在开始下机编程之前,先要了解下机编程的基础-各种变量、运动参数和命令行操作。
  • 彻底搞清楚Java的运算(实现加减乘除)

    万次阅读 多人点赞 2019-12-23 20:27:19
    二进制运算是最贴近计算机真实运算操作,通过运算,我们可以高效的完成各种基础运算(加减乘除取余等),我们还可以使用运算巧妙的完成原本很复杂的工作,真正理解计算机,我们才能更好的使用计算机。...
  • 32ubuntu14.04手动编译hadoop2.6.0

    千次阅读 热门讨论 2015-01-06 16:08:07
    32ubuntu14.04手动编译hadoop2.6.0
  • 四名牌手打牌,电脑随机將52张牌(不含大、小王)发给四名牌,并在屏幕上显示每牌手的牌。 //提示:设计出三个类: Card类(代表每一张扑克)、Player类(代表每一选手)和Poke类(代...
  • JAVA DecimalFormat 保留小数以及四舍入的陷阱

    万次阅读 热门讨论 2019-03-25 13:43:56
    业务需要导出的Excel的数字内容保留两小数,并且四舍入 代码实现 百度一圈所抄袭的代码 DecimalFormat dfScale2 = new DecimalFormat("###.##"); dfScale2.format(1.125D); 发现问题 导出数据很诡异.不是所有...
  • 原标题:数板没有压感怎么办?如何设置?来源:轻微课APP(一个专门学画画的人气平台)数板没有压感怎么办?如何设置?我们在使用数板绘画的过程中经常会遇到数位笔没有压感的情况发生,很多初学者的第一个反应...
  • QQ飞车游设计分析

    千次阅读 2019-09-07 22:58:05
    腾讯系竞速游的逆袭(QQ飞车游设计分析) 前言 这是中山大学数据科学与计算机学院软件工程2019年3D游戏编程与设计的作业1。 导语 在中国巨大的游戏市场下,游战场上的战火从未熄灭,其中以王者荣耀为首的MOBA类...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 534,397
精华内容 213,758
关键字:

五位手