逆向 | 您所在的位置:网站首页 › 手机号如何查微信 › 逆向 |
目录 前言 一、根据手机号查好友信息 1、人工操作步骤:点击“通讯录”-“新的客户”-“添加”—“输入手机号”—“点击”—“添加” 2、逆向实现: 二、添加好友 1.HOOK好友信息回调 2.执行添加好友方法 总结 前言 如果有一批客户手机号还未添加到企业微信,一个个查询添加势必消耗大量时间和经历。如果能用逆向技术自动查询并添加,不可谓不是个不错的办法。实现起来不是很难,分两步
一、根据手机号查好友信息 1、人工操作步骤:点击“通讯录”-“新的客户”-“添加”—“输入手机号”—“点击 ![]() 1、初始化对话框实例空间 通过Ollydbg找到初始化对话框实例空间的方法地址,算出偏移量(基于基地址的,因为每次程序运行基地址可能会变),初始化控件参数,然后内联汇编调用: //好友对话框对象初始化方法 DWORD dwCallDialog = BaseAddress+OffsetAddress;//基地址+偏移地址 //初始化参数变量 DWORD dwDialog[2] = { 0 }; __asm { pushad pushfd lea eax, dword ptr dwDialog push eax call dword ptr dwCallDialog add esp, 0x4 popfd popad }
2、注册一个窗口类 注册窗口类需要先定义一个WNDCLASSEX结构体变量,特别需要注意的是lpszClassName、hInstance和lpfnWndProc的赋值,lpszClassName是类名称,通过ollydbg逆向分析找出,这里找到的是“SearchExternalsWnd”;hInstance是模块句柄,一版是 通过AfxGetInstanceHandle()获取,但是这里不能直接通过 AfxGetInstanceHandle()获取,因为这个方法获取的是当前模块的句柄,而当前模块是注入进去的,不是企业微信的。其实模块地址就是运行代码的基地址,我们通过获取基地址,强制类型转换成HINSTANCE类型即可;lpfnWndProc是窗口回调方法,通过逆向找到逆向方法的偏移地址。代码如下: HINSTANCE hInstance = (HINSTANCE)GetCallAddressByOffset(0);// AfxGetInstanceHandle(); DWORD wndPro = GetCallAddressByOffset(0x81E57, "DuiLib.dll");//DuiLib.?__WndProc@CWindowWnd@DuiLib@@KGJPAUHWND__@@IIJ@Z //MessageBoxD(NULL, "SerchDialog", "Debug", 0); WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION); wcex.lpfnWndProc = (WNDPROC)wndPro; wcex.hIconSm = LoadIcon(hInstance, IDI_APPLICATION); wcex.lpszClassName = "SearchExternalsWnd"; wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.lpszMenuName = NULL; ATOM atom = RegisterClassEx(&wcex);3、创建窗口实例 m_hWndDialog = CreateWindowEx(0, "SearchExternalsWnd", "添加客户", 0x00CF0000, 0, 0, 0, 0, 0, 0, hInstance, (LPVOID)dwDialog[0]);4、手机号输入框的内存位置填写手机号 手机号输入框信息在窗口实例的0x530位置(通过Ollydbg查看可以明显看到),需要注意:0x540和0x544分别记录的是字符串长度和字节对齐长度,字符串是宽字符。可以直接向这个位置赋值手机号信息 #define duiqi_o(x) x / 0x8 * 0x8 + 0x8 - 1//双字节对齐 LPCWSTR lpwPhone = ToUnicode(lpPhone); DWORD dwPhonePos = dwDialog[0] + 0x530; unsigned int strLen = wcslen(lpwPhone); DWORD dwA1[10] = { 0 }; if (strLen < 0x8) memcpy((PDWORD)dwPhonePos, lpwPhone, strLen * 2); else *(PDWORD)dwPhonePos = (DWORD)lpwPhone; *((PDWORD)dwPhonePos + 0x4) = strLen; *((PDWORD)dwPhonePos + 0x5) = duiqi_o(strLen); dwA1[4] = strLen; dwA1[5] = duiqi_o(strLen);5、调用查询方法 __asm { pushad pushfd mov ecx, dword ptr dwDialog call dword ptr dwCallSerch popfd popad } 二、添加好友 1.HOOK好友信息回调通过Ollydbg工具找到查好友回调的位置,找一个合适的位置HOOK,拦截好友信息。可以获取到的信息有:userid、个人微信ID、昵称、头像等 __asm { pushad pushfd mov eax, dword ptr ds : [edi] push eax call dword ptr CallBack_WechatSerchFriend popfd popad call dword ptr ds : [edx + 0x12c] jmp dword ptr CSerchPhone::m_nJmpAddress } 2.执行添加好友方法通过Ollydbg工具找到加好友的方法地址,然后内联汇编语句调用 __asm { pushad pushfd lea eax, dword ptr dwTempInit push eax call dword ptr dwCallInit add esp, 4 mov ecx, dword ptr[eax] lea edx, dword ptr dwTempGet push edx mov eax, dword ptr[ecx] call dword ptr[eax + 0x1C] mov esi, dword ptr[eax] lea eax, dword ptr dwTempBuf push eax push 0 push sendkey1 push sendkey2 push conversation_id push dtype lea eax, dword ptr dwParamValue push eax push pData push subType push 0 push 0 sub esp, 0x18 mov ecx, esp push pV1 call dwCallV1 mov eax, dword ptr[esi] push dwKey1 push dwKey2 mov ecx, esi call dword ptr[eax + 0x1E8] popfd popad } 总结
Ollydbg找地址比较麻烦,不好描述。有兴趣交流或者需要现成的工具可以联系我 工具下载地址:https://pan.baidu.com/s/1LSYDiKPyR5YHpOp7u56I0w 提取码:embe QQ:1031694913 |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |