首页
社区
课程
招聘
[已解决] [悬赏]求 hook connectEx 的代码! 100.00雪花
发表于: 2017-5-26 15:33 4516

[已解决] [悬赏]求 hook connectEx 的代码! 100.00雪花

2017-5-26 15:33
4516

connectEx 不是导出 API,不知道怎么 hook,请大神指教!



[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (20)
雪    币: 639
活跃值: (1182)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
2
不导出就那地址JMP  咯
2017-5-26 17:34
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
就是不知道怎么弄啊,所以才求助啊!
2017-5-26 17:53
0
雪    币: 1176
活跃值: (1234)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
4

get money hah✌

#include "stdafx.h"
#define WIN32_LEAN_AND_MEAN






#include "MinHook.h"
#if defined _M_X64
#pragma comment(lib, "lib/MinHook.x64.lib")
#elif defined _M_IX86
#pragma comment(lib, "lib/libMinHook-x86-v120-mdd.lib")
#endif



#include <winsock2.h> // Must be included before Mswsock.h
#include <mswsock.h>

#pragma comment(lib, "ws2_32.lib")


LPFN_CONNECTEX GetConnectExPtr(SOCKET s) {
 LPFN_CONNECTEX lpConnectEx = NULL;
 GUID guid = WSAID_CONNECTEX;
 DWORD dwNumBytes = 0;
 WSAIoctl(s , SIO_GET_EXTENSION_FUNCTION_POINTER , &guid , sizeof(guid) , &lpConnectEx , sizeof(lpConnectEx) , &dwNumBytes , NULL , NULL);
 return lpConnectEx;
}

LPFN_CONNECTEX gb_ConnectEx = nullptr;

BOOL WINAPI Mine_ConnectEx(SOCKET s , const struct sockaddr *name , int namelen , PVOID lpSendBuffer , DWORD dwSendDataLength , LPDWORD lpdwBytesSent , LPOVERLAPPED lpOverlapped) {
 // do something...
 return gb_ConnectEx(s , name , namelen , lpSendBuffer , dwSendDataLength , lpdwBytesSent , lpOverlapped);
}

	




上传的附件:
2017-5-26 17:57
0
雪    币: 1176
活跃值: (1234)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
5

在Microsoft edge上 发现一个小BUG  滑动的时候会有条痕 管理员查收下。。。。


上传的附件:
2017-5-26 19:28
0
雪    币: 44229
活跃值: (19950)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
6
Tennn 在Microsoft edge上 发现一个小BUG &nbsp;滑动的时候会有条痕 管理员查收下。。。。
感谢反馈!
我们明天换个大显示器重现一下。
你这个动画制作不错,用啥软件制作的?
2017-5-26 22:35
0
雪    币: 1176
活跃值: (1234)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
7
kanxue 感谢反馈! 我们明天换个大显示器重现一下。 你这个动画制作不错,用啥软件制作的?

                   


sharex:https://github.com/ShareX/ShareX

2017-5-26 22:54
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
Tennn        我先试下你的库,按你贴的代码来看,可能有问题的,比如:GetConnectExPtr(),这个是返回  connectEx  函数地址的,是动态的,我觉得至少是应该  hook  WSAIoctl  后取得地址才行,直接调用  WSAIoctl  获取的地址和  hook  的地址不会一样的。我只是感觉,现在去试试,多些赐教,如有突破,定当感谢!
2017-5-27 12:18
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
#pragma  comment(lib,  &quot;lib/libMinHook-x86-v120-mdd.lib&quot;)  的时候报msvctrd.lib  和  libcmtd.lib  冲突,我把lib/libMinHook-x86-v120-mdd.lib换成lib/libMinHook-x86-v120-mtd.lib,编译没问题了,但  hook  不到。不知道哪里出错了。我是在  hook  WSAIoctl  函数后取得Real_ConnectEx后调用的  MH_CreateHook,但调用失败了。不知何故,请指教!
2017-5-27 13:29
0
雪    币: 1176
活跃值: (1234)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
10
int main() {
	WSADATA wsaData;
	if(0 != WSAStartup(MAKEWORD(2 , 2) , &wsaData))
		return false;
	SOCKET s = socket(AF_INET , SOCK_STREAM , IPPROTO_TCP);
	Real_ConnectEx = GetConnectExPtr(s);
	if(MH_Initialize() != MH_OK) {
		return 1;
	}
	if(MH_CreateHook(&*Real_ConnectEx , &Mine_ConnectEx ,
		reinterpret_cast<LPVOID*>(&gb_ConnectEx)) != MH_OK) {
		return 1;
	}
	if(MH_EnableHook(&*Real_ConnectEx) != MH_OK) {
		return 1;
	}
	//do something
	Real_ConnectEx(0 , 0 , 0 , 0 , 0 , 0 , 0);
	if(MH_DisableHook(&*Real_ConnectEx) != MH_OK) {
		return 1;
	}
	if(MH_Uninitialize() != MH_OK) {
		return 1;
	}
	return 0;
}


2017-5-27 14:37
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
Tennn int&nbsp;main()&nbsp;{ WSADATA&nbsp;wsaData; if(0&nbsp;!=&nbsp;WSAStartup(MA ...
跟之前一样,MH_Initialize()可以成功,后面就不行了。
2017-5-27 14:55
0
雪    币: 1176
活跃值: (1234)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
12
你在逗我吗  昨天是我凭感觉弄的  没具体调试  失败很正常    刚刚这个我调试过了    不存在的
vs2013
2017-5-27 15:01
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
Tennn 你在逗我吗 昨天是我凭感觉弄的 没具体调试 失败很正常 刚刚这个我调试过了 不存在的 vs2013
        SOCKET  s  =  socket(AF_INET  ,  SOCK_STREAM  ,  IPPROTO_TCP);
        Real_ConnectEx  =  GetConnectExPtr(s);
如果是  hook  的话,Real_ConnectEx是动态地址,你这个是硬取的地址,不一样的,我在  hook  WSAIoctl  里获取的地址是不行的。还有更关键的一点,如果是  hook  的话,你也无法知道获取的是  ConnectEx  指针还是  AcceptEx  指针,或者是其他函数的指针。所以说你这个虽然  hook  到了,只是示例可以,真实用例中可能就出问题了。
2017-5-31 10:48
0
雪    币: 248
活跃值: (1056)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14

这是在32上获取Real_ConnectEx  的地址
proto_ConnectEx  typedef  proto  stdcall  :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
plConnectEx  typedef  ptr  proto_ConnectEx

       SIO_GET_EXTENSION_FUNCTION_POINTER  equ  IOC_INOUT  or  IOC_WS2  or  6
       
_ConnectEx                plConnectEx  0
ConnectExGuid       GUID  <25a207b9h,0ddf3h,4660h,<8eh,0e9h,76h,0e5h,8ch,74h,06h,3eh>>

;//////////////////////////
                invoke  WSASocket,AF_INET,  SOCK_STREAM,IPPROTO_IP,  NULL,0,NULL
       cmp  eax,  NULL
       je  GetError_exit
       mov  s,  eax

       invoke  WSAIoctl,s,SIO_GET_EXTENSION_FUNCTION_POINTER,addr  ConnectExGuid,sizeof  GUID,addr  lpfnfunctionNAME,sizeof  lpfnfunctionNAME,addr  dwBytes,NULL,NULL
       cmp  eax,  SOCKET_ERROR
       je  GetError_exit
       m2m  _ConnectEx,lpfnfunctionNAME

2017-5-31 14:29
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
sixL 这是在32上获取Real_ConnectEx&nbsp; 的地址proto_ConnectEx&nbsp; typedef&nbsp; proto& ...
这是什么代码?
2017-5-31 14:50
0
雪    币: 1176
活跃值: (1234)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
16

                                 我不明白你的意思   
什么是你口中的动态地址  我这个怎么是硬取地址   
难道AcceptEx    也是这个方法吗  参数一样? 
你说的真实实例是什么

按你发帖标题和内容    那么我做到了
一开始  你就需要把应用场景或其它更为详细的内容说出来  我好解答  不然你一个问题衍生出2个甚至多个相关问题 
我很绝望啊

2017-5-31 20:00
0
雪    币: 49
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
题主问题是有点多,我觉得Tennn解答的很不错了。要是题主还有其他问题,希望能另开贴问。
2017-6-2 12:13
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
Tennn 你在逗我吗 昨天是我凭感觉弄的 没具体调试 失败很正常 刚刚这个我调试过了 不存在的 vs2013
怎么把赏金支付给你?结贴一提交就提示赏金未分配,实在不知道在哪里分配的,难道只能联系管理员?????
2017-6-26 12:33
0
雪    币: 44229
活跃值: (19950)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
19
深海游鱼 怎么把赏金支付给你?结贴一提交就提示赏金未分配,实在不知道在哪里分配的,难道只能联系管理员?????
单击结帖,找到Tennn回帖的这行,浏览器窗口被撑破,你在最右边,可以看到一个编辑框,让输入“    ”元,输入要给的数字,再结帖即可。
2017-6-26 15:17
0
雪    币: 44229
活跃值: (19950)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
20
深海游鱼 怎么把赏金支付给你?结贴一提交就提示赏金未分配,实在不知道在哪里分配的,难道只能联系管理员?????
若不会操作,回帖告诉我,我帮你结帖
2017-6-27 18:56
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
1.  先获取connectEx指针,得到函数地址:
static  LPFN_sock_ConnectEx  GetConnectExPtr()  {
        LPFN_sock_ConnectEx  lpConnectEx  =  NULL;
        GUID  guid  =  WSAID_CONNECTEX;
        DWORD  dwNumBytes  =  0;

        SOCKET  s  =  socket(AF_INET  ,  SOCK_STREAM  ,  IPPROTO_TCP);
        WSAIoctl(s  ,  SIO_GET_EXTENSION_FUNCTION_POINTER  ,  &amp;guid  ,  sizeof(guid)  ,  &amp;lpConnectEx  ,  sizeof(lpConnectEx)  ,  &amp;dwNumBytes  ,  NULL  ,  NULL);
        closesocket(s);
        return  lpConnectEx;
}
2.  用普通jmp方式或其他如mhook。
2017-6-28 19:54
0
游客
登录 | 注册 方可回帖
返回
//