跳至主要内容

盗号病毒分析

http://ift.tt/2EygpUZ

盗号病毒分析

病毒应用

双击应用,程序会睡眠较长的时间,然后会弹出一个应用QQ账户密码错误的提示,让用户输入账户的密码,然后上传账号密码到自己的服务器

执行平台

win7 32 

执行流程

    界面极其具有欺骗性,如果用户不小心输入账户和密码之后,就会被上传到服务器

分析代码

分析工具

od
PEID

恶意代码

首先,当用户点击启动的时候,会发现无翻译,其实在在窗口ShowWindow之前,暂停了88秒才显示

    00401AB0   .  8B4424 0C     mov eax,dword ptr ss:[esp+0xC]
00401AB4   .  33C9          xor ecx,ecx
00401AB6   .  8B00          mov eax,dword ptr ds:[eax]
00401AB8   .  85C0          test eax,eax
00401ABA   .  0f9cc1        setl cl
00401ABD   .  49            dec ecx
00401ABE   .  23C1          and eax,ecx
00401AC0   .  50            push eax                                 ; /Timeout = 88000. ms
00401AC1   .  FF15 E0824800 call dword ptr ds:[<&KERNEL32.Sleep>]    ; \Sleep

88秒之后,软件显示,如果用户大意输入账户和密码之后,会对发送的链接进行格式拼接

"http://ift.tt/2EyLUhF;

拼装好发送的字符串之后, 首先会调用InternetOpen函数建立链接

0045FF65  |.  51            push ecx
0045FF66  |.  83E0 02       and eax,0x2
0045FF69  |.  40            inc eax
0045FF6A  |.  50            push eax
0045FF6B  |.  68 48854B00   push 3.004B8548                          ;  ASCII "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
0045FF70  |.  FF15 44864800 call dword ptr ds:[<&WININET.InternetOpe>;  wininet.InternetOpenA

成功建立连接之后,会调用API发送请求

0046024A   .  8B4D D0       mov ecx,dword ptr ss:[ebp-0x30]
0046024D   .  8B45 08       mov eax,dword ptr ss:[ebp+0x8]
00460250   .  57            push edi
00460251   .  8D55 B0       lea edx,dword ptr ss:[ebp-0x50]
00460254   .  51            push ecx
00460255   .  52            push edx
00460256   .  57            push edi
00460257   .  68 C0854B00   push 3.004B85C0                                 ;  ASCII "HTTP/1.0"
0046025C   .  50            push eax
0046025D   .  68 BC854B00   push 3.004B85BC                                 ;  ASCII "GET"
00460262   .  56            push esi
00460263   .  C745 B0 AC854>mov dword ptr ss:[ebp-0x50],3.004B85AC          ;  ASCII "Accept: */* \r\n"
0046026A   .  897D B4       mov dword ptr ss:[ebp-0x4C],edi
0046026D   .  FF15 38864800 call dword ptr ds:[<&WININET.HttpOpenRequestA>] ;  wininet.HttpOpenRequestA

后面猜测是会发送数据到服务器,因为在这个地方建立链接失败了,虽然返回反馈成功,那个网址都挂了,应该是失败了

然后就是CreateWindow的时候说如果发送成功,本地会生成一个test.txt写着是你发送的内容,也没有看到

The post 盗号病毒分析 appeared first on cole.

http://ift.tt/2Fs34yT VIRUS January 12, 2018 at 08:44AM

评论

此博客中的热门博文

反Hook 之自己实现GetProcAddress和LoadLibraryA(c++ version)

http://ift.tt/2AocAD0 // 课上练习.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <windows.h> //要实现的功能: /* 自己实现GerProcAddress LoadLibraryA */ //思路: /* GerProcAddress和LoadLibraryA都是在Kernel32.dll中的 首要的任务就是找到Kernel32.dll,然后遍历IAT就能找到这两个函数 现在首要的难点就是如何找到kernel32.dll() 通过dll的加载顺序可以找到,而且虽然需要使用未文档化的API,但是好在windgb可以直接看,而且用到的也并不是很多 懒得去晚上搜了,直接自己实现一个得了,作为演示,能用就行(最好还是搜一个正规的结构体) */ /* 0: kd> dt _TEB /a nt!_TEB +0x000 NtTib : _NT_TIB +0x01c EnvironmentPointer : Ptr32 Void +0x020 ClientId : _CLIENT_ID +0x028 ActiveRpcHandle : Ptr32 Void +0x02c ThreadLocalStoragePointer : Ptr32 Void +0x030 ProcessEnvironmentBlock : Ptr32 _PEB //首先实现部分TEB结构体,因为只需要用的PEB的部分,所以实现到这就ok了 */ //构建 TEB typedef struct _TEB { //保证0x30是peb的结构体就ok了 struct _tem { DWORD a1; DWORD a2; DWORD a3; DWORD a4; DWORD a5; DWORD a6; DWORD a7; DWORD a8; DWORD a9; DWORD a10; ...

IDA动态调试ELF中遇到的问题(1)

https://ift.tt/2Gxnf2F 遇到 got SIGCHLD singal(child status has changed)...这种提示 singal fork了子进程 直接点yes,然后继续单步执行,出来提示 pass to application就行了 内存查看 用od习惯了之后,凡事都想右键看一下内存,但是IDA中好像没有那么如意, 目前只是在栈中右键发现有查看hex的选项 动态调试的时候的nop ida保存动态调试的时候修改的数据 方法一:在程序运行的时候保存 The post IDA动态调试ELF中遇到的问题(1) appeared first on cole . https://ift.tt/2q9Qf5g WHATEVER April 05, 2018 at 09:44AM

32位ARM汇编语言(四)数据处理指令

http://ift.tt/2Gwa4v5 基本指令介绍 数据传送指令 比较指令 cmp{条件}操作数1,操作数2 CMN{条件}操作数1,操作数2 TST{条件},操作数1,操作数2 TEQ{条件} 操作数1,操作数2 算数逻辑运算指令 ADD{条件}{S}目的寄存器,操作数1,操作数2 ADC{条件}{S}目的寄存器,操作数1,操作数2 RSB{条件}{S}目的寄存器,操作数1,操作数2 RSC{条件}{S}目的寄存器,操作数1,操作数2 AND{条件}{S}目的寄存器,操作数1,操作数2 EOR{条件}{S}目的寄存器,操作数1,操作数2 BIC{条件}{S}目的寄存器,操作数1,操作数2 基本指令介绍 数据传送指令 数据传送指令用于在寄存器和储存器中之间进行数据的双向传输 比如:MOV ,MVN 算数逻辑运算指令 完成常用的算术与逻辑运算,该类指令不但将运算结果保存在目的寄存器中,同时更新CPSR中相应条件表示位 比如:ADD,ADC,SUB,SBC,RSB,RSC,AND,ORR,EOR,BIC 比较指令 不保存运算结果,只更新CPSR中相应的条件标志位 比如:CMP,CMN,TST,TEQ 数据传送指令 指令 描述 MOV{条件}{S}目的寄存器,操作数 数据传送指令 MVN{条件}{S}目的寄存器,操作数 数据取反传送指令 {S}选项决定指令的操作是否影响CPSR中条件标志位的值 MVN与MOV不同之处是在传送之前按位被取反 __asm__ ("mov ri,r0“); //将寄存器R0的值传送到寄存器R1 __asm__(”mov r1,r0,lsl#3"); //将寄存器R0的值左移3位后传到R1 __asm__(“mov pc,lr"); //将寄存器lr的值传送到pc,常用于子程序返回 __asm__("mvn r0,#0”); // 将立即数0 取反传送到寄存器R0中,完成后R0=-1 比较指令 指令 描述 CMP{条件}操作数1,操作数2 比较指令 CMN{条件}操作数1,操作数2 比较反值指令 TST{条件...