2019年1月16日【第三天学习】

2019年1月16日星期三

任务一、运行CrackMe1.exe,提示 "嗯,对了" 代表成功。首先修改exe使得出现成功提示,其次不修改exe输入正确的密码达到成功的目的。

hint:https://blog.csdn.net/Nagi_Way/article/details/68961121

使用.Net的Reflector反编译器,使用F3查找该函数

 

 

byte[] bytes = Encoding.ASCII.GetBytes("wctf{wol");

byte[] rgbIV = Encoding.ASCII.GetBytes("dy_crack}");

DESCryptoServiceProvider provider = new DESCryptoServiceProvider();

int keySize = provider.KeySize;

MemoryStream stream = new MemoryStream();

CryptoStream stream2 = new CryptoStream(stream, provider.CreateEncryptor(bytes, rgbIV), CryptoStreamMode.Write);

StreamWriter writer = new StreamWriter(stream2);

writer.Write(data);

writer.Flush();

stream2.FlushFinalBlock();

writer.Flush();

return Convert.ToBase64String(stream.GetBuffer(), 0, (int) stream.Length);

 

密文:fOCPTVF0diO+B0IMXntkPoRJDUj5CCsT

密钥:wctf{wol

偏移量:dy_crack}

明文:wctf{dotnet_crackme1}

 

任务二、阅读下面文章,写出阅读心得

http://www.vuln.cn/7115

http://www.vuln.cn/7116

http://www.vuln.cn/7117

http://www.vuln.cn/7118

 

博客一:

1、JVM字节码比其他的X86低级代码更加容易反编译

1)多很多相关类型的信息

2)JVM(java虚拟机)内存模式更加严格和概括

3)Java编译器没有做任何优化工作(JAM JIT不是实时)

 

2、JVM知识何时有用?

1)分析混淆代码

2)创建自己的混淆器

3)创造编译器代码生成器

 

3、javap –c   反编译器      

1)通过编译确定内存申请状况

编译:

Int i=2;

Int j=3;

 

  Code:
   0:   iconst_2    //把2放到栈顶
   1:   istore_1    //把栈顶的值放到局部变量1中,即i中
   2:   iconst_3    //把3放到栈顶
   3:   istore_2    //把栈顶的值放到局部变量1中,即j中
   4:   return

 

编译:

Int i=2;

Int j=2;

 

  Code:
   0:   iconst_2    //把2放到栈顶
   1:   istore_1    //把栈顶的值放到局部变量1中,即i中
   2:   iconst_2    //把2放到栈顶
   3:   istore_2    //把栈顶的值放到局部变量2中,即j中(i 和 j同时指向2)
   4:   return

 

编译:

Int i=2;

Int j=i;

 

  Code:
   0:   iconst_2    //把2放到栈顶
   1:   istore_1    //把栈顶的值放到局部变量1中,即i中
   2:   iload_1     //把i的值放到栈顶,也就是说此时栈顶的值是2
   3:   istore_2    //把栈顶的值放到局部变量2中,即j中
   4:   return

 

2)通过编译确定i++与++i的区别与联系

Int i=1;   I++;

Int j=1;   J++

 

 Code:
  0:   iconst_1
  1:   istore_1
  2:   iinc    1, 1 //这个个指令,把局部变量1,也就是i,增加1,这个指令不会导致栈的变  化,i此时变成2了
  5:   iconst_1
  6:   istore_2
  7:   iinc    2, 1//这个个指令,把局部变量2,也就是j,增加1,这个指令不会导致栈的变化,j此时变成2了
  10:  return

 

Int i=1;   I++;

Int j=1;   ++J;

 

  Code:
   0:   iconst_1
   1:   istore_1
   2:   iload_1
   3:   iinc    1, 1  //局部变量1(即i)加1变为2,注意这时栈中仍然是1,没有改变
   6:   istore_1    //把栈顶的值放到局部变量1中,即i这时候由2变成了1
   7:   iconst_1
   8:   istore_2
   9:   iinc    2, 1 //局部变量2(即j)加1变为2,注意这时栈中仍然是1,没有改变
   12:  iload_2    //把局部变量2(即j)的值放到栈顶,此时栈顶的值变为2
   13:  istore_2   //把栈顶的值放到局部变量2中,即j这时候真正由1变成了2
   14:  return

 

理解了上面的程序,我们来看一个很有趣的程序:

public class a{

       public static void main(String[] args){

       int m=0;

       for(int i=0;i<100;i++)

              m=m++;

       System.out.println(m);

}

}

先看结果:

 

是不是很惊艳!至少我被惊艳了!

当执行m=m++的时候m的值加一了,但是栈中的值还是0

 

Python中是没有i++的

Java的i++输出为0

C的i++输出是100

 

证明参考博客:

http://www.cnblogs.com/beautiful-code/p/6424977.html

https://www.cnblogs.com/tutuu/p/4115172.html

https://blog.csdn.net/qq_37937537/article/details/79931157

证明如下:

 

【这里有图片无法上传,便不再上传,感兴趣同学自行研究】

程序如下:

 

 

 

m++的:

Code:

       0: iconst_0                            //把0放到栈顶

       1: istore_1                             //把栈顶元素放到1号存储块中,即为m=0

       2: iconst_0                            //把0放到栈顶

       3: istore_2                             //把栈顶元素放到1号存储块中,即为i=0

       4: iload_2                              //把局部变量2(m)放到栈顶

       5: bipush        100           //循环100次

       7: if_icmpge     19

      10: iinc          1, 1            //把局部变量1加一,m++

      13: iinc          2, 1            //把局部变量2加一,i++

      16: goto          4              //前往4号地址块

      19: getstatic                         // Field java/lang/System.out:Ljava/io/PrintStream;

      22: iload_1

      23: invokevirtual #3             // Method java/io/PrintStream.println:(I)V

 

m=m++的:

    Code:

       0: iconst_0                            //把0放到栈顶

       1: istore_1                             //把栈顶元素放到局部变量表第1个位置中,即为m=0

       2: iconst_0                            //把0放到栈顶

       3: istore_2                             //把栈顶元素放到局部变量表第2个位置号中,即为i=0

       4: iload_2                              //复制变量2入栈

       5: bipush        100           //循环100次

       7: if_icmpge     21

      10: iload_1                              //m++

      11: iinc          1, 1

      14: istore_1                      重点//将命令10的结果赋给变量1,组合命令,勿单看

      15: iinc          2, 1            //i++

      18: goto          4              //跳转到4

      21: getstatic                         // Field java/lang/System.out:Ljava/io/PrintStream;

      24: iload_1

      25: invokevirtual #3           // Method java/io/PrintStream.println:(I)V

      28: return

 

转载于:https://www.cnblogs.com/wuruixin/p/10281605.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

玩转oracle 11g(46):图解oracle数据库

1构成 由实例和数据库构成 2构成 3市例 4构成

[Leedcode][JAVA][第46题][全排列][回溯算法]

【问题描述】 46.全排列 &#xff08;中等&#xff09; 给定一个 没有重复 数字的序列&#xff0c;返回其所有可能的全排列。示例:输入: [1,2,3] 输出: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1] ]【解答思路】 1. 回溯 时间复杂度&#xff1a;O(NN&#xff01;) 空间…

java学习(167):生产者消费者问题

class Ck {private char[] r1 new char[8];private int wp 0;public synchronized void shengchan(char aa) {while (wp r1.length) //满了try {this.wait();} catch (Exception e) {}this.notify();//叫醒另一个线程&#xff0c;当前线程处于就绪状态r1[wp] aa;wp;System.…

[Markdown语法][快速入门][CSDN]

Markdown语法Markdown学习资料【使用建议】快捷键目录标题文本样式列表链接代码片表格注释 & 注脚自定义列表LateX数字公式插入甘耐图插入UML图插入Mermaid流程图插入Flowchart流程图Markdown学习资料 「中文文案排版指北」 「官方文档」 [科学上网] 【使用建议】 Mark…

常用开发环境搭建配置教程(OneStall)

最近想要做一个小东西&#xff0c;用到了下面几个中间件或者环境&#xff1a; Java Tomcat Maven MongoDB ZooKeeper Node 并且恰好碰到腾讯云打折&#xff0c;云主机原价100多一个月&#xff0c;花了30块钱买了三个月。买下后立即动手准备开始环境配置。 说到环境&#xff0c;…

sqlserver:(1):sqlserver安装超详细

1第一步&#xff0c;下载对应的镜像文件链接&#xff1a; https://pan.baidu.com/s/1nBwjrukxCAMD4xLdYofPXA 提取码&#xff1a;9rv7 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 然后&#xff0c;点击左面安装&#xff0c;在显示页面中点击全新SQLServer独…

linux 5识别网卡,CentOS 5.5系统识别不了Atheros AR8151网卡怎么办?

在安装完CentOS 5.5系统后&#xff0c;有些人出现无法上网的现象&#xff0c;经检测发现是Atheros AR8151网卡识别不了&#xff0c;遇到这种问题不用怕&#xff0c;下面小编就给大家介绍下CentOS 5.5无法识别Atheros AR8151网卡的解决方法。现象前段时间&#xff0c;在一台电脑…

混合代码块 Markdown Leedcde

混合代码块 Markdown&#xff08;仅限Leedcode&#xff09; 使用说明 Markdown 语法 注意语言后有空格 &#xff01; 展示效果

java学习(168):java连接SQL server数据库

1安装sql server数据库 2打开eclipse写入以下代码 package sjk;import java.sql.*;public class Main {//这里可以设置数据库名称private final static String URL "jdbc:sqlserver://localhost:1433;DatabaseNametest";private static final String USER"sa&…

mongo:(1)nosql简介

MongoDB 是一个基于分布式文件存储的数据库。由 C 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。 NoSQL 简介 NoSQL(NoSQ…

[Leedcode][JAVA][第33题][搜索旋转排序数组]

【问题描述】[33. 搜索旋转排序数组] [中等] 假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如&#xff0c;数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值&#xff0c;如果数组中存在这个目标值&#xff0c;则返回它的索引&#xff0…

001. Ansible简介

一 简介 Ansible是一款极其简单的自动化运维工具, 基于Python开发, 集合了众多运维工具(puppet, cfengine, chef, func, fabric)的优点。 实现了批量系统配置, 批量程序部署, 批量运行命令等功能。 Ansible是基于模块工作的, 本身没有批量部署的能力。真正具有批量部署的是ansi…

mongo:(2)mongoDB简介

什么是MongoDB ? MongoDB 是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个…

linux分割图片软件,桌面应用|5 种拆分 Linux 终端的方法

本文介绍了 Linux 提供的拆分终端的方法&#xff0c;它能够帮助你完成多任务工作。那么&#xff0c;你最喜欢哪一款终端复用工具呢&#xff1f;没有什么问题是不能用一个 Linux 终端解决的&#xff0c;如果不行&#xff0c;那就用两个。很早以前&#xff0c;终端其实是一个物理…

[剑指offer][JAVA][面试题56 - I][第260题][位运算][HashSet]

【问题描述】 [面试题56 - I] [数组中数字出现的次数] 一个整型数组 nums 里除两个数字之外&#xff0c;其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n)&#xff0c;空间复杂度是O(1)。示例 1&#xff1a;输入&#xff1a;nums [4,1,4,6] …

mongo:(3)windows上mongoDB安装

1打开程序 2下一步 3下一步 4custom自定义 5取消勾选&#xff0c;安装 6安装完成以后 在bin目录下建文件夹 7创建结束&#xff0c;将mongo.conf放在根目录下 8管理员运行 Cd D:\Program Files\MongoDB\Server\3.6\bin 然后 9 >mongod --config D:\mongo\mongo.conf --i…

LOJ10121 与众不同

题目描述 A 是某公司的 CEO&#xff0c;每个月都会有员工把公司的盈利数据送给 A&#xff0c;A 是个与众不同的怪人&#xff0c;A 不注重盈利还是亏本&#xff0c;而是喜欢研究「完美序列」&#xff1a;一段连续的序列满足序列中的数互不相同。 A 想知道区间 [L,R] 之间最长的完…

[计算机网络][总结][常见问题][TCP][三次握手][四次挥手]

TCP三次握手 四次挥手 三次握手 目的&#xff1a;保证传输的可靠性,为了防止已失效的连接请求报文段突然又传送到了服务端&#xff0c;因而产生错误。主要防止资源的浪费。 具体过程&#xff1a;当客户端发出第一个连接请求报文段时并没有丢失&#xff0c;而是在某个网络节点…

第二十二期:淘宝技术架构分享

一&#xff0c;淘宝技术架构 1.UIC: 用户中心(User Interface Center),提供所有用户信息相关的读写服务&#xff0c;如基本信息&#xff0c;扩展信息&#xff0c;社区信息&#xff0c;买卖家信用等级等等。 淘宝现在有两类卖家B 和C&#xff0c;这是通过在用户身上打不同的标签…

Linux启动过程以及初始化

Linux系统启动 POST加电自检–> 硬件检查 引导加载程序BIOS(Boot Sequence)–> 找到主引导记录&#xff08;MBR&#xff09;&#xff0c;引导加载程序检查分区表并找到一个可引导的分区 加载对应引导上的MBR(bootloader)–> 引导加载程序将所选操作系统的内核加…