首页
社区
课程
招聘
[原创]恶意代码分析实战-小结实验IDA部分
发表于: 2024-8-15 18:51 1753

[原创]恶意代码分析实战-小结实验IDA部分

2024-8-15 18:51
1753

本人初学,要是有错误的地方望大家帮助指正

1.dllmain地址

考察定位main地址
这里其实是看左边的dllmain函数,然后就能定位到这里
image.png
image.png
1000D02E
https://blog.csdn.net/weixin_51111267/article/details/131985992

2.关键函数地址

考查导入表里面找关键函数

100163CC 52 gethostbyname WS2_32

3.多少地方引用了这个函数

考查引用

p是函数调用
r是读取
5个
image.png

https://hansimov.gitbook.io/malware-analysis/part2-advanced-static-analysis/ch05-ida-pro
image.png

4.将精力集中在位于 0x10001757 处的对 gethostbyname 的调用,你能找出哪个 DNS 请求将被触发吗?

考查入参,会入参汇编等计算

数据段然后又偏移13个,那就是这样

image.png

从微软里面查文档,不知道可以输入域名,看下面的csdn就知道可以输入域名了
https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-gethostbyname
https://blog.csdn.net/daiyudong2020/article/details/51946080

1
2
3
4
5
6
7
[This is RDO]pics.praticalmalwareanalys
根据下面的汇编代码,偏移13个,就得到一个域名了pics.praticalmalwareanalys
 
.text:1000174E                 mov     eax, off_10019040 ; "[This is RDO]pics.praticalmalwareanalys"...
.text:10001753                 add     eax, 0Dh
.text:10001756                 push    eax             ; name
.text:10001757                 call    ds:gethostbyname

5.IDA Pro 识别了在 0x10001656 处的子过程中的多少个局部变量?

考查局部变量是负偏移
入参是正偏移

image.png

1
2
3
4
5
根据lpThreadParameter这个可以看到是入参,不算是局部变量
函数就是这个sub_10001656
这个子过程那就是所有的0x10001656
 
.text:10001656 ; DWORD __stdcall sub_10001656(LPVOID lpThreadParameter)

image.png
不算最后一个就是算是23个局部变量,绿色的就算是IDA自动识别的局部变量

6.IDA Pro 识别了在 0x10001656 处的子过程中的多少个参数

1个参数
只有这一个正偏移
image.png

7.使用 Strings 窗口,来在反汇编中定位字符串 \cmd.exe /c。它位于哪?

考查字符串搜索

shift+f12 然后再搜 \cmd.exe /c

xdoors_d:10095B34 0000000D C \cmd.exe /c
image.png

8.在引用 \cmd.exe /c 的代码所在的区域发生了什么?

考察搜字符串
image.png
不知道咋分析,但是看附近字符串,像是通过cmd远程执行shell

image.png
sub函数+那就是入参aCmdExeC
然后就看对应的函数干嘛的,这个参数主要又负责什么
image.png
这里就涉及到创建管道执行cmd命令

image.png
上一层函数是传socket对象
那就可能是远程执行命令

插件设置显示常量原始名字
https://blog.csdn.net/zhjmyx/article/details/134883979

9、在同样的区域,在 0x100101C8 处,看起来好像 dword_1008E5C4 是一个全局变量,它帮助决定走哪条路径。那恶意代码是如何设置 dword_1008E5C4 的呢?(提示:使用 dword_1008E5C4 的交叉引用。)

考察引用,看写入和读取常量

g搜索0x100101C8
image.png
帮助决定是否走loc_100101D7

image.png
双击dword_1008E5C4看定义未知

image.png
ctrl+x 看交叉引用,写入地方,继续双击

image.png
看到是上面sub_10003695的返回值

image.png
dword_1008E5C4=1
到这里就是被写入为1了

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

考察汇编

搜0x1000FF58没咋看到robotwork的比较相关
image.png

image.pngshift+f12
robotwork

image.pngctrl+x 看引用位置

image.png
这里就是robotwork和Buf1对应的value比较

image.png
sub_100052A2

image.png
这个过程直接f5
看着像是注册表操作,查询和关闭,查了返回回来

直接f5之后的代码问gpt
总的来说,这个函数的主要目的是从指定的注册表位置获取两个值,并将它们以特定的格式通过套接字发送出去。这里直接就理解为会偷信息发出去

11、PSLIST 导出函数做了什么?
考察了解导出函数功能

windows->重置窗口然后就能看到导出函数窗口了
image.png
双击导出函数就能定位到在汇编中的位置

image.png

暂时不知道怎么快速分析,直接空格看看逻辑图
但是光看pslist函数名字就像是列进程功能
image.png
PSLIST
是指定系统返回16是什么鬼

image.png
sub_100036C3
jnz理解就是j不是0才跳,底层逻辑是exa不是0,zf=0,jnz就跳
VersionInformation.dwPlatformId等于2或者5就loc_100036FA 就返回0
否则返回1
image.png
大概了解到这个函数就是判断看是不是符合条件的操作系统

sub_1000664C
image.png
image.png
看里面调用的windows api那就是进程枚举相关操作
image.png

12、使用图模式来绘制出对 sub_10004E79 的交叉引用图。当进入这个函数时,哪个 API 函数可能被调用?仅仅基于这些 API 函数,你会如何重命名这个函数?
ida7 不正常的话就更新下
https://stackoverflow.com/questions/61815550/could-not-find-grapher-qwingraph-exe-ida
https://github.com/x64dbg/testplugin/releases/tag/Wingraph/
image.png
就看到GetSystemDefaultLangID这个看着是获取系统默认语言
还有send
image.png

image.png
右键更改函数名字,分号注释

13、DllMain 直接调用了多少个 Windows API?多少个在深度为 2 时被调用?
image.png
image.png
view->graph->userxrefs...
粉红色的就是windows api

image.png
深度为2的有很多,但是为啥不能直接copy

14、在 0x10001358 处,有一个对 Sleep(一个使用一个包含要睡眠的毫秒数的参数的 API 函数)的调用。顺着代码向后看,如果这段代码执行,这个程序会睡眠多久?
g搜索0x10001358 定位关键汇编

image.png
[This is CTI]30正偏移0Dh然后atoi一下,再乘3E8h,最后push进Sleep
image.png
image.png
atoi作用是字符串转int
image.png
那就是30000ms
也就是30s

15、在 0x10001701 处是一个对 socket 的调用。它的 3 个参数是什么?
g搜索0x10001701,上面就是push的三个参数
image.png
?16、使用 MSDN 页面的 socket 和 IDA Pro 中的命名符号常量,你能使参数更加有意义吗?在你应用了修改以后,参数是什么?
搜索socket windows api
https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-socket

1
2
3
4
5
SOCKET WSAAPI socket(
  [in] int af,
  [in] int type,
  [in] int protocol
);

入参输入

1
2
3
.text:100016FB                 push    6               ; protocol
.text:100016FD                 push    1               ; type
.text:100016FF                 push    2               ; af

protocol 6是IPPROTO_TCP(TCP协议)
type 1是SOCK_STREAM(sock流)
af 2是AF_INET(ipv4)

这个想把入参的值改的通俗易懂,怎么改?

17、搜索 in 指令(opcode 0xED) 的使用。这个指令和一个魔术字符串 VMXh 用来进行 VMware 检测。这在这个恶意代码中被使用了吗?使用对执行 in 指令函数的交叉引用,能发现进一步检测 VMware 的证据吗?
直接alt+t 输入in,然后选择find all
image.png
image.png

VMXh直接搜搜不到,那就尝试字符串转16进制搜564d5868h
https://www.bejson.com/convert/ox2str/
image.png
可以搜到那就是被使用了
image.png
具体点看看是不是检测了vmware

直接看上下文或者f5可以看到in和VMXh所在函数sub_10006196
ctrl+ximage.png
三个地方调用
点第一个看看
image.png
in可能代表获取硬件信息,然后检测到认为不符合入侵条件就提示发现虚拟机,安装退出
18、将你的光标跳转到 0x1001D988 处,你发现了什么?
image.png
看起来就是一堆乱的字符和数字

19、如果你安装了 IDA Python 插件(包括 IDA Pro 的商业版本的插件),运行 Lab05-01.py,一个本书中随恶意代码提供的 IDA Pro Python 脚本,(确定光标是在 0x1001D988 处。)在你运行这个脚本后发生了什么?
file->loadscript->lab05.py
按a就可以看到ASCII
image.png
https://medium.com/ce-malware-analysis/lab-5-ida-pro-bb7c7772dd99

这个解码挺有意思的,怎么实现操作的!!
IDA终于用的稍微熟练一点了


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2024-9-12 21:59 被wx_欢乐马_472编辑 ,原因: 要是有错误被发现,那我就改一下
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//