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

2019年1月16日【第三天学习】相关推荐

  1. 2019年3月16日山东省事业单位统考考题及解析(综合类)

    一.单项选择题(1-60小题,每小题0.8分,共48分.下列每题给出的四个选项中,只有一个选项是符合题目要求的.请在答题卡上将所选项的字母涂黑.) 2019年3月16日山东省事业单位统考考题及解析 5 ...

  2. 极光推送 请检查参数合法性_极光大数据将于2019年8月16日公布第二季度财报

    2019年7月8日,中国深圳--中国领先的移动大数据服务商极光(Aurora Mobile,纳斯达克股票代码:JG)(以下称"极光"或"公司")宣布将于2019 ...

  3. html函数splice,js数组的常用函数(slice()和splice())和js引用的三种方法总结—2019年1月16日...

    总结: slice()和splice() slice(参数1,参数2)可以查找数组下对应的数据,参数1为起始位置,参数2为结束位置,参数2可以为负数,-1对应的是从后向前数的第一个数值.splice( ...

  4. 【2019年05月16日】A股最便宜的股票

    查看更多A股最便宜的股票:androidinvest.com/CNValueTop/ 经典价值三因子选股: 市盈率PE.市净率PB 和 股息分红率,按照 1:1:1的权重,选择前10大最便宜的股票. ...

  5. 2019年无限法则服务器,无限法则1月16日更新内容一览 新地图欧罗巴海岛介绍

    无限法则1月16日更新内容一览 新地图欧罗巴海岛介绍 2019-01-16 11:21:43来源:游戏下载编辑:野狐禅评论(0) <无限法则>1月16日即将进行近期最大的一次更新,第二赛季 ...

  6. 记录值上调10_「阴阳师」10月16日维护更新公告,海国迷踪,迷影重重

    重要更新 1.活动-海国迷踪 ※晴明一行人自日轮之城归来后,发觉黑夜山.七角山.逢魔之原三地出现异样,便立刻派出童女.白狼.童男分别前往附近地区进行探查,海国大军的密谋逐渐浮出水面...... ※活动 ...

  7. 【目标一】2019年9月15日 - 2019年9月22日晚 --- 周计划

    2019年9月15日 - 2019年9月22日晚 --- 周计划 工作日作息时间 周末或者节假日作息时间(如果没有活动 或者 不用加班的话) 心若向暖,何处不阳光:心若向阳,便何处不花开 \^_\^ ...

  8. 魂武者服务器维护,《魂武者》8月16日停机更新公告

    亲爱的魂武者: 为了优化游戏体验及修复相关BUG,我们计划2019年8月16日5:00~9:00对<魂武者>服务器进行一次停机更新. 同时涉及到合服的服务器将于2019年8月16日5:00 ...

  9. 2018年11月26日到2019年4月26日工作汇总

    2018年11月26日到2019年4月26日工作汇总 2018年11月26日-2017年11月30日 上午:各种协议的填写,已经有关表单的培训 下午:对公司目前做的项目的培训,以及明确我当前的工作 部 ...

最新文章

  1. python string.format()_Python string.format()百分比,不取整
  2. 入坑推荐系统,拿这个开源项目练手
  3. 训练日志 2019.4.17
  4. codeigniter + Ajax (亲测)
  5. [zz]如何使用effect
  6. 消费金融盈利分析及风控能力建设
  7. 数据结构c语言描述第课后答案李学刚,数据结构(C语言描述)(第2版)
  8. 适配器模式之迭代器模式
  9. 想将有色彩的视频进行去色处理就这样做
  10. 【Codecs系列】HEVC标准(九):环路滤波技术之SAO
  11. shell脚本 文件拷贝
  12. 永远不要把自己置于一种不得不失去颜面而后退,同时不得不冒险而前进的境地。
  13. 希尔伯特几何基础序言
  14. 微信怎么关闭微信朋友圈及点赞提醒通知?
  15. Causality Inspired Representation Learning for Domain Generalization 阅读笔记
  16. 电视剧旗舰剧情分集大结局
  17. Educational Codeforces Round 140 (Rated for Div. 2)题解
  18. 2018 美团校招笔试题详解
  19. R语言使用caret包的confusionMatrix函数计算混淆矩阵、基于混淆矩阵的信息手动编写函数计算accuray、准确率指标
  20. python3 练习题100例 (十六)鸡尾酒疗法

热门文章

  1. Linux给GCC编译的应用程序创建服务
  2. 条件变量 ---C++17 多线程
  3. Jupyter notebook 入门教程
  4. 通过图片 找到桌面相同图片区域坐标_【Axure RP9原型案例】京东与淘宝的商品图片是如何被放大的...
  5. 输入参数的数目不足 matlab_哈工大被禁用MATLAB,工科学生慌了,论文至上间接导致软件依赖?...
  6. linux内核多队列,Linux Kernel 中 Workqueue 使用系统默认队列和创建队列的方法
  7. 测试sql语句的执行效率
  8. beego——模板处理
  9. Java基础——类加载机制
  10. bzoj3212 pku3468 A Simple Problem with Integers