ARTS:

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

Algorithm

【leetcode】557. Reverse Words in a String III

https://leetcode.com/problems/reverse-words-in-a-string-iii/

1)problem

Given a string, you need to reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.

Example 1:

Input: "Let's take LeetCode contest"
Output: "s'teL ekat edoCteeL tsetnoc"

Note: In the string, each word is separated by single space and there will not be any extra space in the string.

2)answer

判断是否为空格,然后每个单词转换。有一个很好用的交换函数swap。

3)solution

class Solution {
public:
    string reverseWords(string s) {
        int begin = 0;
        int end = 0;
        for (int i = 0; i <= s.length(); ++i) {
            //如果遇到了空格,就准备颠倒每个字符串的值
            if (s[i] == ' ' || s[i] == '\0') {
                end = i;
                // 转换每个单词的值,end是单词的结尾长度,j是单词开始长度。
                for (int j = begin; j < end; ++j) {
                    std::swap(s[j], s[--end]);
                }
                begin = i + 1;
            }
        }
        return s;
    }
};

Review

【恶意代码】The Road To Reverse Engineering Malware

1)场景

逆向工程恶意软件之路

2)问题难点

恶意软件逆向工程资源分散在互联网,互联网很容易找到教程,课程和书籍,但正确构建这些资源,这是完全不同的事情。

3)解决问题的方法

  • 恶意软件分析书籍

  • 在线资源:课程,视频,研讨会和博客

  • 基础班

  • 实践的工具和资源

  • 查找恶意软件样本和CTF挑战

4)方法细节

  • 恶意软件分析书籍
- Practical Malware Analysis
https://www.amazon.co.uk/Practical-Malware-Analysis-Hands-Dissecting/dp/1593272901/ref=sr_1_1?s=books&ie=UTF8&qid=1514541782&sr=1-1&keywords=malware+analysis

- Malware Analyst's Cookbook and DVD: Tools and Techniques for Fighting Malicious Code Paperback – 27 Oct 2010

https://www.amazon.co.uk/Malware-Analysts-Cookbook-DVD-Techniques/dp/0470613033/ref=sr_1_3?s=books&ie=UTF8&qid=1514541782&sr=1-3&keywords=malware+analysis

- Windows Malware Analysis Essentials: Master the fundamentals of malware analysis for the Windows platform and enhance your anti-malware skill set Paperback – 1 Sep 2015

https://www.amazon.co.uk/Windows-Malware-Analysis-Essentials-Victor/dp/1785281518/ref=sr_1_8?s=books&ie=UTF8&qid=1514541782&sr=1-8&keywords=malware+analysis
  • 在线资源:课程,视频,研讨会和博客
- opensecuritytraining
http://opensecuritytraining.info/Welcome.html
  • 基础班
x86简介 -  http://opensecuritytraining.info/IntroX86.html
x86-6简介 -  http://opensecuritytraining.info/IntroX86-64.html
二进制生活 -  http://opensecuritytraining.info/LifeOfBinaries.html
恶意软件动态分析 -  http://opensecuritytraining.info/MalwareDynamicAnalysis.html
软件漏洞简介 -  http://opensecuritytraining.info/Exploits1.html
中级英特尔x86:架构,装配,应用程序和头韵 -  http://opensecuritytraining.info/IntermediateX86.html
逆向工程软件简介:http://opensecuritytraining.info/IntroductionToReverseEngineering.html
逆向工程恶意软件 -  http://opensecuritytraining.info/ReverseEngineeringMalware.html
Rootkit:它们是什么,以及如何找到它们 -  http://opensecuritytraining.info/Rootkits.html
击键历险记:深入了解Windows上的键盘记录程序 -  http://opensecuritytraining.info/Keylogging.html

恶意软件独角兽研讨会RE101和RE102 : . 从0到逆向工程加密算法常见的恶意软件样本使用。第一个研讨会提供了一个良好的工作流程,它在任何恶意软件分析任务中都很有用。RE102是一本很好的教程和分步指南,用于剖析恶意软件并介绍恶意软件编写者使用的一些最常见的“反”技术

https://securedorg.github.io/RE101/
https://securedorg.github.io/RE102/

- https://github.com/RPISEC/Malware:由RPISEC开发的材料。它包括讲座,实验室和项目。作为一本教科书,它引用了“实用恶意软件分析”,它还包含了一系列可以继续获取更多样本或挑战的地方。
  • 实践的工具和资源
- 工具

REMnux -  https://remnux.org/:REMnux是一个Linux发行版,它预先打包了一堆非常有用的工具.
         收费内容:https://medium.com/@pramos/why-you-need-you-a-malware-analysis-lab-and-how-to-build-it-10048eaa8e9
  • 查找恶意软件样本和CTF挑战
- 动物园(https://github.com/ytisf/theZoo):这个Github仓库包含一个LIVE恶意软件样本的精选列表,其中一些包括源代码。为分析师提供一个有关于RE恶意软件学习示例的地方。
- Flare-On挑战:FireEye每年都会组织一场类似于CTF的比赛,包括JavaScript,Windows,Linux和Android二进制文件。https://www.fireeye.com/blog/threat-research/2017/10/2017-flare-on-challenge-solutions.html

5)总结

  • 恶意软件分析书籍
  • 在线资源:课程,视频,研讨会和博客
  • 基础班
  • 实践的工具和资源
  • 查找恶意软件样本和CTF挑战

Tip

【安全开发】MFC界面开发-恶意代码上机文件排查

1)场景

文件特征排查

2)问题难点

遍历目录方法

3)解决思路

1、WIN32_FIND_DATA、FindFirstFile()/FindNextFile()/FindClose()

2、finddata_t fd、_findfirst()/_findnext()/_findclose

4)方法细节

1、Windows 文件夹遍历-WIN32_FIND_DATA结构

https://docs.microsoft.com/zh-cn/windows/desktop/api/minwinbase/ns-minwinbase-_win32_find_dataa

  • WIN32_FIND_DATA结构
typedef struct _WIN32_FIND_DATAA {
    // 一个文件(或路径)的文件属性。
    DWORD dwFileAttributes;
    // 指定一个文件或目录的创建时间。如果文件系统不支持创建时间,此成员为0。
    FILETIME ftCreationTime;
    // 对于文件,指定文件最后被读取、写入,或(对于可执行文件)被运行的时间。对于目录,指定目录的创建时间。如果文件系统不支持最后一次写入时间,此成员为0。
    FILETIME ftLastAccessTime;
    // 指定文件最后被写入、截短或重写的时间(例如调用WriteFile()或SetEndOfFile()时)。日期和时间在文件属性或描述符被改变时不会被更新。
    FILETIME ftLastWriteTime;
    // 文件大小(以字节为单位)的高DWORD。除非文件大小大于MAXDWORD,否则值为0。文件大小等于(nFileSizeHigh * (MAXDWORD + 1)) + nFileSizeLow。
    DWORD nFileSizeHigh;
    // 文件大小(以字节为单位)的低DWORD。
    DWORD nFileSizeLow;
    // 如果dwFileAttributes成员含有FILE_ATTRIBUTE_REPARSE_POINT属性,这个成员指定重新分析点标签(reparse point tag)。否则这个值是未定义的。
    DWORD dwReserved0;
    // 保留给将来使用。
    DWORD dwReserved1;
    // CHAR/WCHAR数组,大小为MAX_PATH。文件名。
    _Field_z_ CHAR   cFileName[ MAX_PATH ];
    // CHAR/WCHAR数组,大小为14。文件的别名。名称的格式为8.3文件名格式。
    _Field_z_ CHAR   cAlternateFileName[ 14 ];
#ifdef _MAC
    DWORD dwFileType;
    DWORD dwCreatorType;
    WORD  wFinderFlags;
#endif
} WIN32_FIND_DATAA;
  • FindFirstFile()/FindNextFile()/FindClose()函数

要查找文件,需要使用FindFirstFile()、FindNextFile()和FindClose()函数。

FindFirstFile() //搜索第一个文件,创建并返回搜索句柄。

HANDLE WINAPI FindFirstFile(
    _In_ LPCTSTR        lpFileName, // 路径或文件名
    _Out_ LPWIN32_FIND_DATA    lpFindFileData //用于接收找到的文件/目录的信息。
);

FindNextFile() //搜索下一个文件。

BOOL WINAPI FindNextFile(
    _In_ HANDLE        hFindFile,  //搜索句柄
    _Out_ LPWIN32_FIND_DATA    lpFindFileData //WIN32_FIND_DATA指针。用于接收找到的文件/目录的信息。
);

FindClose() //释放搜索句柄。

BOOL WINAPI FindClose(
    _Inout_ HANDLE hFindFile //搜索句柄。
);
  • 通配符(wildcards)

*和?字符被用作通配符。

指定全部具有某个扩展名的文件 , 如 *.txt
指定全部具有某个名称的文件/目录,如 readme.*
指定具有一定长度的扩展名的文件,如 index.????
指定具有一定长度的文件名的文件,如 ???????.txt
  • 当前目录和上一级目录

调用FindFirstFile()时,使用"."表示当前目录,使用".."表示上一级目录。FindFirstFile()和FindNextFile()所返回的文件/目录名也可能是"."或"..",可以忽略。

遍历某个目录代码

只遍历单个目录

#include "pch.h"
#include <iostream>
#include <cstring>
#include <windows.h>

void listFiles(const char * dir);

int n = 0;
int main()
{
    using namespace std;
    char dir[100];
    cout << "Enter a directory (ends with \'\\\'): ";
    cin.getline(dir, 100);
    strcat(dir, "*.*");    // 需要在目录后面加上*.*表示所有文件/目录
    listFiles(dir);
    cout << n << endl;
    return 0;
}

void listFiles(const char * dir)
{
    using namespace std;
    HANDLE hFind;
    WIN32_FIND_DATA findData;
    LARGE_INTEGER size;
    hFind = FindFirstFile(dir, &findData);
    if (hFind == INVALID_HANDLE_VALUE)
    {
        cout << "Failed to find first file!\n";
        return;
    }
    do
    {
        // 忽略"."和".."两个结果
        if (strcmp(findData.cFileName, ".") == 0 || strcmp(findData.cFileName, "..") == 0){
            continue;}
        if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)    // 是否是目录
        {
            cout << findData.cFileName << "\t<dir>\n";
        }
        else
        {
            size.LowPart = findData.nFileSizeLow;
            size.HighPart = findData.nFileSizeHigh;
            cout << findData.cFileName << "\t" << size.QuadPart << " bytes\n";
            n = n + 1;
        }
    } while (FindNextFile(hFind, &findData));
    cout << "Done!\n";
}
遍历某个目录里的所有文件
void listFiles(const char * dir)
{
    using namespace std;

    HANDLE hFind;
    WIN32_FIND_DATA findData;
    LARGE_INTEGER size;
    char dirNew[100];

    // 向目录加通配符,用于搜索第一个文件
    strcpy(dirNew, dir);
    strcat(dirNew, "\\*.*");

    hFind = FindFirstFile(dirNew, &findData);
    do
    {
        // 是否是文件夹,并且名称不为"."或".."
        if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY != 0
        && strcmp(findData.cFileName, ".") != 0
        && strcmp(findData.cFileName, "..") != 0
        )
        {
            // 将dirNew设置为搜索到的目录,并进行下一轮搜索
            strcpy(dirNew, dir);
            strcat(dirNew, "\\");
            strcat(dirNew, findData.cFileName);
            listFiles(dirNew);
        }
        else
        {
            size.LowPart = findData.nFileSizeLow;
            size.HighPart = findData.nFileSizeHigh;
            cout << findData.cFileName << "\t" << size.QuadPart << " bytes\n";
        }
    } while (FindNextFile(hFind, &findData));

    FindClose(hFind);
}
5)总结

遍历文件夹的两种方法:

第一种:WIN32_FIND_DATA、FindFirstFile()/FindNextFile()/FindClose()
第二种: _finddata_t fd、_findfirst、_findnext、_findclose

Share

【业务】极客时间-左耳听风-开篇词2

1)场景

- 程序错误处理排查
- 机器学习基础
- 时间管理

2)问题难点

程序中的错误处理的几种方法是什么?
机器学习的大体方法?
时间管理的认知?

3)解决思路

  • 程序中的错误处理

从传统解决思路和异常捕捉方式进行对比,分场景进行调试、判断。区分不同语言的处理方式。

根据错误返回码和异常捕捉
- 传统的错误检查查询错误码
- 多返回值
- 异常捕捉处理
- 内存资源清理
  • 机器学习

从机器学习的常见方式,科研领域学者出版的经典书籍、文章学习

  • 时间管理

投资自己的时间、规划自己的时间、用好自己的时间。

4)方法细节

【技术思路】极客时间-左耳听风-开篇词2
https://www.cnblogs.com/17bdw/p/10211002.html

5)总结

程序中的错误处理:错误返回码和异常捕捉

错误码:每个API返回一个状态码
多返回值:返回一个结果值、错误值
资源清理:C free、C++ RAII、Go defer
异常捕捉:try\catch\finally 

机器学习

监督式学习:提供一组学习样本以及相关标签,需要样本数据和历史数据。
非监督式学习:数据是没有被标注过的,所以相关的机器学习算法需要找到这些数据中的共性。
相关算法:
- 监督式学习
 1、决策树
 2、朴素贝叶斯分类
 3、最小二乘法
 4、逻辑回归
 5、支持向量机
 6、集成方法
- 非监督式学习
 1、聚类算法
 2、主成分分析
 3、奇异值分解

时间管理

- 主动管理:主动管理的不是你的时间,而是管理你的同事,管理你的信息
- 学会说“不”:给出另一个你可以做到的方案,而不是把对方的方案直接回绝掉、我不说我不能完全满足你,但我说我可以部分满足你
- 加班和开会:开会,不是讨论问题,而是讨论方案,开会不是要有议题,而是要有议案。

投资时间

- 花时间学习基础知识,花时间读文档:系统地学习一门技术是非常关键的,所以这个时间是值得投资的。
- 花时间在解放自己生产力的事上:花时间在解放自己的事上是最有意义的了
- 花时间在让自己成长的事上
- 花时间在建立高效的环境上

规划自己的时间

- 定义好优先级
- 最短作业优先
- 想清楚再做
- 关注长期利益规划

用好自己的时间

形成习惯
形成正反馈
反思和举一反三

【ARTS】01_08_左耳听风-20181231~20190106的更多相关文章

  1. 【ARTS】01_21_左耳听风-201900401~201900407

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

  2. 【ARTS】01_20_左耳听风-20190325~20190331

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

  3. 【ARTS】01_19_左耳听风-20190318~20190324

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

  4. 【ARTS】01_18_左耳听风-20190311~20190317

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

  5. 【ARTS】01_17_左耳听风-20190304~20190310

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

  6. 【ARTS】01_16_左耳听风-20190225~20190303

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

  7. 【ARTS】01_14_左耳听风-20190211~20190217

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

  8. 【ARTS】01_10_左耳听风-20190114~20190120

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

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

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

随机推荐

  1. Java单元测试框架 JUnit

    Java单元测试框架 JUnit JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于KentBeck的sUnit的xUnit家族中为最成功的一 ...

  2. Beta阶段冲刺-4

    一. 每日会议 1. 照片 2. 昨日完成工作 3. 今日完成工作 4. 工作中遇到的困难 杨晨露:热......算不算困难......? 戴志斌:找了好几种框架,改了不少 游舒婷:不能相信开发工具自 ...

  3. 『编程题全队』Alpha 阶段冲刺博客Day8

    1.每日站立式会议 1.会议照片 2.昨天已完成的工作统计 孙志威: 1.修复了看板任务框拖拽时候位置不够精确的问题 2.向个人界面下添加了工具栏 3.个人界面下添加了任务框测试 孙慧君: 1.个人任 ...

  4. Linux命令(二十五) 磁盘管理命令(三) fdisk

    一.fdisk命令介绍 fdisk 为Linux系统下的分区管理工具,类型windows下的 分区助手等工具软件.分过区装过操作系统的人都知道硬盘分区是必要和重要的.fdisk 的帮助如下所示: [r ...

  5. Android Tab类型主界面 Fragment+TabPageIndicator+ViewPager

    文章地址: Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager 1.使用ViewPager + PagerAdapter 每个页面的内容都 ...

  6. IE userData

    前面的话 IE浏览器实现了它专属的客户端存储机制——“userData”.userData可以实现一定量的字符串数据存储,可以将其用做是Web存储的替代方案.本文将详细介绍IE userData 概述 ...

  7. vue中的minix

    minix 是个什么东西, 就是混合,把你混合给我 浅显表述就是 你说 : ‘我叫李四’, 我说 : ‘我叫张三’, 然后把你 混合给我, 就成了 我说 : ‘我叫张三我叫李四’, 所有解说都在例子里 ...

  8. 【POJ3171】Cleaning Shifts 带权区间最小覆盖

    题目大意:给定一个长度为 N 的序列,求带权区间最小覆盖. 题解:设 \(dp[i]\) 表示从左端点到 i 的最小权值是多少,则状态转移为:\(dp[e[i].ed]=min\{dp[j],j\in ...

  9. 《剑指offer》— JavaScript(33)丑数

    丑数 题目描述 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 思 ...

  10. ubuntu系统问题解决集

    1.解决ubuntu 14 system setttings失效的问题 sudo apt-get install unity-control-center 2. 支持root用户登录 修改以下配置文件 ...