z实验1
1.打开ide 32位 默认第一个选项,然后打开dll文件,ctrl + f 搜DLLMain 双击自动跳转入口点
方法2 就是点击空格 可查看流程图,第一个就是入口点,双击eax
2.点击imports 搜索 gethostbyname 地址就是100163CC
3.双击上图的函数名跳转到对应的汇编代码,找到名字,输入x 获取交叉引用次数
4.在汇编窗口 输入g 弹出跳转地址,输入0x10001757
call 是把栈顶的一个值作为函数的参数传递给函数,然后栈顶现在是eax push进去的,寻找eax的值,eax是mov将off_10019040复制过去,点击off
off数据后还有一个aThisIsRdoPicsP变量,双击 就看到了具体的数据,dns地址就是pics.praticalmalwareanalysis.com
5.输入g 输入地址 0x10001656,pdf中IDA会把局部变量标记为var前缀,存在负偏移,因此数一数有多少个var前缀的就行和有负偏移的个数,所以有23个
6.参数一般使用arg前缀,存在正偏移,所以只有1个参数(lpThreadParameter)
7.ctrl + f 输入\cmd.exe /c
8.双击上面的地址
有个注释 this remote shell session 远程shell会话。
1.输入x 获取交叉引用
查看第二个,像是打开远程桌面
继续查看第一个 因为用了mov 改变了数值
可以看到这个dword_1008E5C4的上面,有一次sub_10003695函数的调用,而汇编中,函数调用的返回值存储在eax中
md 还要补汇编知识
OVERSIONINFOA数据结构中包含操作系统系统版本信息,dwPlatformId标识操作系统,这里的eax作为返回值,先清除。然后通过置位,根据不同操作系统设置返回值。
10.G -> 0x1000FF58 向下找robotwork
如果memcmp为0 test是比较 eax前面推入了9 比较结果就不是0 ZF就不为0 jnz就不会执行
点击sub_100052A2 跳转函数
发现有一个类似注册表的东西 SOFTWARE\Microsoft\Windows\CurrentVersion
下面也对这个offset进行push
最后就是这两个注册表
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WorkTime
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WorkTimes
11.双击进去
调用sub_100036c3 双击 系统平台信息的详细版本信息
12.在函数列表中,搜索函数 双击打开
选中函数名,然后view->Graphs->Xrefs from
根据其引用函数,可以看出其获取了系统的语言,然后使用send发送。这个函数功能应该就是获取系统语言,因此函数名称可以命名未GetSystemLanguage。
13.起始地址和结束地址都写DllMain的起始地址,然后选取深度(Recursion deptch)为1,然后绘图
深度为2
14.参数存储在eax中被压入栈中,往上查看eax的操作过程,在0x10001632处,eax被赋值,提示“[This is CTI]30”,是一个字符串,,然后eax加0D,换算过来是13,此时eax指向了“3”,然后将eax压入栈中,然后调用atoi将字符串“30”转化成整型30。然后eax乘以3E8,换算过来是1000,也就是30*1000,最后等于30000,也就是说要睡眠30秒
15.双击socket 有三个参数 百度搜af的2代表使用IPv4进行通信, type的1代表使用internet地址系列,指要使用IP进行通信,protocol的6代表IPPROTO_TCP,也就是设置传输协议为TCP。
16
17.search -- text...
有一个cmp指令,对比0x564D586,转化一下,选中该字符串,按“R”键,于是就看见了VMXh。
向上寻找函数 输入x
发现都有一句话 虚拟机检测。
18.直接在hex界面 输入地址 感觉是字符串
19.没有商业版
20.在汇编页面 输入 a 转行ascii
21.获取光标所在位置,然后在0x00到0x50间循环,逐字相加,在与0x55异或,然后输出。