直接ALT+T搜索Dllmain
空格切换到Text view
得到Dllmain地址
imports视图双击即可
选中gethostbyname,按x键,18个函数引用
快捷键G,输入跳转地址0x10001757跳到相应位置,遇call往上翻,得知pics.xxxx将被触发
g跳转地址,偏移为负的是局部变量,偏移为正的是参数
string界面ctrl+f
选中对应地址按快捷键查看交叉引用,双击跳转到push
g跳转到地址,x查看dword_1008E5C4的交叉引用
关注mov
eax为sub_10003695的返回值,双击sub_10003695
调用了一个GetVersionExA函数,查阅文档,是确定操作系统平台或版本号的函数
F5反汇编
获取当前版本返回一个布尔值以此来确定版本系列
一直往下翻找到memcmp
0x10010444处找到robotwork
调用memcmp之后平栈,test eax eax
按位与运行使得零标志位zf为1,从而使得jnz指定不执行跳转,继续往下执行sub_100052A2
调用了RegOpenKey、RegClose函数操作注册表
test指令与操作zf=1,jz指令执行跳转到loc_10005309
F5反汇编看的更清楚些
sub_100052A2
大致知道读取worktime和worktimes的键值,然后执行sub_100038EE
会发送个socket请求
alt+T搜索PSLIST跳转到函数所在位置
先看sub_100036C3
huo
获取版本号,返回继续往下走,会跳到loc_1000704E
调sub_1000664,往下翻,应当是创造进程快照的过程
原地反编译,如果进程获取失败
socket发送失败
综上,该函数作用应当是创建进程快照,再将快照发送到指定目标
view->graphs->User Xrefs Chart
GetSystemDefaultLangID应当是获取LanguageID,结合send函数,命名为sendLanguageID
view->graphs->User Xrefs Chart,修改Recursion depth为2
很大
g跳到sleep的位置
off_10019020指向字符串"[This is CTI]30",add让eax再偏移0Dh也就是13,eax变成"30",atoi把字符串30变成整数30,imul使得eax中的整数30乘3E8h即30*1000,而后把300000毫秒压入作为sleep的参数
即sleep睡眠30秒
往上看三个连续的push,即传入socket的参数,protocol、type、af
按M键Use symbolic constant将常量用字符串替换
看不出啥意义
alt+t搜索全局发现一处in指令,R键转换原来的hex看到VMXh
反虚拟机相关字眼