精华内容
下载资源
问答
  • PC微信读取微信好友列表(联系人)

    千次阅读 2020-03-23 17:41:45
    PC微信读取联系人有三种常规方法: hook相关call来实现拦截联系人数据 读取内存中的包含联系人的二叉树结构 解密读取微信本地数据库 其实前两种方法只是利用微信启动后已经读取联系人放到内存。第一种是拦截过程...

    开篇

    PC微信端读取联系人有三种常规方法:

    1. hook相关call来实现拦截联系人数据
    2. 读取内存中的包含联系人的二叉树结构
    3. 解密读取微信本地数据库

    其实前两种方法只是利用微信启动后已经读取联系人放到内存。第一种是拦截过程,第二种是直接获取内存的结果。

    第一种方法

    找CALL请看:https://blog.csdn.net/qq_38474570/article/details/95889507

    我就不复述了,我也是小白,也是一步一步按照博客来操作的。我就直接给当前最新版本(2.8.0.121)的需要hook的地址偏移:0x479F07,如果不想自己找CALL的话,可以直接用OD跳转到 WeChatWin.dll + 0x479F07 这个地址。已经知道需要hook的地址,只需要用c++写dll然后注入到微信进程就可以得到所有的联系人信息了(这个call会在登录时被调用多次,所以需要登录前就注入dll)

    成品软件和dll(软件是用aardio写的,dll是用c++写的):https://www.lanzous.com/iakfpch

    效果图:
    在这里插入图片描述

    第二种方法

    相比于第一种方法,这个更简单,连写dll注入都不需要。只要读内存中的数据就行。

    首先我们需要找到二叉树的根节点地址,方法请看:https://www.jianshu.com/p/b5585f03d849 (环境声太吵,人说话声音有点小,不过讲的不错)

    最新版本(2.8.0.121)二叉树根节点的地址:[[WeChatwin.dll + 0x161CF54]+0x28+0x84] + 0x4,中括号表示取地址里面的值。这个地址的偏移也是通过第一个方法的call找出来的,而且第一个方法中的call进去的代码就是通过传入的wxid来循环遍历二叉树来获取该wxid对应的好友数据。

    我们看一下call里面的汇编代码段:
    在这里插入图片描述
    然后用aardio来实现就是:

    import process;
    import console;
    
    getBTree = function(prcs, esi){  //前面不加var表示全局变量
    	if (!prcs.readNumber(esi + 0xD, "byte")){  //cmp byte ptr ds:[esi+0xD],0x0
    		//wxid
    		wxidAddr = prcs.readNumber(esi + 0x10) //获取wxid地址
    		wxidLen = prcs.readNumber(esi + 0x14)  //获取wxid长度
    		wxid = prcs.readStringUtf16(wxidAddr, wxidLen) // 读取Unicode字符串
    		wxid = string.fromUnicode(wxid)   //将Unicode字符串转换为utf-8
    		//微信号
    		微信号地址 = prcs.readNumber(esi + 0x44)
    		微信号长度 = prcs.readNumber(esi + 0x48)
    		微信号 = prcs.readStringUtf16(微信号地址, 微信号长度)
    		微信号 = string.fromUnicode(微信号)
    		//昵称
    		昵称地址 = prcs.readNumber(esi + 0x8C)
    		昵称长度 = prcs.readNumber(esi + 0x8C + 0x4)
    		昵称 = prcs.readStringUtf16(昵称地址, 昵称长度)
    		昵称 = string.fromUnicode(昵称)
    		//备注
    		备注地址 = prcs.readNumber(esi + 0x78)
    		备注长度 = prcs.readNumber(esi + 0x78 + 0x4)
    		备注 = prcs.readStringUtf16(备注地址, 备注长度)
    		备注 = string.fromUnicode(备注)
    		//v1
    		v1Addr = prcs.readNumber(esi + 0x58)
    		v1Len = prcs.readNumber(esi + 0x5C)
    		v1 = prcs.readStringUtf16(v1Addr, v1Len)
    		v1 = string.fromUnicode(v1)
    		//未知a1
    		a1Addr = prcs.readNumber(esi + 0xCC)
    		a1Len = prcs.readNumber(esi + 0xD0)
    		a1 = prcs.readStringUtf16(a1Addr, a1Len)
    		//未知a2
    		a2Addr = prcs.readNumber(esi + 0xE0)
    		a2Len = prcs.readNumber(esi + 0xE4)
    		a2 = prcs.readStringUtf16(a2Addr, a2Len)
    		console.writeText(string.format("%s | %s | %s | %s", tostring(wxid), tostring(微信号), tostring(昵称), tostring(备注)) + '\n')
    		
    		左节点地址 = prcs.readNumber(esi)
    		getBTree(prcs, 左节点地址)
    		右节点地址 = prcs.readNumber(esi + 0x8)
    		getBTree(prcs, 右节点地址)
    		
    	}
    }
    
    
    var readData = function(){
    	console.open()
    	prcs = process.find("WeChat.exe")
        if (null == prcs){
        	console.writeText('未找到微信进程,请先打开微信登录后操作!')
            return
        }
        wechatwinAddr = prcs.getModuleBaseAddress('WeChatWin.dll')
        ecx = prcs.readNumber(wechatwinAddr + 0x161CF54) + 0x28 + 0x84
    	ebx = prcs.readNumber(ecx)     //mov ebx,dword ptr ds:[ecx]
    	esi = prcs.readNumber(ebx + 0x4) //mov esi,dword ptr ds:[ebx+0x4] esi也就是二叉树的根节点
    	getBTree(prcs, esi)
    	console.pause('按任意键关闭!')
    }
    readData()
    
    

    汇编代码中做了很多比较,是因为它要对比传入的微信ID和内存中的数据,而我们全都要则不需要对比,直接递归读取二叉树的左右节点即可。效果就不放了,自己下载aardio运行一遍就行。

    展开全文
  • 本工具 可以读取 应用HOOK 使用简单 解压密码13088888840 有什么不明白可以私密我
  • 微信数据库读取软件sqlcriper和lite 好不容易找到的 分享
  • Windows下逆向分析源码,界面使用Qt,进程和读取内存使用Windows方法,
  • python登陆微信并获取信息,我使用的是itchat函数,使用前记得导入itchat 1、python想要获取微信好友信息,必须用python登陆微信,以下代码可以打开微信登陆二维码,使用手机扫码登陆 itchat.auto_login(True) 2...

    python登陆微信并获取信息,我使用的是itchat函数,使用前记得导入itchat

    1、python想要获取微信好友信息,必须用python登陆微信,以下代码可以打开微信登陆二维码,使用手机扫码登陆

    itchat.auto_login(True)

    2、第二步,获取所有微信好友的信息,并储存微信登陆信息

    # 获取除自己以外的好友信息,update=True字段标识储存微信登陆信息到itchat.pkl文件,后续无需重复验证
    friends = itchat.get_friends(update=True)[1:]

    3、提前新建一个字典,用于后续通过好友信息的字段,判断好友性别

    sex = {'0': '未设置', '1': '男', '2': '女'}

    4、循环分析每个好友的信息

    for i in friends:
        # 判断微信好友名称是否能解析,个别微信名使用图片等其他文字,导致无法解析
        try:
            print('微信名:' + str(i['NickName']))
        except:
            print('微信名:无法解析')
        print('微信名首拼:' + str(i['PYInitial']))
        print('微信名全拼:' + str(i['PYQuanPin']))
        print('备注名:' + str(i['RemarkName']))
        print('备注名首拼:' + str(i['RemarkPYInitial']))
        print('备注名全拼:' + str(i['RemarkPYQuanPin']))
        print('个性签名:' + str(i['Signature']))
        print('城市:' + str(i['City']))
        print('性别:' + sex[str(i['Sex'])])
        print('省份:' + str(i['Province']))
        print('城市:' + str(i['City']))
        print('-----------------------------------------------')

    5、完整代码如下:

    # coding:utf-8
    import itchat
    
    # 打开微信二维码登陆图片
    itchat.auto_login(True)
    # 获取除自己以外的好友信息,update=True字段标识储存微信登陆信息到itchat.pkl文件,后续无需重复验证
    friends = itchat.get_friends(update=True)[1:]
    sex = {'0': '未设置', '1': '男', '2': '女'}
    # 循环分析每个微信好友的信息
    for i in friends:
        # 判断微信好友名称是否能解析,个别微信名使用图片等其他文字,导致无法解析
        try:
            print('微信名:' + str(i['NickName']))
        except:
            print('微信名:无法解析')
        print('微信名首拼:' + str(i['PYInitial']))
        print('微信名全拼:' + str(i['PYQuanPin']))
        print('备注名:' + str(i['RemarkName']))
        print('备注名首拼:' + str(i['RemarkPYInitial']))
        print('备注名全拼:' + str(i['RemarkPYQuanPin']))
        print('个性签名:' + str(i['Signature']))
        print('城市:' + str(i['City']))
        print('性别:' + sex[str(i['Sex'])])
        print('省份:' + str(i['Province']))
        print('城市:' + str(i['City']))
        print('-----------------------------------------------')
    

     

    展开全文
  • 使用jmeter测试HTTP请求(微信H5页面,请求前提是微信用户认证信息存放在缓存),jmeter可以模拟这样的场景吗?可以迷你获取缓存中的微信用户信息
  • 软件介绍: 微信数据库读取软件sqlcriper和lite ,网友分享的,能打开微信的数据库文件,具体使用方法不详。你能够在设置中配置所有SQL编辑器中语法颜色。
  • ASP获取微信用户信息

    2018-07-09 10:29:04
    asp编写的可以获取使用者微信信息,例如昵称、性别、地址、头像等等
  • 微信好友信息爬取

    2018-05-18 09:56:19
    微信不单单是一个即时通讯软件,微信更像是虚拟的现实世界。你所处的朋友圈是怎么样,慢慢你的思想也会变的怎么样。微信朋友圈好友信息爬取。
  • 实时读取微信消息人发来的消息,支持微信6.5.7版本,如果微信版本不同,需用ddms查看对应得资源id进行相关的修改
  • 微信用户信息获取

    千次阅读 2018-09-21 18:13:53
    微信用户信息获取有两种方式:第一种利用普通access_token和openid进行获取;第二种利用网页授权的access_token进行获取。本文主要介绍第二种方式,第一种方式在微信网页授权access_token和普通access_token区别中...

    ​微信用户信息获取有两种方式:第一种利用普通access_token和openid进行获取;第二种利用网页授权的access_token进行获取。本文主要介绍第二种方式,第一种方式在微信网页授权access_token和普通access_token区别中做了介绍。

    OAuth2.0

    说到信息获取,不得不提OAuth2.0。OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容。

    OAuth的解决思路

    OAuth的思路就是在第三方应用程序和服务提供商之间,设置一个授权层(authorization layer)。第三方应用程序不能直接登录服务提供商,只能登录授权层,以此将用户与第三方应用程序区分开来。第三方应用程序登录授权层所用的令牌(token),与用户的密码不同。用户可以在登录的时候,指定授权层令牌的权限范围和有效期。具体流程图如下: 
    微信oauth

    • step1:用户访问公众号页面。

    • step2:回调授权。(后面详解)。

    • step3:用户同意授权。

    • step4:重定向到公众号,并返回code。

    • step5:公众号通过code获取网页授权access_token。

    • step6:刷新access_token(如果需要)。

    • step7:公众号通过access_token来获取用户信息。

    上述step2的具体授权分析 
    若用户只获取用户的openid,则是默认授权,用户不会感知到授权的发生,而是直接进入了回调页(往往是用户页面)。在没有关注的情况下,若想获取其他用户信息snsapi_userinfo,就需要用户手动同意。对于已关注公众号的用户,如果用户从公众号的会话或者自定义菜单进入本公众号的网页授权页,即使是snsapi_userinfo,也是静默授权,用户无感知。

    code的获取

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 
    参数说明:

    参数必须说明
    appid公众号的唯一标识
    redirect_uri授权后重定向的回调链接地址
    response_type返回类型,请填写code
    scope应用授权作用域,snsapi_base(不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo(弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息
    state重定向后会带上state参数,开发者可以填写任意参数值
    wechat_redirect直接再微信打开链接,可以不填此参数。做页02向时候,必须带此参数

    用户同意授权后,页面将跳转至上步设置的回调链接上,并带上code和state参数。 
    code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

    通过code换取网页授权access_token

    如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。 
    具体是将上步获取到的code值传给下面的链接,即替换code=CODE中的CODE。 
    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code 
    参数说明:

    参数必须说明
    appid公众号的唯一标识
    secret公众号的appsecret
    code填写第一步获取的code参数
    grant_type填写为authorization_code

    响应会得到如下json数据,参数如下:

    参数说明
    access_token网页授权接口调用凭证,此access_token与基础支持的access_token不同
    expires_inaccess_token接口调用凭证超时时间,单位(秒)
    refresh_token用户刷新access_token
    openid用户唯一标识,在未观众公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的openid
    scope用户授权的作用域,使用逗号分隔

    刷新access_token

    由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token有效期为30天,当refresh_token失效之后,需要用户重新授权。 
    具体做法:利用上步获取到的refresh_token来重新授权。 
    https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN 
    链接中的参数只需要将REFRESH_TOKEN替换成上一步获取到的access_token值,APPID换成自己公众号的appid就可以重新获得授权。返回的参数和上一步获取access_token返回的参数一样,都是那五种。

    利用access_token获取用户信息

    如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。 
    https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

    参数说明:

    参数说明
    access_token网页授权接口调用凭证,此access_token与基础支持的access_token不同
    openid用户的唯一标识
    lang不是必须,返回国家地区语言版本,zhz-CN简体,zh_TW繁体,en英语

    返回json数据,参数说明:

    参数说明
    subscribe用户是否订阅该公众号标识,值为0时,代表此用户诶有关注该公众号,拉取不到其余信息
    openid用户的唯一标识
    nickname用户昵称
    sex用户性别,1为男,2为女
    province用户个人资料填写的省份
    city用户个人资料填写的城市
    country国家,如中国为CN
    headimgurl用户头像,用户没有头像时该项为空
    privilege用户特权信息,json数组

    转载:https://blog.csdn.net/benben_2015/article/details/78904425

     

    展开全文
  • 实时读取微信消息人发来的消息,支持微信6.5.7版本,如果微信版本不同,需用ddms查看对应得资源id进行相关的修改

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 91,056
精华内容 36,422
关键字:

微信读取信息