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
2019年1月16日【第三天学习】相关推荐
- 2019年3月16日山东省事业单位统考考题及解析(综合类)
一.单项选择题(1-60小题,每小题0.8分,共48分.下列每题给出的四个选项中,只有一个选项是符合题目要求的.请在答题卡上将所选项的字母涂黑.) 2019年3月16日山东省事业单位统考考题及解析 5 ...
- 极光推送 请检查参数合法性_极光大数据将于2019年8月16日公布第二季度财报
2019年7月8日,中国深圳--中国领先的移动大数据服务商极光(Aurora Mobile,纳斯达克股票代码:JG)(以下称"极光"或"公司")宣布将于2019 ...
- html函数splice,js数组的常用函数(slice()和splice())和js引用的三种方法总结—2019年1月16日...
总结: slice()和splice() slice(参数1,参数2)可以查找数组下对应的数据,参数1为起始位置,参数2为结束位置,参数2可以为负数,-1对应的是从后向前数的第一个数值.splice( ...
- 【2019年05月16日】A股最便宜的股票
查看更多A股最便宜的股票:androidinvest.com/CNValueTop/ 经典价值三因子选股: 市盈率PE.市净率PB 和 股息分红率,按照 1:1:1的权重,选择前10大最便宜的股票. ...
- 2019年无限法则服务器,无限法则1月16日更新内容一览 新地图欧罗巴海岛介绍
无限法则1月16日更新内容一览 新地图欧罗巴海岛介绍 2019-01-16 11:21:43来源:游戏下载编辑:野狐禅评论(0) <无限法则>1月16日即将进行近期最大的一次更新,第二赛季 ...
- 记录值上调10_「阴阳师」10月16日维护更新公告,海国迷踪,迷影重重
重要更新 1.活动-海国迷踪 ※晴明一行人自日轮之城归来后,发觉黑夜山.七角山.逢魔之原三地出现异样,便立刻派出童女.白狼.童男分别前往附近地区进行探查,海国大军的密谋逐渐浮出水面...... ※活动 ...
- 【目标一】2019年9月15日 - 2019年9月22日晚 --- 周计划
2019年9月15日 - 2019年9月22日晚 --- 周计划 工作日作息时间 周末或者节假日作息时间(如果没有活动 或者 不用加班的话) 心若向暖,何处不阳光:心若向阳,便何处不花开 \^_\^ ...
- 魂武者服务器维护,《魂武者》8月16日停机更新公告
亲爱的魂武者: 为了优化游戏体验及修复相关BUG,我们计划2019年8月16日5:00~9:00对<魂武者>服务器进行一次停机更新. 同时涉及到合服的服务器将于2019年8月16日5:00 ...
- 2018年11月26日到2019年4月26日工作汇总
2018年11月26日到2019年4月26日工作汇总 2018年11月26日-2017年11月30日 上午:各种协议的填写,已经有关表单的培训 下午:对公司目前做的项目的培训,以及明确我当前的工作 部 ...
最新文章
- python string.format()_Python string.format()百分比,不取整
- 入坑推荐系统,拿这个开源项目练手
- 训练日志 2019.4.17
- codeigniter + Ajax (亲测)
- [zz]如何使用effect
- 消费金融盈利分析及风控能力建设
- 数据结构c语言描述第课后答案李学刚,数据结构(C语言描述)(第2版)
- 适配器模式之迭代器模式
- 想将有色彩的视频进行去色处理就这样做
- 【Codecs系列】HEVC标准(九):环路滤波技术之SAO
- shell脚本 文件拷贝
- 永远不要把自己置于一种不得不失去颜面而后退,同时不得不冒险而前进的境地。
- 希尔伯特几何基础序言
- 微信怎么关闭微信朋友圈及点赞提醒通知?
- Causality Inspired Representation Learning for Domain Generalization 阅读笔记
- 电视剧旗舰剧情分集大结局
- Educational Codeforces Round 140 (Rated for Div. 2)题解
- 2018 美团校招笔试题详解
- R语言使用caret包的confusionMatrix函数计算混淆矩阵、基于混淆矩阵的信息手动编写函数计算accuray、准确率指标
- python3 练习题100例 (十六)鸡尾酒疗法
热门文章
- Linux给GCC编译的应用程序创建服务
- 条件变量 ---C++17 多线程
- Jupyter notebook 入门教程
- 通过图片 找到桌面相同图片区域坐标_【Axure RP9原型案例】京东与淘宝的商品图片是如何被放大的...
- 输入参数的数目不足 matlab_哈工大被禁用MATLAB,工科学生慌了,论文至上间接导致软件依赖?...
- linux内核多队列,Linux Kernel 中 Workqueue 使用系统默认队列和创建队列的方法
- 测试sql语句的执行效率
- beego——模板处理
- Java基础——类加载机制
- bzoj3212 pku3468 A Simple Problem with Integers