目录

前言

一、根据手机号查好友信息

1、人工操作步骤:点击“通讯录”-“新的客户”-“添加”—“输入手机号”—“点击​”—“添加”

2、逆向实现:

二、添加好友

1.HOOK好友信息回调

2.执行添加好友方法

总结


前言

如果有一批客户手机号还未添加到企业微信,一个个查询添加势必消耗大量时间和经历。如果能用逆向技术自动查询并添加,不可谓不是个不错的办法。实现起来不是很难,分两步


一、根据手机号查好友信息

1、人工操作步骤:点击“通讯录”-“新的客户”-“添加”—“输入手机号”—“点击”—“添加”

2、逆向实现:

1、初始化对话框实例空间

通过Ollydbg找到初始化对话框实例空间的方法地址,算出偏移量(基于基地址的,因为每次程序运行基地址可能会变),初始化控件参数,然后内联汇编调用:

//好友对话框对象初始化方法
DWORD dwCallDialog = BaseAddress+OffsetAddress;//基地址+偏移地址//初始化参数变量
DWORD dwDialog[2] = { 0 };
__asm
{pushadpushfdlea eax, dword ptr dwDialogpush eaxcall dword ptr dwCallDialogadd esp, 0x4popfdpopad
}

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
{pushadpushfdmov ecx, dword ptr dwDialogcall dword ptr dwCallSerchpopfdpopad
}

二、添加好友

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

逆向——企业微信根据手机号查微信用户信息并添加好友相关推荐

  1. 企业微信自建应用获取用户信息

    记录一下企业微信自建应用获取用户信息开发过程: 1.第一步,获取授权code,这个在原来首页开发不太合适,在进入首页前新建页面进行授权,点击页面按钮进行授权.需要拼接的授权url.其中corpid是企 ...

  2. 微信小程序2022最新用户信息授权设置

    微信小程序2022最新用户信息授权设置 微信小程序中 用户信息授权 一直是一个非常重要的功能,它有着提升用户体验.进行用户身份认证.便于开发者进行数据分析等作用. -- 但是用户授权功能涉及到用户隐私 ...

  3. 微信小程序授权获取用户信息和手机号码

    微信小程序授权获取用户信息和手机号码 1.微信官方文档 登录:https://developers.weixin.qq.com/miniprogram/dev/framework/open-abili ...

  4. 微信小程序制作——获取用户信息

    微信小程序制作--获取用户信息 1.获取用户信息 方式一 wxml <view bindtap="getUserName">获取当前用户名</view> j ...

  5. vue h5微信公众号授权获取用户信息

    vue h5微信公众号授权获取用户信息 1.申请测试账号 https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 2.修改网页授权 ...

  6. 微信小程序如何获取用户信息

    自我介绍 我是IT果果日记,微信公众号请搜索 IT果果日记 一个普通的技术宅,定期分享技术文章,欢迎点赞.关注和转发,请多关照. 微信小程序用户基本信息有哪些? 除了基本信息,微信还会提供openId ...

  7. 微信小程序授权 获取用户信息

    微信小程序授权 获取用户信息 小程序昵称突然变成了"微信用户",头像也不显示, <!-- 近期很多小伙伴通过该方法获取头像和昵称,代码也没有做改变,突然就变成了下面这样子 - ...

  8. Java实现微信小程序登录 获取用户信息

    小程序比公众号授权登录 更加简单 其实没什么是后台需要处理的 前端传过来一个code 我们保存以下通过code获取过来的openid就可以 其他的用户信息 前端小程序那边可以获取. 首先既然是小程序登 ...

  9. SSM整合--简单的增删改查--修改用户信息

    SSM整合--简单的增删改查 修改用户信息 修改用户信息 ## 根据id查找用户信息,显示在employ_update页面 ## 进行修改信息后,提交表单,保存数据### 1.根据id查询用户信息 h ...

最新文章

  1. java影像出租面向对象,Java中的面向对象 - zhiruochujian的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. Apache Hadoop YARN – NodeManager--转载
  3. 数据库编程起别名的3中方式
  4. Asp.Net MVC4入门指南(5):从控制器访问数据模型
  5. 【机器学习】feature_importances_ 参数源码解析
  6. python logging简单使用
  7. 面试官系统精讲Java源码及大厂真题 - 28 Future、ExecutorService 源码解析
  8. SpringBoot-Freemarker与SpringBoot集成
  9. centos7删除符号链接_如何在 Linux 上查找和删除损坏的符号链接 | Linux 中国
  10. shell 第五次作业(函数、数组)
  11. HanLP-地名识别调试方法
  12. 2022焊工(初级)操作证考试题库及答案
  13. 【超分辨率】何凯明新作:Masked Autoencoders Are Scalable Vision Learners
  14. android系统b181更新包,华为nova 2s官方固件rom刷机包_华为nova2s完整系统升级包
  15. 金山篡改浏览器主页问题(改成毒霸网址大全)
  16. HyperLogLog算法及原理
  17. SSM Chapter 07 MyBatis与Spring的整合
  18. 如何使用博客进行营销,博客营销的五个步骤
  19. Spring MVC异常统一处理(异常信息的国际化,日志记录)
  20. 进击太空:脑电研究新领域

热门文章

  1. 机器学习和深度学习的资料大全
  2. 什么是Ubuntu PPA以及为什么要用它[技术说明]
  3. CCNA培训(四)20210718day04
  4. ios 企业证书申请及发布APP Mac
  5. 不想上班做什么好呢?
  6. 【程序人生】我在过去 5 年里读了 500 本书——这些是前 5 名
  7. fiddler抓包——手机添加代理后APP连不上网的常见4种原因及解决办法
  8. MySQL 用于汉字要使用二进码
  9. 无线服务器插电跳闸,是什么原因导致idc服务器机房搬迁跳闸?
  10. 《乡土中国》 费孝通