selph
selph
发布于 2021-11-02 / 794 阅读
0
0

恶意代码分析实战Lab05-IDA的使用

本章主要是讲IDA的使用

笔记

IDA加载文件:

  • 正常情况下,用PE模式来加载就行
  • 如果目标在PE文件里藏有shellcode等东西,则需要从Binary file模式加载

重新定义数据和代码:

  • 在选中区域按C,可以指定原始字节为代码,,还可以通过按键D和A来将目标分别定义为数据或ASCII数据

作业

lab 5-1

目标文件:lab05-01.dll

  1. Dllmain的地址是什么?

    image-20211004110021976

  2. gethostbyname导入函数定位到什么地址?

    image-20211004110155925

  3. 有多少函数调用了gethostbyname?

    image-20211004110208357

    被五个不同函数调用9次(看签名type=p的就是调用)

  4. 对0x10001757处的调用,哪个DNS请求将被执行?

    image-20211004111351523

    将会执行对pics.praticalmalwareanalysis.com的DNS请求

  5. 在0x1001656处的子过程有多少局部变量?

    image-20211004111505354

    23个局部变量(负的是局部变量)

  6. 在0x1001656处的子过程有多少参数?

    1个参数(正的是参数)

  7. 定位字符串“\cmd.exe /c”在哪里?

    image-20211004111633810

  8. 引用这个字符串的区域发生了什么?

    cmd.exe /c 命令是执行完命令关闭窗口:

    image-20211004112011763

    这里看起来是拼接命令,然后进行网络通信,疑似shell

  9. 在同样的区域,在0x100101C8处,看起来好像dword_1008e5c4是个全局变量,它帮助决定走哪条路径,恶意代码是如何设置这个变量的呢?

    image-20211004112402762

    进入上一个call看看:

    image-20211004112414986

    获取系统版本,然后存到这个全局变量里

  10. 在位于0x1000FF58处的子过程中的几百行指令中,一系列使用memcmp来比较字符串的比较。如果对robotwork的字符串比较是成功的(当memcmp返回0),会发生什么?

    image-20211004112705976

    对比成功后会调用一个函数,然后jmp跳转走

    调用的这个函数会查询注册表:SOFTWARE\Microsoft\Windows\CurrentVersion,然后拼接一个字符串,jmp跳走之后通过send发送出去

  11. PSLIST导出函数做了什么?

    遍历进程获取进程名:

    image-20211004113349774

  12. 使用图模式来绘制出对sub_10004E79的交叉引用图。当进入这个函数时,哪个API函数可能被调用?仅仅基于这些API函数,你会如何重命名这个函数?

    image-20211004113632434

    GetSystemDefaultLangID函数用来获取系统语言,然后调用的子函数里有调用send发包函数,推测这里的功能是把系统语言信息发出去,重命名为:Send_SystemLangID

  13. DllMain 直接调用了多少个WindowsAPI?多少个在深度为2时被调用?

    image-20211004122053089

    深度为2图太大了,这是深度为1的时候

  14. 在0x10001358处,有一个对sleep(一个使用一个包含要睡眠的毫秒数的参数的API函数)的调用。顺着代码向后看,如果这段代码执行,这个程序会睡眠多久?

    image-20211004122957746

    会睡眠30秒

  15. 在0x10001701处是一个对socket的调用。它的3个参数是什么?

    image-20211004123702233

  16. 使用MSDN页面的socket和IDAPro中的命名符号常量,你能使参数更加有意义吗?在你应用了修改以后,参数是什么?

    如上题15的图

  17. 搜索in指令(opcode0xED)的使用。这个指令和一个魔术字符串VMXh用来进行VMware检测。这在这个恶意代码中被使用了吗?使用对执行in指令函数的交叉引用,能发现进一步检测VMware的证据吗?

    image-20211004124216475

    交叉引用往上走,看到字符串:

    image-20211004124250428

    这里有虚拟机检测

  18. 将你的光标跳转到0x1001D988处,你发现了什么?

    看起来是乱码

  19. 如果你安装了IDAPython插件(包括IDAPro的商业版本的插件),运行Lab05-01.py,一个本书中随恶意代码提供的IDAPro Python脚本,(确定光标是在0x1001D988处。)在你运行这个脚本后发生了什么?

    书上给的lab05-01.py上面调用的函数已经过时了,改成ida7.5版本能用的如下:

    sea = get_screen_ea()
    
    for i in range(0x00,0x50):
            b = get_wide_byte(sea+i)		# 获取当前指向的字节
            decoded_byte = b ^ 0x55			# 将获取到的字节和0x55异或
            patch_byte(sea+i,decoded_byte)	# 将原来显示的字节替换成解码后的字节
    

    运行之后,这里的乱码变成了正常的字符串:

    image-20211004125225966

  20. 将光标放在同一位置,你如何将这个数据转成一个单一的ASCII字符串?

    使用A快捷键即可

  21. 使用文本编辑器打开这个脚本,它是如何工作的?

    见题19的注释


评论