能力值:
( LV4,RANK:50 )
|
-
-
2 楼
在数据窗口ctrl+g 输入0046EDB4,看看,记得转成十进制
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
0046EDB4输入这个找到了.点上去就变成0046EDB3
0046EDB3 002D 5000002D ADD BYTE PTR DS:[2D000050],CH
就是这个数据.转成十进制是指转哪个呢
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我说下我的思路
因为端口绑定是用bind函数。
所以bp bind->运行。
然后ALT+F9->返回
向上找几行找到pSockAddr参数F2下断
重新加载并F9运行。让程序断在pSockAddr上
看ecx保存着pSockAddr的地址
ctrl+g转到地址。
其中。pSockAddr这是一个结构体
struct socketaddr_in{
unsigned short int sin_family;
uint16_t sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
};
其中sin_port就是端口号
所以我们只要修改sin_port就可以了
我在网上随便找了个聊天工具研究了下(自己懒得写)。
但我ctrl+g转到的时候
看到这些
0012FDD4 0200 add al, byte ptr [eax]
0012FDD6 17 pop ss
0012FDD7 70 00 jo short 0012FDD9
0012FDD9 0000 add byte ptr [eax], al
0012FDDB 00CC add ah, cl
我以为是OD对程序进行了分析
就按右键-分析,没有看到从模块中删除分析选项
只有一个扫描目标文件
我就按了一下,程序马上就崩溃了
不知道是不是我找的程序有问题
还是我的思路有问题。
大家指点下
睡了先、、、、
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
对了
这是我分析的目标
这只是个聊天程序的服务端。因为客户端不用绑定端口,所以没有bind函数
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
0040B9C7 |. 6A 00 push 0 ; /Protocol = IPPROTO_IP
0040B9C9 |. 6A 02 push 2 ; |Type = SOCK_DGRAM
0040B9CB |. 6A 02 push 2 ; |Family = AF_INET
0040B9CD |. FF15 B4524200 call dword ptr [<&WS2_32.#23>] ; \socket
0040B9D3 |. 3BF4 cmp esi, esp
0040B9D5 |. E8 E658FFFF call 004012C0
0040B9DA |. 8985 64FEFFFF mov dword ptr [ebp-19C], eax
0040B9E0 |. 8BF4 mov esi, esp
0040B9E2 |. 6A 00 push 0 ; /NetLong = 0
0040B9E4 |. FF15 B8524200 call dword ptr [<&WS2_32.#8>] ; \ntohl
0040B9EA |. 3BF4 cmp esi, esp
0040B9EC |. E8 CF58FFFF call 004012C0
0040B9F1 |. 8985 58FEFFFF mov dword ptr [ebp-1A8], eax
0040B9F7 |. 66:C785 54FEF>mov word ptr [ebp-1AC], 2
0040BA00 |. 8BF4 mov esi, esp
0040BA02 68 70170000 push 1770 ;把这行改成“push 4D2”就可以了,1234的十六进制形式就是4D2
0040BA07 |. FF15 BC524200 call dword ptr [<&WS2_32.#9>] ; \ntohs
0040BA0D |. 3BF4 cmp esi, esp
0040BA0F |. E8 AC58FFFF call 004012C0
0040BA14 |. 66:8985 56FEF>mov word ptr [ebp-1AA], ax
0040BA1B |. 8BF4 mov esi, esp
0040BA1D |. 6A 10 push 10 ; /AddrLen = 10 (16.)
0040BA1F |. 8D8D 54FEFFFF lea ecx, dword ptr [ebp-1AC] ; |
0040BA25 |. 51 push ecx ; |pSockAddr
0040BA26 |. 8B95 64FEFFFF mov edx, dword ptr [ebp-19C] ; |
0040BA2C |. 52 push edx ; |Socket
0040BA2D |. FF15 C0524200 call dword ptr [<&WS2_32.#2>] ; \bind
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
这个程序运行后,默认打开的是6000端口,不是你说的1358端口
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
额,我只是随便找的一个软件来代替,举一反三就行了,
还有我曾经直接对ntohs函数下过断点,不过OD识别不了这个函数,
xdklzy你是怎么定位到这段代码的?
从你给出的代码我发现有两个方法可以定位到ntohs函数,
一是对bind下断二是对Socket下断,不知你是不是这样定位的
谢谢你给出的代码
|
能力值:
( LV4,RANK:50 )
|
-
-
9 楼
由于你这个程序比较简单,我用OllyDbg打开就看到了vc的启动代码
00401300 >/$ 55 push ebp
00401301 |. 8BEC mov ebp, esp
00401303 |. 6A FF push -1
00401305 |. 68 30014200 push 00420130
0040130A |. 68 04404000 push 00404004 ; SE handler installation
0040130F |. 64:A1 00000000 mov eax, dword ptr fs:[0]
00401315 |. 50 push eax
00401316 |. 64:8925 00000000 mov dword ptr fs:[0], esp
0040131D |. 83C4 F0 add esp, -10
00401320 |. 53 push ebx
00401321 |. 56 push esi
00401322 |. 57 push edi
00401323 |. 8965 E8 mov dword ptr [ebp-18], esp
00401326 |. FF15 C4514200 call dword ptr [<&KERNEL32.GetVersion>] ; kernel32.GetVersion
0040132C |. A3 E4354200 mov dword ptr [4235E4], eax
00401331 |. A1 E4354200 mov eax, dword ptr [4235E4]
00401336 |. C1E8 08 shr eax, 8
00401339 |. 25 FF000000 and eax, 0FF
0040133E |. A3 F0354200 mov dword ptr [4235F0], eax
00401343 |. 8B0D E4354200 mov ecx, dword ptr [4235E4]
00401349 |. 81E1 FF000000 and ecx, 0FF
0040134F |. 890D EC354200 mov dword ptr [4235EC], ecx
00401355 |. 8B15 EC354200 mov edx, dword ptr [4235EC]
0040135B |. C1E2 08 shl edx, 8
0040135E |. 0315 F0354200 add edx, dword ptr [4235F0]
00401364 |. 8915 E8354200 mov dword ptr [4235E8], edx
0040136A |. A1 E4354200 mov eax, dword ptr [4235E4]
0040136F |. C1E8 10 shr eax, 10
00401372 |. 25 FFFF0000 and eax, 0FFFF
00401377 |. A3 E4354200 mov dword ptr [4235E4], eax
0040137C |. 6A 00 push 0
0040137E |. E8 9D2A0000 call 00403E20
00401383 |. 83C4 04 add esp, 4
00401386 |. 85C0 test eax, eax
00401388 |. 75 0A jnz short 00401394
0040138A |. 6A 1C push 1C
0040138C |. E8 CF000000 call 00401460
00401391 |. 83C4 04 add esp, 4
00401394 |> C745 FC 00000000 mov dword ptr [ebp-4], 0
0040139B |. E8 10270000 call 00403AB0
004013A0 |. FF15 C0514200 call dword ptr [<&KERNEL32.GetCommandLineA>] ; [GetCommandLineA
004013A6 |. A3 444F4200 mov dword ptr [424F44], eax
004013AB |. E8 E0240000 call 00403890
004013B0 |. A3 BC354200 mov dword ptr [4235BC], eax
004013B5 |. E8 C61F0000 call 00403380
004013BA |. E8 711E0000 call 00403230
004013BF |. E8 8C1A0000 call 00402E50
004013C4 |. 8B0D 00364200 mov ecx, dword ptr [423600]
004013CA |. 890D 04364200 mov dword ptr [423604], ecx
004013D0 |. 8B15 00364200 mov edx, dword ptr [423600]
004013D6 |. 52 push edx
004013D7 |. A1 F8354200 mov eax, dword ptr [4235F8]
004013DC |. 50 push eax
004013DD |. 8B0D F4354200 mov ecx, dword ptr [4235F4]
004013E3 |. 51 push ecx
004013E4 |. E8 1CFCFFFF call 00401005;这句上面和下面是vc的启动代码,调用用户的main()函数,我在这下断,在跟进了几步就定位到上面的代码了
。。。。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
哦明白了。
我突然想通了,我在4楼所说的。直接CTRL+G到结构体定义的地方时不能修改sin_port的值的
因为在定义结构体的时候还没有初始化。、所以要在对结构体初始化的时候修改
也就是xdklzy在6楼说的地方
。
|