QQ 1274510382
Wechat JNZ_aming
商业联盟 QQ群538250800
技术搞事 QQ群599020441
解决方案 QQ群152889761
加入我们 QQ群649347320
共享学习 QQ群674240731
纪年科技aming
网络安全 ,深度学习,嵌入式,机器强化,生物智能,生命科学。

叮叮叮:产品已上线 —>关注 官方-微信公众号——济南纪年信息科技有限公司
民生项目:商城加盟/娱乐交友/创业商圈/外包兼职开发-项目发布/
安全项目:态势感知防御系统/内网巡查系统
云服项目:动态扩容云主机/域名/弹性存储-数据库-云盘/API-AIeverthing
产品咨询/服务售后(同)

纸上得来终觉浅,绝知此事要躬行 !!!
寻找志同道合伙伴创业中。。。抱团滴滴aming联系方式!!


学习恶意代码对抗反汇编的技术。
学习识别恶意代码采用的反汇编技术,并针对性地进行破解;
在此过程中我们会使用idc脚本辅助我们的分析;

如何分析出程序的网络特征(user-agent,url等)。




恶意代码分析实战
本科/专科信息安全专业

计算机网络、操作系统




1.IDA Pro
IDA Pro是一款交互式的,可编程的,可扩展的,多处理器的,
交叉Windows或Linux WinCE MacOS平台主机来分析程序,
被公认为最好的花钱可以买到的逆向工程利器。
IDA Pro已经成为事实上的分析敌意代码的标准并让其自身迅速成为攻击研究领域的重要工具。
它支持数十种CPU指令集其中
包括Intelx86,x64,MIPS,PowerPC,ARM,Z80,68000,c8051等等。



服务器:Windows 7

辅助工具:IDA Pro


将会分析 exe文件。先来看看要求解答的问题

Q1.程序初始化请求的URL是什么?

Q2. User-Agent 域是如何产生的?

Q3.初始化请求时,程序在内存页中查找什么?

Q4.程序如何处理它从页中提取的信息?


首先IDA载入分析,从头到尾稍微看下main
在0040115a遇到了第一个对抗反汇编技术

因为esp值是非0的,所以test指令返回结果一定是非零值

那么下面的jnz指令的跳转是永远成立的

其跳转的目的是40015e+1

也就是jmp指令中间的位置,这是有问题的,
而且IDA将跳转的位置标记为红色,也能说明这里是不正常的

将光标定位40115e,按d键,将这个指令变为数据

然后光标定位到40115f,按c键转为代码

这样就正常了。

继续往下,在4011d0看到了对抗反汇编的技术

这里通过xor给eax赋0,下面的jz指令跳转是永远成立的

jz的目的第4011d4处的call目的地址同样是红色的,说明也是不正常的

光标定位到4011d4,按d键转数据

然后定位到4011d5,按c键转代码

之后都是同样的处理,结果如下

继续往下,在401215处也存在对抗反汇编的技术

可以option->general如下设置,用于显示出机器码

如下所示

这是一个双字节的jmp指令。跳转目标是它的第二个字节

按d键转为数据

光标定位到00401216,按c键转为代码

继续往下,在401269处存在对抗反汇编技术

这里的jz和jnz指令都是跳转到同一个地址,说明命中目标代码不取决于零标志位的置位与否

将光标定位到跳转的目标,也就是0040126d,按d键转为数据

光标定位0040126e,按c键,转为代码

继续往下,在4012e6位置存在对抗反汇编技术

这里的jz跳转的目的地是4012e8,是向上跳转,跳到mov指令中间的位置。
这不是正常的跳转,而且和我们之前看到的向下跳转也是不同的

光标定位到4012ee,按d键转为数据

定位到4012ef,按c键转为代码

定位到4012e6,按d键转为数据

定位到4012e8按c键转为代码

至此,main函数中所有对抗反汇编的地方都被我们调整回来了。

不过可以看到,还存在一些多余的db字节,

我们需要将其转换为nop指令(0x90),这样才能构造出一个函数

替换nop,使用脚本就可以自动化进行

脚本内容如下

 #include<idc.idc>
static main()
{auto ea = ScreenEA();PatchByte(ea,0x90);
}

注意文件后缀名为idc

来测试一下,定位到0040115e,这里有多余的db字节

然后file->script file

选中test.idc,点击打开即可

此时已经被修改为90h了

其他地方也是同样如此






这样就全部修改完毕了,接着选中全部main函数

从00401000到0040130e

然后按p键,再按空格键,就可以图形化地查看生成的函数


在InternetOpenUrlA前调用了sub_401386,跟入

可以看到是在将字符拷贝到栈空间里

可以将这些16进制通过按r键进行转换为字符

可以看到往栈上拷贝的字符组成的字符串其实是一个网址

http://practicalmalwareanalysis.com/bamboo.html

Q1.程序初始化请求的URL是什么?

A1.程序第一个请求的URL是http://www.practicalmalwareanalysis.com/bamboo.html。




返回上层函数

我们就知道了InternetOpenUrlA就是尝试访问这个网站

为了知道user-agent,我们来分析InternetOpenA

其第一个参数lpszAgent其实就是user-agent

其值edx来自name,往上回溯

可以看到是gethostname的返回值保存在name中。

所以我们可以认为user-agent的字符串就是主机名

我们f5查看伪码继续分析

将case里的数字转为字符,更直观一点

可以看到是一个for循环。
for循环的作用就是将name字符串中的每个字符进行修改:
如果是Z则修改为A,如果是z则修改为a,
如果是9则修改为0,如果不是这三种情况,
则自增,检查下一个

Q2. User-Agent 域是如何产生的?

A2. User-Agent 字符串由hostname中
每个字母和数字加1组成(Z和9对应的是A和0)。




程序使用InternetOpen初始化,然后使用InternetOpenUrlA打开一个网址

然后是InternetReadFile将数据下载到一个本地缓冲区

缓冲区包含的数据是第二个参数,上图中已经被IDA标记为Buffer

在004011DA又出现了Buffer

上图中调用了strstr查找一个大字符串中的子串,

这里就是在缓冲区Buffer中查找字符串Bamboo::,
Buffer里包含从原始的url中提取的所有数据。

如果查找成功,则eax会保存该子串在Buffer里首次出现的位置,
通过mov指令赋给了Str

Q3.初始化请求时,程序在内存页中查找什么?

A3.程序在它请求的网页中查找字符串Bamboo::。

上图又是调用了strstr,用来搜索::,如果找到了,

则将地址保存在eax里,而00401212又将0赋给了eax

其实也就是说将::的第一个:赋0,或者说赋NULL,
用于终止Bamboo::和::之间的字符串

0040123e,ecx+8,其实就是Str+8,而Bambo:长度就是8,

那么这里的作用就是让指针跳过Bambo:,指向后面的内容

之后是调用InternetOpenUrlA,其第二个参数就是要打开的url

所以我们就知道了,Bamboo::和尾部冒号之间的数据的目的,
就是程序要下载的一个网址

调用InternetReadFile将文件保存在文件里

文件名称保存在ecx,而ecx来自于Filename,往上回溯

Filename来自eax,而eax是sub_40130f的返回值

跟入该函数

同样有拷贝字符的操作,按r键转换

这里合在一起就是AccountSummary.xls.exe

这就是文件名称,我们通过InterReadFile下载的文件就是保存在这里

回到上层函数,继续往下分析

调用ShellExecute函数启动文件

之后程序就退出了。

Q4.程序如何处理它从页中提取的信息?

A4. 除了搜索字符串Bamboo外,
程序还查找一个额外的::,它被转换为一个NULL结束符。
Bamboo与结束符之间的字符串被下载到一个名为AccountSummary.xls.exe的文件中,
下载完后, 程序运行它



配套学习资源
1.《恶意代码分析实战》

恶意代码分析实战——高级反汇编相关推荐

  1. 恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)

    本文章为<恶意代码分析实战>的题目答案解析以及个人的一些理解,将通过一下问题对恶意代码Lab05-01.dll进行分析: D1lMain的地址是什么? 使用Imports窗口并浏览到get ...

  2. MS08067 第一期 “恶意代码分析”实战班 正式开班~

    文章来源|MS08067安全实验室 恶意代码分析实战班 恶意代码分析的分类: 恶意代码分析也可作为单独的安全专业类别来看待,不过总体是偏逆向方向的,希望的受众是逆向相关的就行了,比如以前只会逆向但是不 ...

  3. 学习笔记-第十四章 恶意代码分析实战

    第十四章 恶意代码的网络特征 1.网络应对措施. 网络行为的基本属性包括IP地址,TCP端口,以及流量内容等,网络和安全 设备可以利用它们,来提供网络应对措施.根据IP地址和端口,防火墙和路由器可以限 ...

  4. 恶意代码分析实战Lab1

    第一章静态分析基础技术 恶意代码分析实战 恶意代码样本下载 1.1反病毒引擎扫描 1.2哈希值 1.3查找字符串 1.4加壳与混淆恶意代码 1.5PE文件格式 1.6链接库与函数 1.7静态分析技术实 ...

  5. 恶意代码分析实战Lab03-01

    注:分析恶意代码一定要在安全的环境下,如与主机和外网隔离的虚拟机=>网络适配器选择主机模式或模拟一个与主机和外网隔离的虚拟网络:以及给拍个干净快照: 平台:博客园 恶意代码分析:虚拟网络环境配置 ...

  6. 学习笔记-第九章 恶意代码分析实战

    第九章 OllyDbg 1.加载恶意代码直接加载可执行文件,甚至dll程序.如果恶意代码已经在你的系统上运行,你可以通过附加进程的方式调试它.另外,ollydbg是一个灵活的调试系统,可以使用命令行选 ...

  7. 恶意代码分析实战 11 恶意代码的网络特征

    11.1 Lab14-01 问题 恶意代码使用了哪些网络库?它们的优势是什么? 使用WireShark进行动态分析. 使用另外的机器进行分析对比可知,User-Agent不是硬编码. 请求的URL值得 ...

  8. 恶意代码分析实战Lab3-2

    Lab3-2 使用动态分析基础技术来分析在Lab03-02.dll文件中发现的恶意代码. 目录 Lab3-2 1.你怎样才能让这个恶意代码自行安装? 2.安装之后如何让恶意代码运行起来? 3.怎么可以 ...

  9. 恶意代码分析实战 9 隐蔽的恶意代码启动

    9.1 Lab12-1 分析 查看程序的导入函数. 通过这几个函数,可以推断出是远程线程注入. 使用ProMon检测,并没有看到什么有用的信息. 使用Proexproer检查. 也没有什么有用的信息. ...

  10. 学习笔记-第十二章 恶意代码分析实战

    第12章 隐蔽的恶意代码启动 1.启动器启动器是一种设置自身或其他恶意代码片段以达到即使或将来秘密运行的恶意代码.启动器的目的是安装一些东西,以使恶意行为对用户隐蔽.启动器经常包含它要加载的恶意代码. ...

最新文章

  1. 2020 年微服务项目活跃度报告
  2. java中io.nio.aio_Java中网络IO的实现方式-BIO、NIO、AIO
  3. python绘制动态心形_python绘制动态爱心
  4. 数据太大导致oracle数据库连接关闭,ORACLE异常关闭后导致数据库报错无法连接问题解决办法-Oracle...
  5. 机器视觉专用照明光源
  6. oracle 常用语句汇总
  7. 使用存储过程创建datawindow
  8. SIR传染病模型及matlab代码
  9. 即使是昏暗的街道,也有每日照耀的月
  10. MATLAB梯度和拉普拉斯算子在图像边缘检测中的应用
  11. Vue项目之上传图片
  12. 大数据时代之java操作hdsf
  13. 工业控制计算机固态硬盘,工业控制电脑ssd固态硬盘怎么正确使用?
  14. 餐馆会员管理系统 - MySQL数据库课程设计
  15. Spring Boot Actuator 端点监控
  16. Matlab中interp2和interpn的差异
  17. iPhone XS系列降价一千元;Intel雷电接口将融合USB4;蔚来汽车收入、亏损均增长百分百 | 雷锋早报... 1
  18. 准确性 敏感性 特异性_特异性图
  19. 什么是企业微信scrm系统?企业微信SCRM系统有什么功能?企业微信SCRM系统推荐。
  20. 决策树原理和案例应用-泰坦尼克号生存预测

热门文章

  1. 因机构系统维护服务暂不可用_因合作方系统维护,暂时无法使用是什么意思?...
  2. Mac显示桌面的快捷方式
  3. 一周热图|何穗俞飞鸿张翰南京出席活动;华为全球最大旗舰店开业;巴黎欧莱雅公布凯瑟琳·兰福德为全球代言人...
  4. WIN10桌面文件夹图标变黑解决方法~
  5. 图像特效之LOMO效果
  6. OSPF实验———Secondary Address
  7. atomic原子类实现机制_atomic实现原理
  8. 李佳琦、薇娅们的残酷生存物语
  9. 对待新知识、新领域的心态——好奇、批判、独孤求败
  10. IOCTL函数的实现