恶意代码分析实战 Lab 6-1 习题笔记

恶意代码分析实战 Lab1 Lab 1-11将Lab01-01.exe文件传上www.virustotal.com可以看到文件匹配到已有的反病毒软件特征,部分截图如下:可以看到,大部分匹配到了w32/Ramnit系列病毒特征2使用petool分别查看lab01-01.dll和lab01-01.exe的编译时间,截图如下:第一个是.exe第二个是.dll,可以看到两个文件的编译时间仅仅相差19秒.3看是否加壳最快的当然是用PE... 阅读详情

Lab 6-1

问题

1.在main函数调用的唯一子过程中发现的主要代码结构是什么?

解答: 我们照着书中的步骤走一遍

先静态分析一下

静态分析

然后我们会发现这个WININET.DLL的导入有个函数InternetGetConnectedState,然后我们查询一下MSDN的说明

这个函数

这是用于检测本地系统的连接状态的

这个函数会主要有这么几个值选项

值

有LAN方式,也有MODEM拨号方式,还有OFFLINE不在线状态,到此我们大概知道了这个函数是干什么的了

KERNEL32.DLL

我们还发现这个比较不常见的函数GetACP、GetCPinfo

GetACP

这个GetACP函数是干这个的

然后就是GetCPinfo

这个

然后还要注意的就是这个GetCommandLineA,这个是获取输入参数的,比如

./a.exe a b c

那GetCommandLineA之后就会获得./a.exe a b c这个字符串

说明这个程序有可能需要输入参数

然后我们检查一下字符串

字符串

这是我们从书中看到的那个字符串,除了这个,我们还可以看到这些有趣的字符串

字符串

这个程序有可能会弹出一个窗口(MessageBoxA)

结构

这是整个程序的大概函数执行过程

然后我们点开Flow chart

chart

会显示这个图

图

调用函数sub_401000之后,将函数的返回值存入[ebp+var_4]中,我们查看一下sub_401000的内容,看看会返回什么值

无

这段代码调用了InternetGetConnectState之后,将返回值eax也存入了[ebp+var_4],然后比较了返回值和0的大小

在MSDN中写着

返回值

Returns TRUE if there is an active modem or a LAN Internet connection, or FALSE if there is no Internet connection, or if all possible Internet connections are not currently active. For more information, see the Remarks section.

也就是如果网络是可用的,就返回TRUE也就是1,反之亦然

call    ds:InternetGetConnectedState
mov     [ebp+var_4], eax
cmp     [ebp+var_4], 0
jz      short loc_40102B

我们来看这段汇编,如果网络可用,返回了1,1>0,所以ZF标志位为0,jz不跳转

图

然后输出"Success: Internet Connection\n",这里并没有直接用printf系列的函数输出这个字符串,而是存入了buf中

然后如果相反,则jz跳转

图

则输出这个"Error 1.1: No Internet\n",逻辑上和我们分析的一样

然后这个很明显的就是if语句的一般形式

int internet_status = InternetGetConnectedState();
if(internet_status > 0)
{
    some_function("Success: Internet Connection\n");
}
else another_function("Error 1.1: No Internet\n");

这个函数大概就是这么个流程

然后还有最开始那个跳转的地方,是根据上面那个函数的返回值判断的

而这个函数的返回值是这样生成的

过程

如果成功了(也就是可以联网了),则

mov eax, 1

然后返回的也就是1了

如果不可以了,则

xor eax, eax

然后返回的就是0了

我们回到主函数

主函数

这里将函数sub_401000的返回值和0比较,我们来分析一下这个逻辑顺序

如果可以联网了,返回1,然后cmp 1. 0的话,ZF=0,jnz跳转,然后就去执行loc_401056地方的代码了,最终retn 1
反之,如果不可以联网,则最终retn 0

于是我们可以写出这个汇编的C语言的大概样子

// 下面这些一般都是基本字符处理会用到的
// 但是这个程序不一定都用得到
// 只是为了给这个函数有点C语言的样子
// 注意:这是纯C代码,不是VC++代码
// 涉及到Windows API的部分我会用伪代码来表示
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int sub_401000(void)
{
    // 下面这些是一些windows C#的代码
    // 需要在开头导入一些Windows的SDK才能使用(这里没有导)
    DWORD lpdwFlags = 0;
    DWORD dwReserved = 0;
    BOOL Online;

    Online=InternetGetConnectedState(&lpdwFlags, &dwReserved);
    if(Online = TRUE)
    {
        // sub_40105F是干什么的函数,我们下一个问题分析
        sub_40105F("Success: Internet Connection\n");
        return 1;
    }
    sub_40105F("Error 1.1: No Internet\n");
    return 0;
}

int main(void)
{
    // 因为汇编中就是var_4,然后我又懒得给他去个正常程序会用到的名字
    // 一般这个名字会是像a,b,c,n,m这样的名字
    int var_4 = -4;

    var_4 = sub_401000();
    if(var_4 > 0)
    {
        return 1;
    }
    else return 0;
}

具体sub_40105F是干什么的,我们下面分析


2.位于0x40105F的子过程是什么?

解答: 书中的分析是这样的

其中一种方法是,找到调用子例程前被压到栈上的参数,在这里的两处,都有一个格式化字符串被压栈,并且字符串结尾是\n这个换行符

然后就推断这个函数是printf,但是这未免有点牵强(我感觉)

我们来看这个函数

函数

我把它复制出来一步一步分析

先对比printf的内部实现是这样的

int __cdecl printf (
        const char *format,
        ...
        )
/*
 * stdout 'PRINT', 'F'ormatted
 */
{
        va_list arglist;
        int buffing;
        int retval;

        va_start(arglist, format);

        _ASSERTE(format != NULL);

        _lock_str2(1, stdout);

        buffing = _stbuf(stdout); // 记住这个函数_stbuf

        retval = _output(stdout,format,arglist); // 还有记住这里调用了一次外部函数

        _ftbuf(buffing, stdout); // 记住这个函数_ftbuf

        _unlock_str2(1, stdout);

        return(retval);
}

然后再来看这段汇编就会好理解多了

sub_40105F proc near

arg_0= dword ptr  4
arg_4= dword ptr  8

push    ebx ; 这个和下面这个都不用管
push    esi
mov     esi, offset stru_407098 ; 这个就很重要了
push    edi
push    esi
call    __stbuf ; __stbuf的入参是最后一个push进去的那个
                ; 也就是上面那个文件描述符
                ; 如果这个入参是stdout则就是输出到标准输出
                ; 记得上面的_stbuf函数不?
mov     edi, eax
lea     eax, [esp+10h+arg_4]
push    eax             ; int
push    [esp+14h+arg_0] ; int
push    esi             ; FILE *
call    sub_401282      ; 记得上面那个调用外部函数不?
push    esi
push    edi
mov     ebx, eax
call    __ftbuf         ; 记得上面的那个_ftbuf函数不?
add     esp, 18h
mov     eax, ebx
pop     edi
pop     esi
pop     ebx
retn
sub_40105F endp

如果你记住了上面提的那三个地方的函数,这个汇编你一看就会明白了

但是这里输入的是offset stru_407098,而不是像printf的内部实现那里的stdout,然后我们查看一下这个汇编里的文件描述符

文件描述符

然后我们可以继续看看这个文件是啥

文件

复制出来就是

FILE <0, 0, 0, 2, 1, 0, 0, 0>

然后这个代表什么意思,因为windows是闭源的操作系统,所以我Google了半天也没找到windows的文件描述符(file descriptor)的结构(structure)

只找到一个C语言学习网站里面的描述,是这样的

typedef struct 
{
 short level ;           1
 short token ;           2
 short bsize ;           3
 char fd ;               4
 unsigned flags ;        5
 unsigned char hold ;    6
 unsigned char *buffer ; 7
 unsigned char * curp ;  8
 unsigned istemp;        9
}FILE ;

这个有9个项,但是我们从IDA里面拷出来的就8个项

      1  2  3  4  5  6  7  8
FILE <0, 0, 0, 2, 1, 0, 0, 0>

这个版本不对,我们继续找,终于找到一个,stackoverflow上有人说,这个定义在stdio.h中

但是我/usr/include/stdio.h找了半天没找到这个定义,我发现这个

定义

注意看着绿色那行

typedef struct _IO_FILE FILE;

学过C语言的同学都知道,这是将struct _IO_FILE定义为FILE

对C语言不熟的同学我稍微解释一下

也就是平时可能我们定义一个FRIENDS的结构是这样的

struct FRIENDS{
    int age;
    char name[20];
};

然后要使用这个结构的话

struct FRIENDS one_friend;

但是如果我们在代码include的下面加上这句话

typedef struct FRIENDS FRIENDS;

那么现在struct FRIENDS = FRIENDS

加了这句话我们使用这个结构就是这样了

FRIEND one_friend;

所以从刚刚这个

定义

我们可以看出这个FILE的结构其实就是_IO_FILE的结构,现在我们就去找这个结构

其实这个结构就在/usr/include/libio.h里面,当然最后会发现,这是Linux的文件描述符的结构

但是这个太长了,我就不贴出来了,我们继续找windows下的

然后有人说,在MinGW里面有,MinGW是Minimalist GNU for Windows的缩写

最后

最终在这里github上的mingw代码找到了这个定义

然后跑太远,回来,对比一下我们的

FILE <0, 0, 0, 2, 1, 0, 0, 0>

根据这个来,我们的这个文件描述符的各项的对应关系就是

struct _iobuf {
    char *_ptr;      // -> 0
    int _cnt;        // -> 0
    char *_base;     // -> 0
    int _flag;       // -> 2
    int _file;       // -> 1
    int _charbuf;    // -> 0
    int _bufsiz;     // -> 0
    char *_tmpfname; // -> 0
};
typedef struct _iobuf FILE;

然后这就好理解了

这里其他的都可以用不用看,主要来看看这个_file这个

这个代表了打开的文件在系统中的编号,一般我们编程的时候打开的句柄(也就是文件描述符)编号都是比较大的,因为本身系统就已经打开了比较多的文件原因

但是一般有三个文件的文件描述符是固定写死的,还比较小,那就是stdin、stdout、stderr

在系统中对应的值就是

stdin  -> 0
stdout -> 1
stderr -> 2

然后我们搞了这么几百字,就可以搞明白这个文件描述符是干啥的了,这个文件描述符指向的是stdout,一般这个在计算机上是代表屏幕

所以根据前面的贴出来的printf函数的内部实现和对照汇编代码,我们最后发现这个文件描述符是stdout,我们基本就可以确定这个函数就printf


3.这个程序的目的是什么?

解答: 上一问发散的有点深,就光分析那一个小函数去了

这个如果你能跟着我的思路来到这里,那现在恶意程序的全部代码都已经被我们吃透了

这个就是一个检测本地能不能使用网路连接的程序,恶意代码可以用于检测本地的连接是否ok,如果ok,程序会打印那个字符串,然后返回1,如果不ok,那也是打印一个字符串,然后返回0

本文完

恶意代码分析与实践lab1 《恶意代码分析与实战》第一章的课后作业 阅读详情

相关推荐

恶意代码分析实战——利用IDA PRO分析Lab05-01.dll

恶意代码分析实战——利用IDA PRO分析Lab05-01.dll 1.实验目的 利用IDA Pro分析Lab05-01.dll中发现的恶意代码,回答以下问题: DLLMain的地址是什么? 使用Imports窗口并浏览到gethostbyname,导入函数定位到什么地址? 有多少函数调用了gethostbyname? 将精力集中在位于0x10001757处的对gethostbyname的调用,你能找出哪个DNS请求将被触发吗? IDA Pro 识别了在0x10001656处的子过程中的多少个局部变量?

妙蛙种子吃了都会妙妙秒的妙脆角的博客 5425

恶意代码分析实战——Lab06-01.exe~Lab06-04.exe动态分析

恶意代码分析实战——Lab06-01.exe~Lab06-04.exe动态分析 1.实验目的 分析Lab06-01.exe~Lab06-04.exe 2.实验环境(硬件、软件) Winxp虚拟机: 硬件:处理器Intel® Core™ i5-10210U CPU @ 1.60GHz 2.11 GHz 软件:32位操作系统 3.实验步骤 (一)Lab06-01.exe 1、由main函数调用的唯一子过程中发现的主要代码结构是什么? 先声明了一个局部变量var_4,然后调用了InternetGetConn

妙蛙种子吃了都会妙妙秒的妙脆角的博客 2268

PX4代码解析(1)

前言 做pixhawk飞控有一段时间了,但在学习过程中遇到许多困难,目前网上找不到比较完整的PX4学习笔记,我打算结合自己理解,写写自己对PX4源码的理解,不一定对,只是希望与各位大佬交流交流,同时梳理一下无人机知识。 目前打算分享以下几个内容:代码架构;通信协议;姿态解算算法,控制算法。先这样,后面想到再加。本章先来聊聊px4代码结构 一、代码整体结构 既然要聊px4代码结构,那就先把px4代码结构图放出来,因为px4源码仍然在不断更新迭代,因此老版本与新版本目录结构可能有些不同,我的代码解析参考版本为V

qq_36903625的博客 1万+

恶意代码分析实战6-1

本次实验我们将会分析lab06-01.exe,lab06-04.exe两个文件。先来看看lab06-01.exe要求解答的问题 Q1由main函数调用的唯一子过程中发现的主要代码结构是什么 Q2位于0x40105f的子过程是什么 Q3这个程度的目的是什么 尝试运行会发现程序一闪而过 载入peview分析,查看其导入表 ​ 可以看到WININET.dll,其中其中的InternetGetConnectState函数。利用Windows Internet(WinINet)API,应用程序可以使用http协议访问

Yale的博客 475

OASIS协议标准文档的解读_第一部分

OASIS标准协议的文档的解读。完整原协议的中文翻译和解读。

洋葱的专栏 4903

【谷粒商城】分布式事务与下单

=购物车== 构建gulimall-cart,复制静态资源到nginx,修改网关 购物车分为离线购物车和登录购物车 离线购物车重启浏览器了也还有 1、购物车需求 特点:读多写少,放入数据库并不合适 登录状态:登录购物车 放入数据库 mongodb 放入redis(采用) 登录以后,将离线购物车里合并后清空离线购物车 未登录状态:离线购物车 放入localstorage浏览器的技术 cookie WebSQL 放入redis(采用) 浏览器重启后还在 2、购物车VO (1) 数据结构分析

努力充实,远方可期 1万+

恶意代码分析实战 Lab6

lab06-011先静态分析一波:没加壳,看看导入函数:有检查是否有可用网络连接的函数,可能有联网行为再看看字符串:一些程序提示信息字符串再回到main函数看看程序结构,查看main的程序流程图(view--Graphs--Flow chart(快捷键F12)),可以发现结构很简单基本就两个函数调用,然后对第一个函数(InternetGetConnectedState)返回值进行判断,然后看关键p...

baidu_41108490的博客 1817

【Godot】【工程】中文字体与多语言(缺字/体积/打包:一次性配置到位)

本文介绍了Godot游戏开发中的中文字体配置与多语言支持方案。主要内容包括:1)中文字体的全局与局部设置;2)使用子集化技术减小字体体积;3)多语言资源管理及翻译系统实现;4)语言切换机制与控件刷新方法;5)字体回退策略优化显示效果;6)打包优化建议。文章提供了从字体导入到多语言实现的完整解决方案,帮助开发者系统性解决中文显示和多语言支持问题,同时优化资源体积和性能表现。配套案例可供学习参考。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 598

恶意代码分析实战06-01

本次实验我们将会分析lab19-2文件。先来看看要求解答的问题 Q1.这段shellcode被注入到什么进程中? Q2.这段shellcode位于哪里? Q3.这段shellcode是如何被编码的? Q4.这段shellcode手动导入了哪个函数? Q5.这段shellcode和什么网络主机进行通信? Q6.这段shellcode做了什么? 首先载入IDA 第一处call是调用sub_4010b0,跟入该函数 从其关键函数调用可知,这个函数为当前进程提供合适的权限,使其允许调试 返回main 接着是调

Yale的博客 310

HotSpot G1 GC 的分区记账、SATB 并发标记与停顿目标调优解析

线上GC毛刺该调停顿目标、加大新生代还是换收集器?本文从HotSpot G1的设计出发,梳理分区与巨型对象、卡表与记忆集、写屏障与细化线程、停顿预测、SATB并发标记、自适应IHOP、混合回收规则及Full GC兜底,并注明JDK8至JDK27的版本差异。文中在JDK8与JDK17上实测:停顿目标从200ms降到20ms,伊甸区缩小四成、P99下降但仍超目标;巨型对象会反复触发又撤销并发标记;JDK17并行Full GC平均停顿约为JDK8的三成。最后给出日志解读、参数清单、调优流程与选型。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 170万+

深信服全产品线新版图标库 Visio版+PPT版【2023年最新整理】

深信服全产品线新版图标库Visio版(含网络位置符号以及其他网络设备和外设图标)有朋友想要我整理一下深信服的相关图标,那么今天,瑞哥给老铁们整理了。运维漫谈是瑞哥针对运维领域的一个公众号,欢迎大家的关注哦!篇幅原因,就只展示那么多,有需要的朋友自行下载。SANGFOR 各产品图标-Visio版。你好,这里是网络技术联盟站。SANGFOR全产品线图标。深信服设备前置面板-AC。

网络技术联盟站 3697

《恶意代码分析实战》第6章 识别汇编中的C代码结构(课后实验Lab 6)

  一名网络空间安全专业学生学习本书过程中记录下所做实验,如有错误或有待改进的地方,还请大家多多指教。 第6章 识别汇编中的C代码结构(实验)Lab 6-1:在这个实验中,你将分析在文件Lab06-01.exe中发现的恶意代码1.1 由main函数调用的唯一子过程中发现的主要代码结构是什么?1.2 位于0x40105F的子过程是什么?1.3 这个程序的目的是什么?Lab 6-2:分析在文件Lab06-02.exe中发现的恶意代码。2.1 main函数调用的第一个子过程执行了什么操作?2.2 位于0x40.

qq_43443410的博客 862

微信小程序 - 完美解决“code“:“NO_AUTH“,“message“:“商户号该产品权限未开通,请前往商户平台>产品中心检查后重试“(微信小程序报错问题排查解决)

微信小程序NO_AUTH: 商户号该产品权限未开通,请前往商户平台>产品中心检查后重试?微信小程序提示商户号该产品权限未开通,请前往商户平台>产品中心检查后重试,微信小程序"code":"NO_AUTH"错误码怎么解决,报错信息如下:httpResponseBody[{"code":"NO_AUTH","message":"商户号该产品权限未开通,请前往商户平台>产品中心检查后重试"}],微信小程序支付问题,如何解决这个问题,虚拟支付商户号,虚拟支付商户号里面没有产品支付的页面,排查商户号没问题,商户号配置

🏆 前端领域优质创作者 4445

恶意代码分析实战 Lab 3-1 习题笔记

Lab 3-1问题1.找出这个恶意代码的导入函数于字符串列表。解答: (动态分析建议用winxp pro 32bit,下面你就知道为什么这么建议了)我们用Dependency Walker会发现这个程序只有很少的导入函数,第一是怀疑是不是加壳了然后我们PEiD来看,的确是加壳了然后就开始尝试脱壳了万能脱壳这次不是万能的了目前我们知道的唯一个导入函数就是ExitProcess然后查看一下字符串 前面

isinstance的博客 5993

将 SAP BTP ABAP environment 与 SAP S/4HANA Cloud 公有云版集成:从架构理念到落地实战

本文探讨了在SAP云环境中实现ABAP扩展应用与S/4HANA Cloud系统集成的技术方案。通过建立标准化的远程通信通道,开发者可在SAP BTP ABAP环境中开发扩展应用,同时安全访问S/4HANA Cloud的核心业务数据和服务。文章详细介绍了整体架构设计、开发实现步骤(包括定义通信场景、生成服务消费模型和编写调用代码)以及管理员在S/4HANA侧的配置工作(创建通信安排和技术用户)。通过一个业务伙伴自助注册平台的案例,展示了如何在不修改标准系统的情况下实现云扩展,体现了SAP"干净核心&

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 241

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

恶意代码分析实战 Lab 1-2 习题笔记

Lab 1-2问题1.将Lab01-02.exe文件上传至http://www.virustotal.com/进行分析并查看报告。文件匹配到了已有的反病毒软件特征吗?解答: 这个传就行了。2.是否有这个文件被加壳或混淆的任何迹象?如果是这样,这些迹象是什么?如果改文件被加壳,请进行脱壳,如果可能的话。解答: 因为这个我是看过一遍书才来看这些题目的,所以,可能刚开始看这本书的同学会有些不理解,没事,慢

isinstance的博客 3205

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

恶意代码分析实战 Lab 9-1 习题笔记

Lab 9-1问题1.如何让这个恶意代码安装自身?解答: 这个既然开始了动态调试的部分,我们就只用OD来进行操作了,因为这个版本的恶意代码都是针对XP的,所以我打算是把OD装到XP那台运行代码的机器上这里我们还是跟这书上的步骤走走,先摸清摸清一下套路我们先打开OllyDbg,我这个是从官网下载的,原版的1.x的东西,然后大概是这样这里稍微说一下这个OllyDbg调整字体的方式如果你用是吾爱破解版的话

isinstance的博客 2501

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

恶意代码分析实战 Lab 11-1 习题笔记

问题 1.这个恶意代码向磁盘释放了什么? 解答: 我们刚刚完成了Windows内核病毒的分析,包括了一些过时的RootKit技术的分析,现在我们回归二进制分析 这里要分析的文件是Lab11-1这个文件,我们先做一些基本的静态分析 我们先看KERNEL32.DLL这个导出DLL 我们可以看到这里有个我们需要注意的CreateFileA导出函数,还有下面那个ExitProcess函数...

isinstance的博客 2120

恶意代码分析实战 Lab 1-1 习题笔记

Lab 1-1问题1.将文件上传至http://www.virustotal.com/ 进行分析并查看报告。文件匹配到了已有的反病毒的特征吗?解答:这个上传就行了,不过就是要注意www.virustotal.com已经被墙了2.这些文件是什么编译的?解答: 根据本书结尾附录的方法是 使用PEview来打开文件。对于每个文件,我们可以浏览 IMAGE_NT_HEADERS > IMAGE_

isinstance的博客 3691

恶意代码分析实战 Lab 5-1 习题笔记

Lab 5-1问题1.DllMain的地址是什么?解答: 这个我们用IDA Pro打开来查找,因为最新的IDA Pro不支持我们运行病毒那个虚拟机的版本(xp pro 32),所以下面的分析都是在win7上的打开IDA Pro之后就会提示你是否打开一个叫proximity browser的东西,然后打开这个东西就可以看到DllMain的位置如果没有跳出来,这里可以点开这个窗口然后右键选择Text v

isinstance的博客 6793

恶意代码分析实战 Lab 10-1 习题笔记

Lab 10-1 一些准备工作 首先就是配置内核调试的环境 我这里用的是VirtualBox而不是书上的VMware 所以这里可能会有一些的不同 书上说的是这样的 与用户态调试不同,内核调试需要一些初始化配置。首先需要配置虚拟操作系统并开启内核调试,然后配置VMware使虚拟机和宿主操作系统之间有一条虚拟化的串口,同时还应该配置宿主操作系统中的WinDbg 我们按照书上的...

isinstance的博客 2435

恶意代码分析实战 Lab 1-3 习题笔记

Lab 1-3问题1.将Lab01-03.exe文件上传….(略)解答: 略2.是否有这个文件被加壳或混淆的任何迹象?如果是这样,这些迹象是什么?如果改文件被加壳,请就行脱壳,如果可能的话。解答: 这个还是要用老方法看看这里没显示C++或者C什么的,虽然结果也没显示常见的UPX壳,但是无疑这个加壳了的,壳的名称叫做FSG然后我们用Dependency Walker确认一下可以看到很少的导入函数,可以

isinstance的博客 1533

恶意代码分析实战 Lab 1-4 习题笔记

Lab 1-4问题1.将文件上传并查看报告。解答: 我们就传一次看看Basic Properties MD5 625ac05fd47adc3c63700c3b30de79ab SHA-1 9369d80106dd245938996e245340a3c6f17587fe Authentihash e4d9d8ea008b5521c4b4273b8a276cf618db3f8af0bdd2f1

isinstance的博客 2601

恶意代码分析实战 Lab 7-1 习题笔记

Lab 7-1问题1.当计算机重启之后,这个程序如何保证它继续运行(达到持久化驻留)解答: 我们还是按照书上的步骤走一遍看看先是静态分析我们会发现这里有一个CreateMuteA和CreateThread的函数,会操作一个互斥量和一个线程还有这些好玩的函数,比如SetWaitableTimer,这是由于设置一个定时的函数,可以在时间到来的时候发出一个信号来激活一个线程然后就是Sleep,这个说明这个

isinstance的博客 1996

恶意代码分析实战Lab1

Lab1-1恶意代码分析实战恶意代码样本下载Lab1-1二、使用步骤1.引入库2.读入数据总结 恶意代码分析实战 Michael Sikorski Andrew Honig 著 诸葛建伟 姜辉 张光凯 译 恶意代码样本下载 前言-先决条件-恶意代码样本下载链接: https://practicalmalwareanalysis.com/ 1.点击Labs 2.点击Download NOTE: We provide a self-extracting archive and an encrypted

weixin_47038938的博客 7461

恶意代码分析与实战lab3

它集成了 Filemon 和 Regmon 的功能,可以帮助分析和调试系统问题,追踪应用程序的行为,特别是在恶意软件分析中,它是检测和跟踪恶意软件行为的有力工具。Process Explorer 是一个高级的系统任务管理工具,能够显示详细的系统信息,包括正在运行的进程、打开的句柄和加载的 DLL。在一个安全的环境中执行Lab03-03.exe文件中发现的恶意代码,同时使用基础的动态行为分析工具监视它的行为。使用基础的动态行为分析工具来分析在Lab03-04.exe文件中发现的恶意代码。

qq_74420726的博客 1314
上一篇: 恶意代码分析实战 Lab 5-1 习题笔记
下一篇: 恶意代码分析实战 Lab 6-2 习题笔记
isinstance
博客等级 码龄11年 222粉丝 99原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值