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. 20135234mqy-——信息安全系统设计基础第十四周学习总结

    第九章 虚拟存储器 主要作用: 将主存看作是一个存储在磁盘上的地址空间的高速缓存,在主存中只保护活动的区域,并根据需要在磁盘和主存之间来回传送数据: 为每个进程提供了一致的地址空间,从而简化了存储器管 ...

  2. Linux内核分析——第二周学习笔记20135308

    第二周 操作系统是如何工作的 第一节 函数调用堆栈 存储程序计算机:是所有计算机基础的框架 堆栈:计算机中基础的部分,在计算机只有机器语言.汇编语言时,就有了堆栈.堆栈机制是高级语言可以运行的基础. ...

  3. C#获取每月最后一天或者最末一天的方法

    /// <summary> /// 取得某月的第一天 /// </summary> /// <param name="datetime">要取得 ...

  4. Alpha冲刺——day8

    Alpha冲刺--day8 作业链接 Alpha冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602634 ...

  5. Linux命令(四)删除文件 rm

    用户可以使用 rm 命令删除不需要的文件. rm 可以删除文件或目录,并且支持通配符. 如果目录中存在其它文件则会递归删除. 删除软链接只是删除链接,对应的文件或目录不会被删除. 软链接类似于 win ...

  6. [转]MySQL 数据库事务隔离级别

    然后说说修改事务隔离级别的方法: 1. 全局修改,修改 mysql.ini 配置文件,在最后加上 1 #可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATAB ...

  7. Java多线程1:进程和线程的区别

    之前看了2天的多线程,就不看了.现在继续拾起来吧.最近有点松散,多线程内容都是看毕向东的视频以及网络教程和各种书籍 什么是进程? 通俗一点讲,就是正在进行的程序,进程是操作系统控制的基本运行单元: 如 ...

  8. 使用Java语言递归删除目录下面产生的临时文件

    背景:项目copy的过程中,在项目的目录文件夹下面都产生了一个固定的文件,很是讨厌.手动删除的话比较费力,所以写了一个简单的Java程序去删除: public static void main(Str ...

  9. Redis 通信协议简单研究

    1.Redis网络通信协议 Redis底层网络通信协议其实是通过TCP来完成的. 2.Redis通信协议 Redis的通信协议首先是以行来划分,每行以\r\n行结束.每一行都有一个消息头,消息头共分为 ...

  10. 微信小程序初窥-环境搭建

    关于微信小程序的背景知识,在此不做阐述,可以自行搜索了解.本文将介绍微信小程序的账号的注册,IDE的下载,创建一个实例小程序. 1.注册小程序 前去链接:https://mp.weixin.qq.co ...