【ARTS】01_09_左耳听风-20190107~20190113

ARTS:

  • Algrothm: leetcode算法题目
  • Review: 阅读并且点评一篇英文技术文章
  • Tip/Techni: 学习一个技术技巧
  • Share: 分享一篇有观点和思考的技术文章

Algorithm

【leetcode】657. Robot Return to Origin

https://leetcode.com/problems/robot-return-to-origin/

1)problem

There is a robot starting at position (0, 0), the origin, on a 2D plane. Given a sequence of its moves, judge if this robot ends up at (0, 0) after it completes its moves.

The move sequence is represented by a string, and the character moves[i] represents its ith move. Valid moves are R (right), L (left), U (up), and D (down). If the robot returns to the origin after it finishes all of its moves, return true. Otherwise, return false.

Note: The way that the robot is "facing" is irrelevant. "R" will always make the robot move to the right once, "L" will always make it move left, etc. Also, assume that the magnitude of the robot's movement is the same for each move.

机器人从位置(0,0)开始,在2D平面上开始。给定一系列动作,判断该机器人在完成动作后是否在(0,0)结束。

移动序列由字符串表示,字符move [i]表示其第i个移动。有效移动是R(右),L(左),U(上)和D(下)。如果机器人在完成所有移动后返回原点,则返回true。否则,返回false。

注意:机器人“面对”的方式无关紧要。“R”将始终使机器人向右移动一次,“L”将始终向左移动等。此外,假设每次移动机器人的移动幅度相同。

Example 1:

Input: "UD"
Output: true
Explanation: The robot moves up once, and then down once. All moves have the same magnitude, so it ended up at the origin where it started. Therefore, we return true.

机器人向上移动一次,然后向下移动一次。所有动作都具有相同的幅度,因此它最终位于它开始的原点。因此,我们回归真实。

Example 2:

Input: "LL"
Output: false
Explanation: The robot moves left twice. It ends up two "moves" to the left of the origin. We return false because it is not at the origin at the end of its moves.

机器人向左移动两次。它最终在原点的左边有两个“移动”。我们返回false,因为它不是在它移动结束时的原点。

2)answer

只需要两个变量记录水平方向和垂直方向是否最后处在原点即可;

3)solution

#include "pch.h"
#include <iostream>
#include <string>
using std::string;

class Solution {
public:
    bool judgeCircle(string moves) {
        int y = 0;
        int x = 0;

        for (int i = 0; i<moves.length();i++)
        {
            switch (moves.at(i))
            {
                case 'U':{ y++; } break;
                case 'D':{ y--; } break;
                case 'L':{ x--; } break;
                case 'R': {x++; } break;
            default:
                break;
            }
        }
        if (x == 0 && y == 0)
        {
            return  true;
        }
        return false;

    }
};

int main()
{
    std::cout << "Hello World!\n"; 

    Solution s;
    s.judgeCircle("UD");
}

Review

【漏洞挖掘】如何使用responder工具通过窃取NTLMv2哈希在Windows环境中实现利用

1)场景

  • 局域网内投毒方式
  • 域环境获取域控HASH

2)问题难点

局域网内如何扩展权限?

3)解决问题的方法

LLMNR(Link-Local Multicast Name Resolution,链路本地多播名称解析)协议是一种基于DNS包格式的协议。它可以将主机名解析为IPv4和IPv6的IP地址。这样用户就可以直接使用主机名访问特定的主机和服务,而不用记忆对应的IP地址。该协议被广泛使用在Windows Vista/7/8/10操作系统中。

该协议的工作机制很简单。例如,计算机A和计算机B同处一个局域网中。当计算机A请求主机B时,先以广播形式发送一个包含请求的主机名的UDP包。主机B收到该UDP包后,以单播形式发送UDP的响应包给主机A。由于整个过程中,都是以UDP方式进行,主机A根本不能确认响应主机B是否为该主机名对应的主机。这就造成欺骗的可能。

4)方法细节

如何使用responder工具通过窃取NTLMv2哈希在Windows环境中实现利用。
https://www.cnblogs.com/17bdw/p/10253721.html

5)总结

两种攻击方式:

1、捕获NTLMv2哈希并使用“Hashcat”密码破解工具破解。
2、使用Responder和Multirelay.py脚本执行重放NTLMv2哈希到“已禁用SMB签名”的计算机。如果重放成功,在目标计算机上将获得shell访问权限。

Tip

【安全开发】MFC小型工具通用界面框架CLIST控件+右键菜单功能

1)场景

由于工作需要我会写代码开发工具给客户或者同事用。代码都能实现,但写个黑乎乎的命令行工具给别人用确实显得不够专业,用别人写好的成型工具又担心有后门。
所以掌握积累几个MFC的常用控件随时调用,代码量堆起来了就是不断反复利用的过程了。未来还是会把精力用在实现实际功能上,以成为界面工程师作为目标学习很容易找不到工作。

2)问题难点

常用界面分析,只需要显示结果,保存路径,打开字典就可以做一个专有工具。

3)解决思路

MFC-CListCtrl

4)方法细节

MFC-小型工具通用界面框架

https://www.cnblogs.com/17bdw/p/10238922.html

5)总结

界面功能并不会太复杂,知道怎么得到结果,怎么插入数据和扩展就足够了。

主要功能:

CListCtrl控件使用,右键菜单功能删除单行、删除全部、增加自定义内容。

扩展性:

主要考虑在右键菜单栏增加处理函数,实现主要功能,然后得到结果返回到界面上。

Share

【业务】程序员攻略开篇

1)场景

安全工程师转安全开发

2)问题难点

怎么进阶

3)解决思路

JAVA、C++、Python,Linux

4)方法细节

极客时间-左耳听风-程序员攻略开篇
https://www.cnblogs.com/17bdw/p/10227032.html

5)总结

  • 入门篇
编程语言:Python和JavaScript
操作系统:Linux
编程工具:Visual Studio Code
  • 正式入门
JAVA
  • 修养篇
英文能力、问问题的能力、写代码的修养、安全防范意识、软件工程和上线规范、编程规范等。
  • 专业基础篇
在编程语言方面,推荐学习 C、C++ 和 Java 这三个工业级的编程语言。
理论学科方面,需要学习算法、数据结构、网络模型、计算机原理等内容。
系统知识方面会讲述 Unix/Linux、TCP/IP、C10K
上一篇:理解 OpenStack + Ceph (5):OpenStack 与 Ceph 之间的集成 [OpenStack Integration with Ceph]


下一篇:javascript面向对象系列第三篇——实现继承的3种形式