-
-
[原创]恶意代码分析实战-小结实验IDA部分
-
发表于: 2024-8-15 18:51 1753
-
本人初学,要是有错误的地方望大家帮助指正
1.dllmain地址
考察定位main地址
这里其实是看左边的dllmain函数,然后就能定位到这里
1000D02E
https://blog.csdn.net/weixin_51111267/article/details/131985992
2.关键函数地址
考查导入表里面找关键函数
100163CC 52 gethostbyname WS2_32
3.多少地方引用了这个函数
考查引用
p是函数调用
r是读取
5个
https://hansimov.gitbook.io/malware-analysis/part2-advanced-static-analysis/ch05-ida-pro
4.将精力集中在位于 0x10001757 处的对 gethostbyname 的调用,你能找出哪个 DNS 请求将被触发吗?
考查入参,会入参汇编等计算
数据段然后又偏移13个,那就是这样
从微软里面查文档,不知道可以输入域名,看下面的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 处的子过程中的多少个局部变量?
考查局部变量是负偏移
入参是正偏移
1 2 3 4 5 | 根据lpThreadParameter这个可以看到是入参,不算是局部变量 函数就是这个sub_10001656 这个子过程那就是所有的 0x10001656 .text: 10001656 ; DWORD __stdcall sub_10001656(LPVOID lpThreadParameter) |
不算最后一个就是算是23个局部变量,绿色的就算是IDA自动识别的局部变量
6.IDA Pro 识别了在 0x10001656 处的子过程中的多少个参数
1个参数
只有这一个正偏移
7.使用 Strings 窗口,来在反汇编中定位字符串 \cmd.exe /c。它位于哪?
考查字符串搜索
shift+f12 然后再搜 \cmd.exe /c
xdoors_d:10095B34 0000000D C \cmd.exe /c
8.在引用 \cmd.exe /c 的代码所在的区域发生了什么?
考察搜字符串
不知道咋分析,但是看附近字符串,像是通过cmd远程执行shell
sub函数+那就是入参aCmdExeC
然后就看对应的函数干嘛的,这个参数主要又负责什么
这里就涉及到创建管道执行cmd命令
上一层函数是传socket对象
那就可能是远程执行命令
插件设置显示常量原始名字
https://blog.csdn.net/zhjmyx/article/details/134883979
9、在同样的区域,在 0x100101C8 处,看起来好像 dword_1008E5C4 是一个全局变量,它帮助决定走哪条路径。那恶意代码是如何设置 dword_1008E5C4 的呢?(提示:使用 dword_1008E5C4 的交叉引用。)
考察引用,看写入和读取常量
g搜索0x100101C8
帮助决定是否走loc_100101D7
双击dword_1008E5C4看定义未知
ctrl+x 看交叉引用,写入地方,继续双击
看到是上面sub_10003695的返回值
dword_1008E5C4=1
到这里就是被写入为1了
10、在位于 0x1000FF58 处的子过程中的几百行指令中,一系列使用 memcmp 来比较字符串的比较。如果对 robotwork 的字符串比较是成功的(当 memcmp 返回 0),会发生什么?
考察汇编
搜0x1000FF58没咋看到robotwork的比较相关
shift+f12
robotwork
ctrl+x 看引用位置
这里就是robotwork和Buf1对应的value比较
sub_100052A2
这个过程直接f5
看着像是注册表操作,查询和关闭,查了返回回来
直接f5之后的代码问gpt
总的来说,这个函数的主要目的是从指定的注册表位置获取两个值,并将它们以特定的格式通过套接字发送出去。这里直接就理解为会偷信息发出去
11、PSLIST 导出函数做了什么?
考察了解导出函数功能
windows->重置窗口然后就能看到导出函数窗口了
双击导出函数就能定位到在汇编中的位置
暂时不知道怎么快速分析,直接空格看看逻辑图
但是光看pslist函数名字就像是列进程功能
PSLIST
是指定系统返回16是什么鬼
sub_100036C3
jnz理解就是j不是0才跳,底层逻辑是exa不是0,zf=0,jnz就跳
VersionInformation.dwPlatformId等于2或者5就loc_100036FA 就返回0
否则返回1
大概了解到这个函数就是判断看是不是符合条件的操作系统
sub_1000664C
看里面调用的windows api那就是进程枚举相关操作
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/
就看到GetSystemDefaultLangID这个看着是获取系统默认语言
还有send
右键更改函数名字,分号注释
13、DllMain 直接调用了多少个 Windows API?多少个在深度为 2 时被调用?
view->graph->userxrefs...
粉红色的就是windows api
深度为2的有很多,但是为啥不能直接copy
14、在 0x10001358 处,有一个对 Sleep(一个使用一个包含要睡眠的毫秒数的参数的 API 函数)的调用。顺着代码向后看,如果这段代码执行,这个程序会睡眠多久?
g搜索0x10001358 定位关键汇编
[This is CTI]30正偏移0Dh然后atoi一下,再乘3E8h,最后push进Sleep
atoi作用是字符串转int
那就是30000ms
也就是30s
15、在 0x10001701 处是一个对 socket 的调用。它的 3 个参数是什么?
g搜索0x10001701,上面就是push的三个参数
?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
VMXh直接搜搜不到,那就尝试字符串转16进制搜564d5868h
https://www.bejson.com/convert/ox2str/
可以搜到那就是被使用了
具体点看看是不是检测了vmware
直接看上下文或者f5可以看到in和VMXh所在函数sub_10006196
ctrl+x
三个地方调用
点第一个看看
in可能代表获取硬件信息,然后检测到认为不符合入侵条件就提示发现虚拟机,安装退出
18、将你的光标跳转到 0x1001D988 处,你发现了什么?
看起来就是一堆乱的字符和数字
19、如果你安装了 IDA Python 插件(包括 IDA Pro 的商业版本的插件),运行 Lab05-01.py,一个本书中随恶意代码提供的 IDA Pro Python 脚本,(确定光标是在 0x1001D988 处。)在你运行这个脚本后发生了什么?
file->loadscript->lab05.py
按a就可以看到ASCII
https://medium.com/ce-malware-analysis/lab-5-ida-pro-bb7c7772dd99
这个解码挺有意思的,怎么实现操作的!!
IDA终于用的稍微熟练一点了
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)