首页
社区
课程
招聘
[原创]SoftSnoop2009应用一:如何跟踪加壳程序
发表于: 2009-11-19 13:31 18152

[原创]SoftSnoop2009应用一:如何跟踪加壳程序

2009-11-19 13:31
18152

最新版本SoftSnoop2009V0.3已提供下载。

简单的举例说明下:SoftSnoop2009如何跟踪加壳程序

被跟踪的程序: cyclone.rar(也是在看雪中下的)

使用SoftSnoop跟踪程序有四种方式:
1、“文件”--“打开”
2、“附着到进程”
3、拖放程序到SoftSnoop窗口
4、“选项”--“常规”-- “注册Shell扩展” 选中,exe类型右键中会有“debug with SoftSnoop”

我们先使用第四种方式,跟踪程序直接报错:


说明直接跟踪失败。使用OD运行可以过(海风月影的StrongOD真的强大,膜拜一下)。

下面请使用OD来附助SoftSnoop跟踪此程序:
第一步:使用OD打开cyclone.exe
第二步:打开SoftSnoop,使用第二种跟踪方式“附着到进程”(晕,“附加到进程”好听点吧),把cyclone.exe附加到SoftSnoop
第三步:在OD里运行程序,可以运行,没有报错。可惜什么都没有跟踪到。

没有跟踪到,有两种可能:
第一种:程序后面的运行也不在主程序范围内
第二种:SoftSnoop有问题

查看列举的模块,发现了“ZShell32.dll”,这是什么动态连接库。用百度查找,只找到“Zprotect,与你同行”,竟然还是看雪里的。不用看了,这肯定是壳生成的东西。

在“设置”---“DLL调用”---“报告这些模块内的API”选中,加入ZShell32.dll


重新操作前三步:用OD打开,附加,运行。跟踪列表出来了:(列表比较长就不全列了)

返回地址: 010643A7  函数名称: OL_n10024(ZShell32.dll)
OL_n10024返回值: 0x00000001
     
返回地址: 010643BE  函数名称: MessageBoxA(USER32.dll)
MessageBoxA: 信息对话框
          hWnd=0x001D02D4
          lpText="无效的序列号!"
          lpCaption="错误"
          uType=0x00000010 (MB_OK|MB_ICONERROR|MB_APPLMODAL)
MessageBoxA返回值: 0x00000001 (IDOK)

总结:
如果一个进程SoftSnoop不能直接跟踪,请使用OD附助操作。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (24)
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
其实我一直不会用它,所以也就一直不用,无奈
2009-11-19 16:49
0
雪    币: 215
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
用最新版本V0.3分析,目标程序,自动退出

附件已经重新上传,
上传的附件:
2009-11-19 17:50
0
雪    币: 517
活跃值: (64)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
附件下载后打不开,请重新上传一次
2009-11-19 18:59
0
雪    币: 517
活跃值: (64)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
没有SoftSnoop附加时,你要先保证OD能过。

OD过时,我把下面的异常忽略了


OD成过后,用OD重新打开,再用SoftSnoop附加运行就可以了 (部分列表如下)

返回地址: 00426361  函数名称: Dephi_Set/GetText(Project1.exe)
Dephi_Set/GetText: 设置或获取窗口字符串
          lpDelphiClass=0x0150A8D0  (对象名称:Edit1)
          szNewString=0x00000000
          lpstrBuffer=0x0012E798
          存入缓冲区中的数据: "ccbszhxd"
Dephi_Set/GetText返回值: 0x00000008
     
返回地址: 004430D0  函数名称: Dephi_Set/GetText(Project1.exe)
Dephi_Set/GetText: 设置或获取窗口字符串
          lpDelphiClass=0x0150B3E4  (对象名称:Memo1)
          szNewString=0x00441A68
          lpstrBuffer=0x0012E794
          存入缓冲区中的数据: "797979797979"
Dephi_Set/GetText返回值: 0x0000000C
     
返回地址: 0046BF31  函数名称: GetClassInfoA(USER32.dll)
GetClassInfoA: 取得WNDCLASS结构(或WNDCLASSEX结构)的一个副本
          hInstance=0x00400000
          lpClassName="TMessageForm"
          lpWndClass=0x0012DA30
GetClassInfoA返回值: 0x00000000(NULL表示失败)
     
返回地址: 0046BF6F  函数名称: RegisterClassA(USER32.dll)
RegisterClassA: 注册窗口类
          lpWndClass=0x0012DA7C(类名称:"TMessageForm";类窗口处理函数:"0x465CD4")
RegisterClassA返回值: 0x0015C17A
     
返回地址: 0046C038  函数名称: CreateWindowExA(USER32.dll)
CreateWindowExA: 创建窗口
          dwExStyle=0x00000101
          lpClassName="TMessageForm"
          lpWindowName=NULL
          dwStyle=0x86C80000 (|WS_POPUP|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_CAPTION|WS_BORDER|WS_DLGFRAME|WS_SYSMENU)
          x=0x0000
          y=0x0000
          nWidth=0x0140
          nHeight=0x00F0
          hWndParent=0x000B01B6
          hMenu=0x00000000
          hInstance=0x00400000
          lpParam=0x00000000
CreateWindowExA返回值: 0x0014029A
     
返回地址: 00486852  函数名称: InitializeFlatSB(COMCTL32.dll)
InitializeFlatSB返回值: 0x00000001
     
返回地址: 0045E8A4  函数名称: GetWindowTextA(USER32.dll)
GetWindowTextA: 取得一个窗体的标题文字,或者一个控件的内容
          hWnd=0x000B01B6
          lpBuffer=0x0012DAA8
          nBufferSize=0x00000100
          存入缓冲区中的数据: "Play"
GetWindowTextA返回值: 0x00000004(文本的长度)
     
返回地址: 004689F2  函数名称: TControl::SetName(Project1.exe)
TControl::SetName: 设置对象名称
          lpDelphiClass=0x0150B67C
          szName="Message"
TControl::SetName返回值: 0x00000000
     
返回地址: 00468BF3  函数名称: Dephi_Set/GetText(Project1.exe)
Dephi_Set/GetText: 设置或获取窗口字符串
          lpDelphiClass=0x0150B67C  (对象名称:Message)
          szNewString=0x0012DB88
          lpstrBuffer=0x0012DB80
Dephi_Set/GetText返回值: 0x0012DB80
     
返回地址: 00441F27  函数名称: Dephi_Set/GetText(Project1.exe)
Dephi_Set/GetText: 设置或获取窗口字符串
          lpDelphiClass=0x0150B67C  (对象名称:Message)
          szNewString=0x0043F6F0
          lpstrBuffer=0x0012DAFC
          存入缓冲区中的数据: "Message"
Dephi_Set/GetText返回值: 0x00000007
     
返回地址: 00441F27  函数名称: Dephi_Set/GetText(Project1.exe)
Dephi_Set/GetText: 设置或获取窗口字符串
          lpDelphiClass=0x0150B67C  (对象名称:Message)
          szNewString=0x0043F6F0
          lpstrBuffer=0x0012DA84
          存入缓冲区中的数据: "Message"
Dephi_Set/GetText返回值: 0x00000007
     
返回地址: 00441F27  函数名称: Dephi_Set/GetText(Project1.exe)
Dephi_Set/GetText: 设置或获取窗口字符串
          lpDelphiClass=0x0150B67C  (对象名称:Message)
          szNewString=0x0043F6F0
          lpstrBuffer=0x0012DB78
          存入缓冲区中的数据: "Message"
Dephi_Set/GetText返回值: 0x00000007
     
返回地址: 00468BF3  函数名称: Dephi_Set/GetText(Project1.exe)
Dephi_Set/GetText: 设置或获取窗口字符串
          lpDelphiClass=0x0150B67C  (对象名称:Message)
          szNewString=0x01010101
          lpstrBuffer=0x0012DBA8
          存入缓冲区中的数据: "Message"
Dephi_Set/GetText返回值: 0x00000007
     
返回地址: 00441F27  函数名称: Dephi_Set/GetText(Project1.exe)
Dephi_Set/GetText: 设置或获取窗口字符串
          lpDelphiClass=0x0150B67C  (对象名称:Message)
          szNewString=0x0043F6F0
          lpstrBuffer=0x0012DB24
          存入缓冲区中的数据: "注册失败1,注册码不完整,请检查注册码是否已经全部复制或是否已经全部输入"
Dephi_Set/GetText返回值: 0x00000045
     
     
返回地址: 004689F2  函数名称: TControl::SetName(Project1.exe)
TControl::SetName: 设置对象名称
          lpDelphiClass=0x015059B4
          szName="OK"
TControl::SetName返回值: 0x00000000
     
返回地址: 00468BF3  函数名称: Dephi_Set/GetText(Project1.exe)
Dephi_Set/GetText: 设置或获取窗口字符串
          lpDelphiClass=0x015059B4  (对象名称:OK)
          szNewString=0x0012DB88
          lpstrBuffer=0x0012DB80
Dephi_Set/GetText返回值: 0x0012DB80
     
返回地址: 00468BF3  函数名称: Dephi_Set/GetText(Project1.exe)
Dephi_Set/GetText: 设置或获取窗口字符串
          lpDelphiClass=0x015059B4  (对象名称:OK)
          szNewString=0x00000000
          lpstrBuffer=0x0012DBA8
          存入缓冲区中的数据: "OK"
Dephi_Set/GetText返回值: 0x00000002
     
返回地址: 0046C0C9  函数名称: DestroyWindow(USER32.dll)
DestroyWindow: 注销窗口
          hWnd=0x0014029A
DestroyWindow返回值: 0x00000001
     
返回地址: 00455F35  函数名称: EnableWindow(USER32.dll)
EnableWindow: 设置窗口可用性
          hWnd=0x000801B4
          bEnable=0x00000000 (FALSE)
EnableWindow返回值: 0x00000000
     
返回地址: 00455F35  函数名称: EnableWindow(USER32.dll)
EnableWindow: 设置窗口可用性
          hWnd=0x000B01B6
          bEnable=0x00000000 (FALSE)
EnableWindow返回值: 0x00000000
     
返回地址: 0046BF31  函数名称: GetClassInfoA(USER32.dll)
GetClassInfoA: 取得WNDCLASS结构(或WNDCLASSEX结构)的一个副本
          hInstance=0x00400000
          lpClassName="TMessageForm"
          lpWndClass=0x0012D928
GetClassInfoA返回值: 0x0000C17A(NULL表示失败)
     
返回地址: 0046C038  函数名称: CreateWindowExA(USER32.dll)
CreateWindowExA: 创建窗口
          dwExStyle=0x00000101
          lpClassName="TMessageForm"
          lpWindowName="Play"
          dwStyle=0x86C80000 (|WS_POPUP|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_CAPTION|WS_BORDER|WS_DLGFRAME|WS_SYSMENU)
          x=0x015E
          y=0x0179
          nWidth=0x01C5
          nHeight=0x006E
          hWndParent=0x000B01B6
          hMenu=0x00000000
          hInstance=0x00400000
          lpParam=0x00000000
CreateWindowExA返回值: 0x0015029A
     
返回地址: 00486852  函数名称: InitializeFlatSB(COMCTL32.dll)
InitializeFlatSB返回值: 0x00000001
     
返回地址: 0046BC86  函数名称: GetClassInfoA(USER32.dll)
GetClassInfoA: 取得WNDCLASS结构(或WNDCLASSEX结构)的一个副本
          hInstance=0x00400000
          lpClassName="BUTTON"
          lpWndClass=0x0012D96C
GetClassInfoA返回值: 0x0000C017(NULL表示失败)
     
返回地址: 0046BF31  函数名称: GetClassInfoA(USER32.dll)
GetClassInfoA: 取得WNDCLASS结构(或WNDCLASSEX结构)的一个副本
          hInstance=0x00400000
          lpClassName="TButton"
          lpWndClass=0x0012D920
GetClassInfoA返回值: 0x0000C179(NULL表示失败)
     
返回地址: 0046C038  函数名称: CreateWindowExA(USER32.dll)
CreateWindowExA: 创建窗口
          dwExStyle=0x00000000 (WS_EX_LEFT)
          lpClassName="TButton"
          lpWindowName="OK"
          dwStyle=0x44010001 (|WS_CHILD|WS_CLIPSIBLINGS|WS_TABSTOP|WS_MAXIMIZEBOX|WS_EX_DLGMODALFRAME|WS_EX_CONTROLPARENT)
          x=0x00BA
          y=0x002E
          nWidth=0x004B
          nHeight=0x0019
          hWndParent=0x0015029A
          hMenu=0x00000000
          hInstance=0x00400000
          lpParam=0x00000000
CreateWindowExA返回值: 0x000B027C
         
返回地址: 00441F27  函数名称: Dephi_Set/GetText(Project1.exe)
Dephi_Set/GetText: 设置或获取窗口字符串
          lpDelphiClass=0x0150B67C  (对象名称:Message)
          szNewString=0x0043F6F0
          lpstrBuffer=0x0012D500
          存入缓冲区中的数据: "注册失败1,注册码不完整,请检查注册码是否已经全部复制或是否已经全部输入"
Dephi_Set/GetText返回值: 0x00000045

Dephi程序,对象挺多的
上传的附件:
2009-11-20 09:20
0
雪    币: 276
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
强悍的东东,下载在哪?
2009-11-20 13:05
0
雪    币: 276
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
找到了,原来在论坛里。
2009-11-20 13:18
0
雪    币: 215
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
od过得,用v0.3,会退出目标进程,v0.2就好的。。步骤应该没有错的
另外:能不能在下个版本中加上对日志窗口的鼠标滚动。
2009-11-20 13:28
0
雪    币: 517
活跃值: (64)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
我的电脑v0.3可以过,而且日志窗口的鼠标滚动也可以(这应该是系统自动提供的功能啊)
2009-11-20 15:19
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
看了一下,果然很强。
2009-11-20 18:12
0
雪    币: 197
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
强大的工具,使菜鸟功力暴增啊,收藏一下。
2009-11-21 10:36
0
雪    币: 289
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
thk
12
看到楼主在更新softsnoop这个工具,我也来罗嗦几句。
要实现用softsnoop跟cyclone这个程序,需要满足以下两点:
1.去掉调试标志
设置softsnoop

加载cyclone后停在入口


2.补丁softsnoop


点运行后,弹出

点是后,cyclone就可以在softsnoop中跑起来。
以上只针对cyclone
上传的附件:
  • 1.JPG (15.96kb,1083次下载)
  • 2.JPG (15.41kb,1085次下载)
  • 3.JPG (22.02kb,1087次下载)
  • 5.JPG (9.26kb,1084次下载)
  • 6.JPG (31.99kb,1085次下载)
  • 4.JPG (8.92kb,1084次下载)
2009-11-21 12:51
0
雪    币: 517
活跃值: (64)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
13
谢谢楼上,不过我去掉调试标志,再加上那条语句也没有调试成功。
晚点再研究一下。
2009-11-21 20:14
0
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
谢谢诶楼主  好好研究一下
2009-11-22 21:39
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
15
等待v0.4或是v0.3fix了
2009-11-22 23:22
0
雪    币: 991
活跃值: (195)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
我用0。4附加也不行。。。。。。。
2010-2-6 01:45
0
雪    币: 517
活跃值: (64)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
17
0.4是重写的一个版本,这个地方还没有处理
2010-2-6 08:18
0
雪    币: 555
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
mark 谢谢分享
2010-2-6 09:44
0
雪    币: 388
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
绝对是经典的文章,膜拜了啊,期待能更加完善其功能
2010-2-11 18:27
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
谢谢了 研究一下
2010-2-26 23:54
0
雪    币: 191
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
这个工具很好用,如果能像OD一样做出去掉调试标志的脚本来,就完美了
2010-3-9 16:49
0
雪    币: 455
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
一直不怎么会实用,这回算是学到了一些用例,谢谢!
2010-3-11 17:06
0
雪    币: 20
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
这个东东不会用啊,有没有说明之类的文章
2010-9-19 16:48
0
雪    币: 149
活跃值: (101)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
24
我也来试试看,先谢谢了!!
2011-1-17 22:46
0
雪    币: 29
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
不错。工具的源码在哪里可以下载?
2011-1-18 03:23
0
游客
登录 | 注册 方可回帖
返回
//